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

Откуда:
Сообщений: 23
Доброго дня, коллеги.
Администрирую БД на базе MS SQL 2012
Объем базы порядка 300Гб.
В последнее время втечение рабочего дня время от времени, наблюдается некое водвисание БД. Глядя в монитор активности, вижу, что в очереди "ожидающих" заданий - они копятся и их кол-во растёт. Следовательно, есть какое-то задание/запрос, который очень долго выполняется, остальные ждут очереди.
Как его поймать? Топ самых тяжелых вопросов - не решает, там ничего особенного нет.
График монитора прилагаю

К сообщению приложен файл. Размер - 46Kb
20 июн 16, 17:01    [19315349]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти зависающее задание  [new]
karu
Member

Откуда:
Сообщений: 34
dimugric, В момент появления "тормозов" выполните на сервере скрипт:

SELECT er.blocking_session_id
,er.start_time
,host_name
,last_wait_type
,login_name
,er.session_id
,[Individual Query] = SUBSTRING(st.TEXT, er.statement_start_offset / 2, (
CASE
WHEN er.statement_end_offset = - 1
THEN LEN(CONVERT(NVARCHAR(MAX), st.TEXT)) * 2
ELSE er.statement_end_offset
END - er.statement_start_offset
) / 2)
,st.TEXT
,er.cpu_time
,es.program_name
,last_wait_type
,*
FROM sys.dm_exec_requests er
INNER JOIN sys.dm_exec_sessions es ON er.session_id = es.session_id
CROSS APPLY sys.dm_exec_sql_text((er.sql_handle)) st
WHERE es.session_id > 49
AND es.session_id <> @@spid
AND last_wait_type <> 'ASYNC_NETWORK_IO'
ORDER BY er.start_time ASC

Он покажет активные запросы, блокировки и тд.
20 июн 16, 17:50    [19315598]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти зависающее задание  [new]
dimugric
Member

Откуда:
Сообщений: 23
Спасибо. Буду ждать зависона и попробую этот скрипт
21 июн 16, 08:57    [19317400]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти зависающее задание  [new]
dimugric
Member

Откуда:
Сообщений: 23
Поймал подвисон, выполнил запрос, получил следующий вывод:

0 2016-05-19 10:53:13.483 PR01 SP_SERVER_DIAGNOSTICS_SLEEP NT AUTHORITY\СИСТЕМА 56 sp_server_diagnostic sp_server_diagnostics 2227531 Операционная система Microsoft® Windows® SP_SERVER_DIAGNOSTICS_SLEEP 56 0 2016-05-19 10:53:13.483 suspended EXECUTE 0x0400FF7F39A855C6010000000000000000000000000000000000000000000000000000000000000000000000 -1 -1 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1 2 ED58BC42-DBBD-40C0-8410-E7866C128009 0 SP_SERVER_DIAGNOSTICS_SLEEP 739 SP_SERVER_DIAGNOSTICS_SLEEP 0 1 0 0x 0 0 2227531 -1449028372 15 0x000000207DA0D498 16 0 126 -1 русский dmy 1 1 0 1 0 1 1 1 1 2 -1 0 5 0 1 0 0 1 0x0000000000000000 0x0000000000000000 56 2016-05-19 10:53:13.483 PR01 Операционная система Microsoft® Windows® 9904 7 ODBC 0x010100000000000512000000 NT AUTHORITY\СИСТЕМА NT AUTHORITY СИСТЕМА running 0x 0 0 0 0 4 2016-05-19 10:53:13.483 2016-05-19 10:53:13.483 0 0 0 1 -1 русский dmy 1 1 0 1 0 1 1 1 1 2 -1 0 5 0 0x010100000000000512000000 DOMAIN\PR01$ NULL NULL NULL 1 1 1 0 32767 -967464903 1 0 sp_server_diagnostics

Т.е. ругается на SP_SERVER_DIAGNOSTICS
Что ему может не нравится?
21 июн 16, 09:31    [19317489]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти зависающее задание  [new]
o-o
Guest
кто и где ругается,
вы запрос-то смотрели,
или скопипастили и хорош?
это ж sys.dm_exec_requests,
то, что сейчас выполняетя с фильтром на не ваш собственный запрос.
ну выполняетася и выполняется, при чем тут "зависон"?
ожидания надо смотреть, а не все подряд.
и фильтровать надо по is_user_process = 1,
потому как давно уже системные процессы получают спиды за 50
21 июн 16, 10:19    [19317655]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти зависающее задание  [new]
karu
Member

Откуда:
Сообщений: 34
dimugric,
select @@version
go
SELECT 'IsClustered', SERVERPROPERTY('IsClustered')
go
Результат напишите, пожалуйста.
21 июн 16, 10:20    [19317656]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти зависающее задание  [new]
o-o
Guest
это я молчу про ваш замечательно отформатированный выхлоп,
вы сами такое стали бы читать?
хорошо хоть blocking_session_id идет первой колонкой.
там НОЛь
и кто вообще сказал, что чтоб висеть, надо непременно быть блокированным?
у нас например сплошное PAGEIOLATCH_SH в ожиданиях,
нет никаких блокировщиков, но висят все, ибо говнодиски
21 июн 16, 10:24    [19317683]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти зависающее задание  [new]
dimugric
Member

Откуда:
Сообщений: 23
2 karu
Microsoft SQL Server 2012 (SP1) - 11.0.3460.0 (X64)
Jul 22 2014 15:22:00
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

IsClustered

Спасибо Вам большое, вывод выше был сделан как только зависон прошёл, не успел поймать.
В следующее зависание получилось выловить. пока очередь только собиралась, и запрос эту очередь запросов чудесно отфильтровал. По хранимой процедуре нашёл что за отчет убивал БД. Шла выборка кучи полей из 2х таблиц, одна из которых по размеру более 55Гб. Получилось имитировать проблему и проверить.
Спасибо Вам ещё раз огромное.

2 o-o

Да, запрос я просто скопипастил и он мне помог. Выхлоп дал тот, который был.
Вижу Вашу бурю эмоций, но здесь вроде как помогают людям. Бестолковый троллинг, извините, не интересен.
Про говнодиски помолчу. У меня стоит storwize v3700 c 17 sas дисками по 10к об/мин в raid10 ... так что про говнодиски всё же не стоит говорить
21 июн 16, 11:47    [19318151]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти зависающее задание  [new]
o-o
Guest
dimugric
2 o-o
Да, запрос я просто скопипастил и он мне помог. Выхлоп дал тот, который был.
Вижу Вашу бурю эмоций, но здесь вроде как помогают людям. Бестолковый троллинг, извините, не интересен.
Про говнодиски помолчу. У меня стоит storwize v3700 c 17 sas дисками по 10к об/мин в raid10 ... так что про говнодиски всё же не стоит говорить

диски и PAGEIOLATCH_SH это просто пример ожидания, где никакого блокировщика нет.
пример не обязан описывать именно вашу проблему, это *просто пример*.

а то, что вы выложили, вообще не проливает свет ни на что.
SP_SERVER_DIAGNOSTICS_SLEEP -- это никакая не ругань,
автор
This wait type is when the background system health monitor thread is waiting between checking whether to run the sp_server_diagnostics procedure.
This was added for SQL Server 2012 to aid with automatic detection of failures to allow automatic failover with availability groups.
----
I have not seen this wait type be a noticeable contention point and it can be safely ignored.
This wait type is one that I usually filter out as a benign wait when doing wait statistics analysis.

оно только намекает на то, что у вас кластер
21 июн 16, 12:38    [19318349]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти зависающее задание  [new]
dimugric
Member

Откуда:
Сообщений: 23
Я выложил, что мне выдал запрос. Сейчас понял, что не информативно, потому что не успел блокировку поймать.
КОгда же блокировка прошла, да, запрос выдал мне строющуюся очередь из запросов.
И верно, у меня кластер
21 июн 16, 12:50    [19318410]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти зависающее задание  [new]
o-o
Guest
я вам пытаюсь донести,
что прежде чем вываливать какую-то неотформатированную кучу информации в топик,
можно бы и посмотреть, запрос что вообще выдает.

я еще понимаю вывалить все ожидания и предложить в них покопаться.
но вы выложили просто *все выполнявшиеся в тот момент запросы*
потому что именно это отдает sys.dm_exec_requests
21 июн 16, 13:06    [19318500]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти зависающее задание  [new]
aleks2
Guest
dimugric
Доброго дня, коллеги.
Администрирую БД на базе MS SQL 2012
Объем базы порядка 300Гб.
В последнее время втечение рабочего дня время от времени, наблюдается некое водвисание БД. Глядя в монитор активности, вижу, что в очереди "ожидающих" заданий - они копятся и их кол-во растёт. Следовательно, есть какое-то задание/запрос, который очень долго выполняется, остальные ждут очереди.
Как его поймать? Топ самых тяжелых вопросов - не решает, там ничего особенного нет.
График монитора прилагаю


С логикой и тя плохо.
Совсем не обязательно "есть какое-то задание/запрос, который очень долго выполняется".
Вполне достаточно "общей нагрузки" запросами "средней длительности".
И будет полный ахтунг.
21 июн 16, 13:27    [19318631]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить