Как поймать "тяжёлого" пользователя семёрочной SQL базы?
По ЖР вижу, что блокировки идут часто, в основном - на получении периодических реквизитов справочников и проведении документов.
Предполагаю, что причина в чьём-то тяжёлом отчёте, да и время (начало месяца) подходит для массового запуска отчётов за прошлый месяц. Перепроведениями никто не балуется, да и увижу я такое в логе.
База SQL, древняя ТиС, РБД с автообменами.
Посоветуйте, как локализовать пользователя с тяжёлыми отчётами. В ЖР не попадают даже записи о начале/завершении формирования отчётов, и переделывать это было бы непросто - отчётов много, и встроенных, и внешних.
Предполагаю, что причина в чьём-то тяжёлом отчёте, да и время (начало месяца) подходит для массового запуска отчётов за прошлый месяц. Перепроведениями никто не балуется, да и увижу я такое в логе.
База SQL, древняя ТиС, РБД с автообменами.
Посоветуйте, как локализовать пользователя с тяжёлыми отчётами. В ЖР не попадают даже записи о начале/завершении формирования отчётов, и переделывать это было бы непросто - отчётов много, и встроенных, и внешних.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Зеленоград, Самого тяжёлого пользователя можно найти взвешиванием:
set transaction isolation level read uncommitted
sel ect
top 100
creation_time,
last_execution_time,
execution_count,
total_worker_time/1000 as CPU,
convert(money, (total_worker_time))/(execution_count*1000)as [AvgCPUTime],
qs.total_elapsed_time/1000 as TotDuration,
convert(money, (qs.total_elapsed_time))/(execution_count*1000)as [AvgDur],
total_logical_reads as [Reads],
total_logical_writes as [Writes],
total_logical_reads+total_logical_writes as [AggIO],
convert(money, (total_logical_reads+total_logical_writes)/(execution_count + 0.0))as [AvgIO],
case
when sql_handle IS NULL then ' '
else(substring(st.text,(qs.statement_start_offset+2)/2,(
case
when qs.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2
else qs.statement_end_offset
end - qs.statement_start_offset)/2 ))
end as query_text,
db_name(st.dbid)as database_name,
object_schema_name(st.objectid, st.dbid)+'.'+object_name(st.objectid, st.dbid) as object_name
fr om sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(sql_handle) st
where total_logical_reads > 0
order by AvgDur desc
Показать
(6) Сегодня опять много блокировок, решили запустить скрипт.
Кто будет его использовать - уберите по пробелу во 2 сверху и 4 снизу строках, видимо движок форума портит код.
Но на MSSQL 2000 выдаёт ошибку в 19 строке,
when qs.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2
.
Подскажите, пожалуйста - в чём тут ошибка?
Кто будет его использовать - уберите по пробелу во 2 сверху и 4 снизу строках, видимо движок форума портит код.
Но на MSSQL 2000 выдаёт ошибку в 19 строке,
when qs.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2
.
Подскажите, пожалуйста - в чём тут ошибка?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот