Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 причина или следствие?  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37079
на сервере в некоторые моменты sql начинает сильно грузить процессор
при этом количество батчей в секунду практически не меняется, джобы не выполняются
некоторые запросы начинают подвисать, но не понятно это причина или следствие высокой загрузки процессора
как разбираться с этой ситуацией?

посмотрел статистику waits и выяснил что в периоды скачков, так же скачет время ожидания SOS_SCHEDULER_YIELD

но опять же как понять, что причина ?
29 янв 15, 15:12    [17189861]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
если на хосте только скуль - причина. если не только - следствие :)
29 янв 15, 15:15    [17189886]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37079
Crimean
если на хосте только скуль - причина. если не только - следствие :)


если нагрузка не меняется, то откуда могут эти скачки?
29 янв 15, 15:16    [17189889]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
ну как бы сами запросы и есть причина.
29 янв 15, 15:19    [17189918]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Wizandr
если нагрузка не меняется, то откуда могут эти скачки?


а в чем вы ее меряете? в батчах / секунду? так батчи _разные_ могут быть. "дешевые" и "дорогие"
29 янв 15, 15:20    [17189928]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8839
Wizandr
если нагрузка не меняется

Нагрузка в Вашем понимании не меняется. Очевидно, что какой-то код эти моменты выполняется.
29 янв 15, 15:54    [17190315]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Wizandr
при этом количество батчей в секунду практически не меняется, джобы не выполняются
некоторые запросы начинают подвисать, но не понятно это причина или следствие высокой загрузки процессора

auto create/update statistics ?
29 янв 15, 15:56    [17190338]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37079
Glory
Wizandr
при этом количество батчей в секунду практически не меняется, джобы не выполняются
некоторые запросы начинают подвисать, но не понятно это причина или следствие высокой загрузки процессора

auto create/update statistics ?


интересно, можно ли это проверить по статистике waits?
29 янв 15, 16:25    [17190525]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Glory
Wizandr
при этом количество батчей в секунду практически не меняется, джобы не выполняются
некоторые запросы начинают подвисать, но не понятно это причина или следствие высокой загрузки процессора

auto create/update statistics ?

Давно хотел спросить про update statistics.
Есть ли рекомендация её отключать и настраивать джобами?
29 янв 15, 17:45    [17191172]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Александр52
Давно хотел спросить про update statistics.
Есть ли рекомендация её отключать и настраивать джобами?


слишком много вариантов. универсального рецепта нет. в худшем случае вам еще и в "самплинг интервал" вникать надо будет
29 янв 15, 17:49    [17191203]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
Wizandr
выяснил что в периоды скачков, так же скачет время ожидания SOS_SCHEDULER_YIELD
проверь не включено ли где энергосбережение на уровне винды/биоса/где угодно где оно включается
29 янв 15, 17:50    [17191209]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Crimean
Александр52
Давно хотел спросить про update statistics.
Есть ли рекомендация её отключать и настраивать джобами?


слишком много вариантов. универсального рецепта нет. в худшем случае вам еще и в "самплинг интервал" вникать надо будет

Печально. Было бы очень удобно иметь под рукой официальную рекомендацию вендора и отталкиваться от нее в случае спорных ситуаций.
29 янв 15, 17:55    [17191233]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Александр52,

официальная, обычно, автоапдейт и трасфлаг для адаптивного выбора порога
это писали 100 раз начиная с 2008 скуля
а дальше все очень индивидуально. для этого столько параметров вокруг и сделано
30 янв 15, 00:39    [17192897]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
так а посмотреть какие запросы в это время выполняются и с какими типами ожиданий. Может тут и прояснится все. sys.dm_exec_sessions, sys.dm_exec_requests ,sys.dm_os_waiting_tasks
30 янв 15, 10:48    [17193958]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37079
Мистер Хенки
так а посмотреть какие запросы в это время выполняются и с какими типами ожиданий. Может тут и прояснится все. sys.dm_exec_sessions, sys.dm_exec_requests ,sys.dm_os_waiting_tasks


не понятно что показвает столбец wait_duration_ms из sys.dm_os_waiting_tasks
это время ожидания соответствующего типа в соответствующей сессии ?

но тогда получается что оно на момент выполнения запроса к sys.dm_os_waiting_tasks
если сессия будет продолжать выполняться после того как я возьму данные из sys.dm_os_waiting_tasks то я не смогу понять какое конечное значение у wait_duration_ms для этой сессии
30 янв 15, 13:06    [17194946]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Wizandr
Мистер Хенки
так а посмотреть какие запросы в это время выполняются и с какими типами ожиданий. Может тут и прояснится все. sys.dm_exec_sessions, sys.dm_exec_requests ,sys.dm_os_waiting_tasks


не понятно что показвает столбец wait_duration_ms из sys.dm_os_waiting_tasks
это время ожидания соответствующего типа в соответствующей сессии ?

но тогда получается что оно на момент выполнения запроса к sys.dm_os_waiting_tasks
если сессия будет продолжать выполняться после того как я возьму данные из sys.dm_os_waiting_tasks то я не смогу понять какое конечное значение у wait_duration_ms для этой сессии

как я понимаю ожидание текущей выполняющейся задачи в рамках сессии. Во время подтупливания интересно посмотреть с каким типом ожидания выстраиваются задачи и какие команды им соответствуют. Конечно это данные срез информации на момент выполнения запроса, но впринципе очень полезны. Если лень джойнить, то можно готовое из интернетов использовать:
SELECT 
   [Session ID]    = s.session_id, 
   c.num_reads,
   [User Process]  = CONVERT(CHAR(1), s.is_user_process),
   [Login]         = s.login_name,   
   [Database]      = ISNULL(db_name(r.database_id), N''), 
   [Task State]    = ISNULL(t.task_state, N''), 
   [Command]       = ISNULL(r.command, N''),
   [query]     = ISNULL(SUBSTRING(sqltext.text, ( r.statement_start_offset / 2 ) + 1, 
              ( ( CASE WHEN r.statement_end_offset <= 0
                       THEN DATALENGTH(sqltext.text) 
              ELSE r.statement_end_offset END - 
       r.statement_start_offset ) / 2 ) + 1), N''),
   [execution time (ms)]= ISNULL(r.total_elapsed_time, N''),
   [Application]   = ISNULL(s.program_name, N''), 
   [Wait Time (ms)]     = ISNULL(w.wait_duration_ms, 0),
   [Wait Type]     = ISNULL(w.wait_type, N''),
   [Blocked By]    = ISNULL(CONVERT (varchar, w.blocking_session_id), '')
--into #blocked_queries
FROM sys.dm_exec_sessions s LEFT OUTER JOIN sys.dm_exec_connections c ON (s.session_id = c.session_id)
LEFT OUTER JOIN sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS sqltext ON (s.session_id = r.session_id)
LEFT OUTER JOIN sys.dm_os_tasks t ON (r.session_id = t.session_id AND r.request_id = t.request_id)
LEFT OUTER JOIN 
(
    -- In some cases (e.g. parallel queries, also waiting for a worker), one thread can be flagged as 
    -- waiting for several different threads.  This will cause that thread to show up in multiple rows 
    -- in our grid, which we don't want.  Use ROW_NUMBER to select the longest wait for each thread, 
    -- and use it as representative of the other wait relationships this thread is involved in. 
    SELECT *, ROW_NUMBER() OVER (PARTITION BY waiting_task_address ORDER BY wait_duration_ms DESC) AS row_num
    FROM sys.dm_os_waiting_tasks 
) w ON (t.task_address = w.waiting_task_address) AND w.row_num = 1
WHERE w.session_id >=50 
--and 
--t.task_state = 'SUSPENDED'
order by 1
30 янв 15, 17:56    [17197413]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Wizandr
Glory
пропущено...

auto create/update statistics ?


интересно, можно ли это проверить по статистике waits?


Про автостатистику:
- посмотреть активность джобов статистики до проблемы и во время.
- посмотреть есть ли регулярно перекомпелируемые запросы .
ЗЫ: проверисть совет от Гадя Петрович.
30 янв 15, 20:32    [17198088]     Ответить | Цитировать Сообщить модератору
 Re: причина или следствие?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Мистер Хенки
Wizandr
пропущено...


не понятно что показвает столбец wait_duration_ms из sys.dm_os_waiting_tasks
это время ожидания соответствующего типа в соответствующей сессии ?

но тогда получается что оно на момент выполнения запроса к sys.dm_os_waiting_tasks
если сессия будет продолжать выполняться после того как я возьму данные из sys.dm_os_waiting_tasks то я не смогу понять какое конечное значение у wait_duration_ms для этой сессии

как я понимаю ожидание текущей выполняющейся задачи в рамках сессии. Во время подтупливания интересно посмотреть с каким типом ожидания выстраиваются задачи и какие команды им соответствуют. Конечно это данные срез информации на момент выполнения запроса, но впринципе очень полезны. Если лень джойнить, то можно готовое из интернетов использовать:


Лучше скачать и поставить sp_WhoIsActive
Там можно дельту смотреть по cpu/reads, за определенный короткий период.
30 янв 15, 20:56    [17198166]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить