MS SQL Profiler - как узнать, какой запрос отваливается по таймауту, а какой - виновник?

На главную страницу форума

Страницы: 1 |

05.03.2018 11:02:09
* 0 * bvn13 : Сабж. Как правильно настроить трассировку?
05.03.2018 11:29:44
* 1 * sf : я бы не в профайлер, а в статистку полез
05.03.2018 11:45:28
* 2 * bvn13 : это куда?
05.03.2018 13:22:16 Обращения на текущей странице: -5-
* 3 * sf : смотри статистику - какие запросы выполняются долго
то есть смотри waits
05.03.2018 13:24:20 Обращения на текущей странице: -6-7-10-
* 4 * sf : а если на свои кривые запросы грешишь, то вот те пример
select --top 5000
sum(qs.total_worker_time/1000) as total_cpu_time,
sum(qs.execution_count) as total_execution_count,
sum(qs.total_worker_time) /
sum(qs.execution_count) as price,
count(*) as number_of_statements,
qs.plan_handle,
qs.sql_handle
from
sys.dm_exec_query_stats qs
group by qs.plan_handle,qs.sql_handle
having sum(qs.execution_count) >20
order by sum(qs.total_worker_time) /
sum(qs.execution_count) desc
05.03.2018 13:24:26
* 5 * bvn13 : (3) научи. я не знаю, где смотреть статистику
05.03.2018 13:25:49 Обращения на текущей странице: -9-
* 6 * Чеширрский кот : (4) - а где тут отбор по периоду задать?
05.03.2018 13:26:09 Обращения на текущей странице: -10-
* 7 * bvn13 : (4) что я должен с этим сделать? какие-то циферки одни...

05.03.2018 13:26:15
* 8 * sf : по хендлу смотреть запрос вот так можно


SELECT sql_handle AS Handle,
SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS Text

FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
WHERE sql_handle = 0x02000000434CE2024C5715C641DC8D14A1A0124F1EBCD915--{SQL Handle}
05.03.2018 13:27:04 Обращения на текущей странице: -11-
* 9 * sf : (6) период? может тебе рассказать что такое статистика и план запросов?
05.03.2018 13:28:13
* 10 * sf : (7) в (4) мой запрос, там можешь поменять как тебе нужно, я искал самые дорогие (сортировал по цене), тебе может просто долгий запрос нужен.
05.03.2018 13:28:57 Обращения на текущей странице: -12-
* 11 * Чеширрский кот : (9) - про план запроса я б послушал.
05.03.2018 13:30:08 Обращения на текущей странице: -13-
* 12 * sf : (11) лучше почитай ;)
и лучше хендерсона. засыпать под него очень хорошо
05.03.2018 13:31:20 Обращения на текущей странице: -14-
* 13 * Чеширрский кот : (12) - у мну как раз бессоница)

Только вопрос - засыпать под него хорошо как? Книжка толстая?
Её надо читать, или тут рецепт - "по темечку со всей силы?")
05.03.2018 14:16:51
* 14 * sf : (13) нормальное чтиво. можно найти и в электронном варианте
05.03.2018 15:00:47 Обращения на текущей странице: -16-
* 15 * sf : ТС, ты где? решил свой вопрос. рассказывай давай, что за задача изначально была
05.03.2018 15:11:43 Обращения на текущей странице: -17-18-
* 16 * bvn13 : (15) регламенты наши ночью впадают в ступор. сейчас прям смотреть нечего. ночью буду, если будут тормоза
05.03.2018 15:36:06
* 17 * Чеширрский кот : (16) - может им спать хочетсо?
05.03.2018 16:20:15
* 18 * sf : (16) ну так в 4 как раз для тебя. главное, чтобы статистику после проблем не почистили
05.03.2018 16:26:38 Обращения на текущей странице: -20-21-
* 19 * sf : вот с такого дай скриншот плз
WITH [Waits] AS
(SELECT
[wait_type],
[wait_time_ms] / 1000.0 AS [WaitS],
([wait_time_ms] - [signal_wait_time_ms]) / 1000.0 AS [ResourceS],
[signal_wait_time_ms] / 1000.0 AS [SignalS],
[waiting_tasks_count] AS [WaitCount],
100.0 * [wait_time_ms] / SUM ([wait_time_ms]) OVER() AS [Percentage],
ROW_NUMBER() OVER(ORDER BY [wait_time_ms] DESC) AS [RowNum]
FROM sys.dm_os_wait_stats
WHERE [wait_type] NOT IN (
-- These wait types are almost 100% never a problem and so they are
-- filtered out to avoid them skewing the results. Click on the URL
-- for more information.
N'BROKER_EVENTHANDLER', -- http://www.sqlskills.com/help/waits/BROKER_EVENTHANDLER
N'BROKER_RECEIVE_WAITFOR', -- http://www.sqlskills.com/help/waits/BROKER_RECEIVE_WAITFOR
N'BROKER_TASK_STOP', -- http://www.sqlskills.com/help/waits/BROKER_TASK_STOP
N'BROKER_TO_FLUSH', -- http://www.sqlskills.com/help/waits/BROKER_TO_FLUSH
N'BROKER_TRANSMITTER', -- http://www.sqlskills.com/help/waits/BROKER_TRANSMITTER
N'CHECKPOINT_QUEUE', -- http://www.sqlskills.com/help/waits/CHECKPOINT_QUEUE
N'CHKPT', -- http://www.sqlskills.com/help/waits/CHKPT
N'CLR_AUTO_EVENT', -- http://www.sqlskills.com/help/waits/CLR_AUTO_EVENT
N'CLR_MANUAL_EVENT', -- http://www.sqlskills.com/help/waits/CLR_MANUAL_EVENT
N'CLR_SEMAPHORE', -- http://www.sqlskills.com/help/waits/CLR_SEMAPHORE

-- Maybe comment these four out if you have mirroring issues
N'DBMIRROR_DBM_EVENT', -- http://www.sqlskills.com/help/waits/DBMIRROR_DBM_EVENT
N'DBMIRROR_EVENTS_QUEUE', -- http://www.sqlskills.com/help/waits/DBMIRROR_EVENTS_QUEUE
N'DBMIRROR_WORKER_QUEUE', -- http://www.sqlskills.com/help/waits/DBMIRROR_WORKER_QUEUE
N'DBMIRRORING_CMD', -- http://www.sqlskills.com/help/waits/DBMIRRORING_CMD

N'DIRTY_PAGE_POLL', -- http://www.sqlskills.com/help/waits/DIRTY_PAGE_POLL
N'DISPATCHER_QUEUE_SEMAPHORE', -- http://www.sqlskills.com/help/waits/DISPATCHER_QUEUE_SEMAPHORE
N'EXECSYNC', -- http://www.sqlskills.com/help/waits/EXECSYNC
N'FSAGENT', -- http://www.sqlskills.com/help/waits/FSAGENT
N'FT_IFTS_SCHEDULER_IDLE_WAIT', -- http://www.sqlskills.com/help/waits/FT_IFTS_SCHEDULER_IDLE_WAIT
N'FT_IFTSHC_MUTEX', -- http://www.sqlskills.com/help/waits/FT_IFTSHC_MUTEX

-- Maybe comment these six out if you have AG issues
N'HADR_CLUSAPI_CALL', -- http://www.sqlskills.com/help/waits/HADR_CLUSAPI_CALL
N'HADR_FILESTREAM_IOMGR_IOCOMPLETION', -- http://www.sqlskills.com/help/waits/HADR_FILESTREAM_IOMGR_IOCOMPLETION
N'HADR_LOGCAPTURE_WAIT', -- http://www.sqlskills.com/help/waits/HADR_LOGCAPTURE_WAIT
N'HADR_NOTIFICATION_DEQUEUE', -- http://www.sqlskills.com/help/waits/HADR_NOTIFICATION_DEQUEUE
N'HADR_TIMER_TASK', -- http://www.sqlskills.com/help/waits/HADR_TIMER_TASK
N'HADR_WORK_QUEUE', -- http://www.sqlskills.com/help/waits/HADR_WORK_QUEUE

N'KSOURCE_WAKEUP', -- http://www.sqlskills.com/help/waits/KSOURCE_WAKEUP
N'LAZYWRITER_SLEEP', -- http://www.sqlskills.com/help/waits/LAZYWRITER_SLEEP
N'LOGMGR_QUEUE', -- http://www.sqlskills.com/help/waits/LOGMGR_QUEUE
N'MEMORY_ALLOCATION_EXT', -- http://www.sqlskills.com/help/waits/MEMORY_ALLOCATION_EXT
N'ONDEMAND_TASK_QUEUE', -- http://www.sqlskills.com/help/waits/ONDEMAND_TASK_QUEUE
N'PREEMPTIVE_XE_GETTARGETSTATE', -- http://www.sqlskills.com/help/waits/PREEMPTIVE_XE_GETTARGETSTATE
N'PWAIT_ALL_COMPONENTS_INITIALIZED', -- http://www.sqlskills.com/help/waits/PWAIT_ALL_COMPONENTS_INITIALIZED
N'PWAIT_DIRECTLOGCONSUMER_GETNEXT', -- http://www.sqlskills.com/help/waits/PWAIT_DIRECTLOGCONSUMER_GETNEXT
N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP', -- http://www.sqlskills.com/help/waits/QDS_PERSIST_TASK_MAIN_LOOP_SLEEP
N'QDS_ASYNC_QUEUE', -- http://www.sqlskills.com/help/waits/QDS_ASYNC_QUEUE
N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP',
-- http://www.sqlskills.com/help/waits/QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP
N'QDS_SHUTDOWN_QUEUE', -- http://www.sqlskills.com/help/waits/QDS_SHUTDOWN_QUEUE
N'REDO_THREAD_PENDING_WORK', -- http://www.sqlskills.com/help/waits/REDO_THREAD_PENDING_WORK
N'REQUEST_FOR_DEADLOCK_SEARCH', -- http://www.sqlskills.com/help/waits/REQUEST_FOR_DEADLOCK_SEARCH
N'RESOURCE_QUEUE', -- http://www.sqlskills.com/help/waits/RESOURCE_QUEUE
N'SERVER_IDLE_CHECK', -- http://www.sqlskills.com/help/waits/SERVER_IDLE_CHECK
N'SLEEP_BPOOL_FLUSH', -- http://www.sqlskills.com/help/waits/SLEEP_BPOOL_FLUSH
N'SLEEP_DBSTARTUP', -- http://www.sqlskills.com/help/waits/SLEEP_DBSTARTUP
N'SLEEP_DCOMSTARTUP', -- http://www.sqlskills.com/help/waits/SLEEP_DCOMSTARTUP
N'SLEEP_MASTERDBREADY', -- http://www.sqlskills.com/help/waits/SLEEP_MASTERDBREADY
N'SLEEP_MASTERMDREADY', -- http://www.sqlskills.com/help/waits/SLEEP_MASTERMDREADY
N'SLEEP_MASTERUPGRADED', -- http://www.sqlskills.com/help/waits/SLEEP_MASTERUPGRADED
N'SLEEP_MSDBSTARTUP', -- http://www.sqlskills.com/help/waits/SLEEP_MSDBSTARTUP
N'SLEEP_SYSTEMTASK', -- http://www.sqlskills.com/help/waits/SLEEP_SYSTEMTASK
N'SLEEP_TASK', -- http://www.sqlskills.com/help/waits/SLEEP_TASK
N'SLEEP_TEMPDBSTARTUP', -- http://www.sqlskills.com/help/waits/SLEEP_TEMPDBSTARTUP
N'SNI_HTTP_ACCEPT', -- http://www.sqlskills.com/help/waits/SNI_HTTP_ACCEPT
N'SP_SERVER_DIAGNOSTICS_SLEEP', -- http://www.sqlskills.com/help/waits/SP_SERVER_DIAGNOSTICS_SLEEP
N'SQLTRACE_BUFFER_FLUSH', -- http://www.sqlskills.com/help/waits/SQLTRACE_BUFFER_FLUSH
N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP', -- http://www.sqlskills.com/help/waits/SQLTRACE_INCREMENTAL_FLUSH_SLEEP
N'SQLTRACE_WAIT_ENTRIES', -- http://www.sqlskills.com/help/waits/SQLTRACE_WAIT_ENTRIES
N'WAIT_FOR_RESULTS', -- http://www.sqlskills.com/help/waits/WAIT_FOR_RESULTS
N'WAITFOR', -- http://www.sqlskills.com/help/waits/WAITFOR
N'WAITFOR_TASKSHUTDOWN', -- http://www.sqlskills.com/help/waits/WAITFOR_TASKSHUTDOWN
N'WAIT_XTP_RECOVERY', -- http://www.sqlskills.com/help/waits/WAIT_XTP_RECOVERY
N'WAIT_XTP_HOST_WAIT', -- http://www.sqlskills.com/help/waits/WAIT_XTP_HOST_WAIT
N'WAIT_XTP_OFFLINE_CKPT_NEW_LOG', -- http://www.sqlskills.com/help/waits/WAIT_XTP_OFFLINE_CKPT_NEW_LOG
N'WAIT_XTP_CKPT_CLOSE', -- http://www.sqlskills.com/help/waits/WAIT_XTP_CKPT_CLOSE
N'XE_DISPATCHER_JOIN', -- http://www.sqlskills.com/help/waits/XE_DISPATCHER_JOIN
N'XE_DISPATCHER_WAIT', -- http://www.sqlskills.com/help/waits/XE_DISPATCHER_WAIT
N'XE_TIMER_EVENT' -- http://www.sqlskills.com/help/waits/XE_TIMER_EVENT
)
AND [waiting_tasks_count] > 0
)
SELECT
MAX ([W1].[wait_type]) AS [WaitType],
CAST (MAX ([W1].[WaitS]) AS DECIMAL (16,2)) AS [Wait_S],
CAST (MAX ([W1].[ResourceS]) AS DECIMAL (16,2)) AS [Resource_S],
CAST (MAX ([W1].[SignalS]) AS DECIMAL (16,2)) AS [Signal_S],
MAX ([W1].[WaitCount]) AS [WaitCount],
CAST (MAX ([W1].[Percentage]) AS DECIMAL (5,2)) AS [Percentage],
CAST ((MAX ([W1].[WaitS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgWait_S],
CAST ((MAX ([W1].[ResourceS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgRes_S],
CAST ((MAX ([W1].[SignalS]) / MAX ([W1].[WaitCount])) AS DECIMAL (16,4)) AS [AvgSig_S],
CAST ('http://www.sqlskills.com/help/waits/' + MAX ([W1].[wait_type]) as XML) AS [Help/Info URL]
FROM [Waits] AS [W1]
INNER JOIN [Waits] AS [W2] ON [W2].[RowNum] <= [W1].[RowNum]
GROUP BY [W1].[RowNum]
HAVING SUM ([W2].[Percentage]) - MAX( [W1].[Percentage] ) < 95; -- percentage threshold
GO
05.03.2018 16:38:20
* 20 * sf : (19) + к запросу из 4.
там свойства sys.dm_exec_query_stats посмотри вот тут http://docs.microsoft.com/ru-ru/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-query-stats-transact-sql
может имеет смысл по максимальному времени выполнения отсортировать, а не по цене
05.03.2018 16:43:03
* 21 * bvn13 :
(19)

06.03.2018 8:14:23 Обращения на текущей странице: -23-
* 22 * sff : Нашёл?
06.03.2018 11:22:14 Обращения на текущей странице: -25-
* 23 * bvn13 : (22) нет еще. буду еще искать
06.03.2018 12:56:47 Обращения на текущей странице: -26-
* 24 * ЗлобнийМальчик : страдальцы...
06.03.2018 13:56:57 Обращения на текущей странице: -28-
* 25 * sff : (23) как часто статистику чистите?
06.03.2018 13:57:37 Обращения на текущей странице: -27-
* 26 * sff : (24) да-да
06.03.2018 14:06:12
* 27 * ЗлобнийМальчик : (26)
06.03.2018 14:27:46 Обращения на текущей странице: -29-
* 28 * bvn13 : (25) я не ответственный за скуль, понятия не имею
06.03.2018 14:57:41
* 29 * sf : (28) ну так спроси ответственного. а то если нет статистики, ловить запрос пока он исполняется - то еще удовольствие. особенно в продакшне
14.03.2018 15:00:46
* 30 * bvn13 : в общем, отписываюсь.

Есть у нас РС "Протокол системы" - периодический, но без итогов. Туда по ключам-измерениям льются лог обменов: что, когда, зачем, какая ошибка
И есть в нем механизм исправления ошибок. Это галочка в ресурсе. Регламенты, прежде, чем записать новую запись лога, ищут все ошибки по тем же ключам, и записывают их с галкой "исправлено".

И вот есть такой набор ключей, которые порождают оооочень много записей неошибочных. И если вдруг закрадется ошибка, то это все начинает фиксится через НаборЗаписей.

Читается набор по ключам - без периода! - циклом по набору, если ошибка, то исправлена = истина, записать набор.

И вот эта запись... чтоб ее! При каждом запуске регламента он обновляет набор на несколько десятков тысяч записей в этом регистре из-за одной галки Ошибка! Без периода.

Вот такие запросы отваливались по таймауту:

DELETE FROM T1
FROM dbo._InfoRg26132 T1
WHERE
T1._Period = @P1
AND T1._Fld26133RRef = @P2
AND T1._Fld26134_TYPE = 0x08
AND T1._Fld26134_RTRef = 0x00003150
AND T1._Fld26134_RRRef = @P3
AND T1._Fld26135RRef = @P4
AND T1._Fld26136_TYPE = 0x05
AND T1._Fld26136_S = @P5
AND T1._Fld26136_RTRef = 0x00000000
AND T1._Fld26136_RRRef = @P6


DELETE FROM T1
FROM dbo._InfoRg26132 T1
WHERE
T1._Fld26133RRef = @P1
AND T1._Fld26134_TYPE = 0x08
AND T1._Fld26134_RTRef = 0x000030C3
AND T1._Fld26134_RRRef = @P2
AND T1._Fld26135RRef = @P3
AND T1._Fld26136_TYPE = 0x05
AND T1._Fld26136_S = @P4
AND T1._Fld26136_RTRef = 0x00000000
AND T1._Fld26136_RRRef = @P5


Когда я это все в 3 ночи нарыл и отдебажил, мы пересмотрели схему исправления ошибок, и сделали так.

Отказались от чтения большого набора. Сделали ВЫБРАТЬ РАЗЛИЧНЫЕ Период ГДЕ <Условия по ключам-измерениям>. А дальше - запись через менеджер записи РС по всем ключам+период.

И все залетало. Все зашурстело. Ничего больше не блочится.

Страницы: 1 |

На главную страницу форума

  Зарегистрироваться

Дубовый форум ©