2014-09-09 5 views
0

У меня есть сервер базы данных mssql, который редко попадает на 100% использование ЦП. Когда это происходит, больше никаких подключений к базе данных не происходит.mssql Сервер производственного БД на 100% CPU

Единственное решение, которое у нас было до сих пор, - перезагрузить сервер. Это не происходит с использованием какой-либо частоты. Не в то же время, ни на день. Мы прошли три недели без каких-либо событий, и до сих пор это была неделя, так как это случилось в последний раз, когда мы столкнулись с этой проблемой.

Когда мы просматриваем журналы ошибок SQL Server мы можем увидеть, что идентификатор процесса, как представляется, быть причиной проблемы, но журналы Dont сохранить то, что процесс делает, это был заблокирован другим процессом и т.д.

Когда возникла проблема, мы не можем подключиться к ящику, мы не можем запускать какую-либо из команд sp_who, чтобы попытаться определить, какая инструкция sql выполняется при возникновении проблемы. Будем признавать, что мы пытаемся подключиться с помощью Management Studio.

Мы не хотим запускать профилировщик SQL, даже в ящике DB, если мы можем избежать этого из-за утечки ресурсов для того, что происходит так редко.

Я пропустил трюк в том, что там что-то записывается в журналах ошибок, но поскольку я не являюсь администратором баз данных, я его пропускаю.

+0

Является ли сервером виртуальный сервер? Запуск в Hyper-V? – Donal

+0

@Donal. Сервер работает в виртуальной среде VMWare. –

+0

ОК, мы видели проблемы с cpu spiking в SQL Server при размещении в виртуальной машине. Обычно это происходит из-за того, что резервное ОЗУ становится большим. Мы должны использовать RAMMap для очистки рабочих наборов. Не уверен, что это проблема, но стоит попробовать. См. Здесь: http://dandar3.blogspot.ie/2012/05/rammap-freeing-up-memory.html – Donal

ответ

0

Вы можете попытаться сделать эти вещи:

  1. Вы можете попытаться очистить кэш с помощью DBCC FREEPROCCACHE
  2. Вы можете identify the most costly SQL Server queries using DMV’s

    SELECT TOP 20 
        qs.sql_handle, 
        qs.execution_count, 
        qs.total_worker_time AS Total_CPU, 
        total_CPU_inSeconds = --Converted from microseconds 
        qs.total_worker_time/1000000, 
        average_CPU_inSeconds = --Converted from microseconds 
        (qs.total_worker_time/1000000)/qs.execution_count, 
        qs.total_elapsed_time, 
        total_elapsed_time_inSeconds = --Converted from microseconds 
        qs.total_elapsed_time/1000000, 
        st.text, 
        qp.query_plan 
    FROM 
        sys.dm_exec_query_stats AS qs 
        CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st 
        CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp 
    ORDER BY qs.total_worker_time DESC 
    
  3. Вы можете проверить монитор активности при управлении и сортировать по ЦП

+0

R.T. когда вы входите на работу, я попрошу наших парней инфраструктуры запустить запрос. Как его производственный сервер у меня нет доступа к нему. К сожалению, когда проблема возникает, мы пытаемся даже удалиться на сервере, и поскольку экземпляр не будет принимать больше соединений, мы получаем тайм-аут при попытке подключить сообщения об ошибках. Поэтому, когда проблема возникает, мы не можем подключиться к экземпляру sql. В этих случаях монитор Activity не может помочь. –

+0

@DarrenGuy: - Я могу понять сценарий, поскольку я был к этому, и для меня запрос решил цель, поскольку я обнаружил, что был один запрос, который занимался большим использованием ЦП, и поэтому нам пришлось убить сессию этого конкретного пользователь. –

+0

Попробуйте использовать [Выделенное подключение администратора] (http://technet.microsoft.com/en-us/library/ms178068%28v=sql.105%29.aspx), когда обычные соединения не удастся. Однако не для повседневных рабочих нагрузок. –

0

Прежде всего, проверить, что работает на сервере sql, и проверить использование процессора spids или если имеются блокировки. выберите * из sys.sysprocesses где spid> 50 order by cpu desc; Если вы обнаружите какие-либо конкретные процессы и вызвали загрузку ЦП, найдите таблицы и проверьте обновленную статистику или любые отсутствующие индексы для этой таблицы или выполните операцию восстановления индекса. Если сервер didnt позволяет вам входить в систему или sql получает зависание каждый раз, когда процессор высок, то используйте инструмент сбора данных с именем PSSDIAG, который является диагностическим инструментом, который будет собирать все действия на сервере sql, чтобы вы могли позже проанализировать проблему и его бесплатно и предоставляется Microsoft. Просто запустите его в течение 10-15 минут, потому что это займет много места (зависит от операций).

1
  • Должна быть обновлена ​​статика.
  • Индексация фрагментации должна быть проверкой и повторной заправкой или восстановлением sholud .
  • Попробуйте выполнить поиск по индексам покрытия.
  • Найдите недостающие индексы и выполните их.
  • Удалить неиспользованные индексы.
Смежные вопросы