Как поймать "тяжёлого" пользователя семёрочной SQL базы?

1. Зеленоград 01.06.15 10:16 Сейчас в теме
По ЖР вижу, что блокировки идут часто, в основном - на получении периодических реквизитов справочников и проведении документов.

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

База SQL, древняя ТиС, РБД с автообменами.

Посоветуйте, как локализовать пользователя с тяжёлыми отчётами. В ЖР не попадают даже записи о начале/завершении формирования отчётов, и переделывать это было бы непросто - отчётов много, и встроенных, и внешних.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. ture 608 01.06.15 12:00 Сейчас в теме
(1) Зеленоград, Разве сам sql не показывает тяжелые запросы?
Зеленоград; +1 Ответить
6. ture 608 01.06.15 19:10 Сейчас в теме
(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
Показать
Зеленоград; +1 Ответить
7. Зеленоград 02.06.15 17:36 Сейчас в теме
8. Зеленоград 08.06.15 11:32 Сейчас в теме
(6) Сегодня опять много блокировок, решили запустить скрипт.

Кто будет его использовать - уберите по пробелу во 2 сверху и 4 снизу строках, видимо движок форума портит код.

Но на MSSQL 2000 выдаёт ошибку в 19 строке,
when qs.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2
.

Подскажите, пожалуйста - в чём тут ошибка?
2. flaks 01.06.15 11:21 Сейчас в теме
Если в справочнике номенклатуры отображаются цены, то может тормозить из-за этого
4. Зеленоград 01.06.15 12:06 Сейчас в теме
(2) flaks, Эти грабли давно обошли.
(3) В умелых руках наверняка показывает. Но обычно к SQL подключаются одним пользователем (sa), так что максимум того, что я смогу узнать - номер сеанса. Тоже думаю в эту сторону.
5. ture 608 01.06.15 12:09 Сейчас в теме
(4) Зеленоград, Под одним пользователем? это так в 1с77?!

Ладно. это я пошутил так.
Список тяжелых запросов в SQL покажет эти запросы.
Можно поглядеть на таблицы и подогонять, что бы это значило и откуда шлется.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот