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

Откуда: град Подмосковье
Сообщений: 84
Есть SQL Server 2005:

select @@version
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)   Nov 24 2008 13:01:59   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 

Сервер 16-ядерный: 16 x (x86 Family 6 Model 15 Stepping 11 GenuineIntel ~2398 Mhz). ОЗУ - 8 Гиг, под Сиквел отрезано 6,5 Гиг. Дисковая подсистема - 3 диска: на 1-ом файлы данных, на 2-ом файлы логов, на 3-м TempDB и msdb - файлы данных, логи всех баз на 2-ом диске.
На инстансе есть основная рабочая база с которой работает корпоративная система.
И с недавних пор начала возникать периодически проблема - провал в производительности, причем достаточно массово это выглядит.
Потрейсили выполнение процедур (приложение работает только через XP) - в моменты "просадок" время выполнения процедур увеличивается на порядок в 6-15 раз. Причем тормозить начинают большинство процедур, которые используются в приложении как для просмотра данных (рефреш окон), так и процедуры изменяющие данные. Поэтому пока не понятно кто "виновник торжества", т.е. при каких конкретно причинах происходит провалы в работе Сиквела.
Параллелизм отключен - из-за него были проблемы, но с этим разобрались.

dbcc sqlperf(waitstats)
выдает следующий результат (это как раз достаточно типичная картинка с цифрами):

MISCELLANEOUS	0	0	0
LCK_M_SCH_S	158	1225609	93
LCK_M_SCH_M	1023	210671	687
LCK_M_S	245	61578	234
LCK_M_U	1100	133203	468
LCK_M_X	1881	6053250	2000
LCK_M_IS	8	15	15
LCK_M_IU	0	0	0
LCK_M_IX	57	11812	15
LCK_M_SIU	0	0	0
LCK_M_SIX	0	0	0
LCK_M_UIX	0	0	0
LCK_M_BU	0	0	0
LCK_M_RS_S	0	0	0
LCK_M_RS_U	1	10046	0
LCK_M_RIn_NL	0	0	0
LCK_M_RIn_S	0	0	0
LCK_M_RIn_U	0	0	0
LCK_M_RIn_X	0	0	0
LCK_M_RX_S	0	0	0
LCK_M_RX_U	0	0	0
LCK_M_RX_X	0	0	0
LATCH_NL	0	0	0
LATCH_KP	0	0	0
LATCH_SH	4613	35843	6109
LATCH_UP	1	0	0
LATCH_EX	1744	1651359	1781
LATCH_DT	0	0	0
PAGELATCH_NL	0	0	0
PAGELATCH_KP	77	31	31
PAGELATCH_SH	54459	167765	30500
PAGELATCH_UP	28293	110484	16625
PAGELATCH_EX	4784773	388453	217796
PAGELATCH_DT	0	0	0
PAGEIOLATCH_NL	0	0	0
PAGEIOLATCH_KP	0	0	0
PAGEIOLATCH_SH	406944	2623078	12984
PAGEIOLATCH_UP	1620	5062	125
PAGEIOLATCH_EX	20065	233265	843
PAGEIOLATCH_DT	0	0	0
TRAN_MARKLATCH_NL	0	0	0
TRAN_MARKLATCH_KP	0	0	0
TRAN_MARKLATCH_SH	0	0	0
TRAN_MARKLATCH_UP	0	0	0
TRAN_MARKLATCH_EX	0	0	0
TRAN_MARKLATCH_DT	0	0	0
LAZYWRITER_SLEEP	38129	2.801886E+07	7812
IO_COMPLETION	116172	91765	1750
ASYNC_IO_COMPLETION	1	15	0
ASYNC_NETWORK_IO	586791	1296437	95906
SLEEP_BPOOL_FLUSH	70333	137625	1859
CHKPT	1	234	0
SLEEP_TASK	464999	1127390	16562
SLEEP_SYSTEMTASK	1	234	0
RESOURCE_SEMAPHORE	35199	2272562	16593
DTC	14	781	0
OLEDB	9880806	2419421	0
FAILPOINT	0	0	0
RESOURCE_QUEUE	0	0	0
ASYNC_DISKPOOL_LOCK	0	0	0
THREADPOOL	244	344609	0
DEBUG	0	0	0
REPLICA_WRITES	0	0	0
BROKER_RECEIVE_WAITFOR	6001	3.473359E+08	5750
DBMIRRORING_CMD	0	0	0
WAIT_FOR_RESULTS	0	0	0
SOS_SCHEDULER_YIELD	8671009	4266328	4261937
SOS_VIRTUALMEMORY_LOW	0	0	0
SOS_RESERVEDMEMBLOCKLIST	70	2359	2156
SOS_LOCALALLOCATORLIST	1	0	0
SOS_CALLBACK_REMOVAL	0	0	0
LOWFAIL_MEMMGR_QUEUE	0	0	0
BACKUP	0	0	0
BACKUPBUFFER	0	0	0
BACKUPIO	73582	96328	1015
BACKUPTHREAD	152	16312	46
DBMIRROR_DBM_MUTEX	0	0	0
DBMIRROR_DBM_EVENT	0	0	0
DBMIRROR_SEND	0	0	0
CURSOR_ASYNC	0	0	0
HTTP_ENUMERATION	0	0	0
SOAP_READ	0	0	0
SOAP_WRITE	0	0	0
DUMP_LOG_COORDINATOR	0	0	0
DISKIO_SUSPEND	0	0	0
IMPPROV_IOWAIT	5018	7921	218
QNMANAGER_ACQUIRE	0	0	0
DEADLOCK_TASK_SEARCH	0	0	0
REPL_SCHEMA_ACCESS	0	0	0
REPL_CACHE_ACCESS	0	0	0
SQLSORT_SORTMUTEX	0	0	0
SQLSORT_NORMMUTEX	0	0	0
SQLTRACE_WAIT_ENTRIES	0	0	0
SQLTRACE_LOCK	32	24140	1250
SQLTRACE_BUFFER_FLUSH	4831	1.932902E+07	5234
SQLTRACE_SHUTDOWN	0	0	0
MSQL_SYNC_PIPE	0	0	0
QUERY_TRACEOUT	0	0	0
DTC_STATE	0	0	0
FCB_REPLICA_WRITE	0	0	0
FCB_REPLICA_READ	0	0	0
WRITELOG	1185017	1364531	254187
HTTP_ENDPOINT_COLLCREATE	0	0	0
EXCHANGE	0	0	0
DBTABLE	0	0	0
EC	0	0	0
TEMPOBJ	0	0	0
XACTLOCKINFO	0	0	0
LOGMGR	0	0	0
CMEMTHREAD	33698	20484	14468
CXPACKET	0	0	0
WAITFOR	21649	4.957697E+07	1765
CURSOR	0	0	0
EXECSYNC	0	0	0
SOSHOST_INTERNAL	0	0	0
SOSHOST_SLEEP	0	0	0
SOSHOST_WAITFORDONE	0	0	0
SOSHOST_MUTEX	97	0	0
SOSHOST_EVENT	0	0	0
SOSHOST_SEMAPHORE	0	0	0
SOSHOST_RWLOCK	0	0	0
SOSHOST_TRACELOCK	0	0	0
MSQL_XP	310871	1772437	0
MSQL_DQ	51513	302453	0
LOGBUFFER	661	99828	187
TRANSACTION_MUTEX	14	78	0
MSSEARCH	12	15	0
XACTWORKSPACE_MUTEX	0	0	0
CLR_JOIN	0	0	0
CLR_CRST	0	0	0
CLR_SEMAPHORE	0	0	0
CLR_MANUAL_EVENT	0	0	0
CLR_AUTO_EVENT	0	0	0
CLR_MONITOR	0	0	0
CLR_RWLOCK_READER	0	0	0
CLR_RWLOCK_WRITER	0	0	0
SQLCLR_QUANTUM_PUNISHMENT	0	0	0
SQLCLR_APPDOMAIN	0	0	0
SQLCLR_ASSEMBLY	0	0	0
KTM_ENLISTMENT	0	0	0
KTM_RECOVERY_RESOLUTION	0	0	0
KTM_RECOVERY_MANAGER	0	0	0
SQLCLR_DEADLOCK_DETECTION	0	0	0
QPJOB_WAITFOR_ABORT	0	0	0
QPJOB_KILL	0	0	0
BAD_PAGE_PROCESS	0	0	0
BACKUP_OPERATOR	0	0	0
PRINT_ROLLBACK_PROGRESS	0	0	0
ENABLE_VERSIONING	0	0	0
DISABLE_VERSIONING	0	0	0
REQUEST_DISPENSER_PAUSE	0	0	0
DROPTEMP	0	0	0
FT_RESTART_CRAWL	0	0	0
FT_RESUME_CRAWL	0	0	0
LOGMGR_RESERVE_APPEND	0	0	0
LOGMGR_FLUSH	0	0	0
XACT_OWN_TRANSACTION	0	0	0
XACT_RECLAIM_SESSION	0	0	0
DTC_WAITFOR_OUTCOME	0	0	0
DTC_RESOLVE	0	0	0
SEC_DROP_TEMP_KEY	0	0	0
SRVPROC_SHUTDOWN	0	0	0
NET_WAITFOR_PACKET	0	0	0
DTC_ABORT_REQUEST	0	0	0
DTC_TMDOWN_REQUEST	0	0	0
RECOVER_CHANGEDB	0	0	0
WORKTBL_DROP	0	0	0
MIRROR_SEND_MESSAGE	0	0	0
SNI_HTTP_ACCEPT	0	0	0
SNI_HTTP_WAITFOR_0_DISCON	0	0	0
UTIL_PAGE_ALLOC	0	0	0
SERVER_IDLE_CHECK	0	0	0
BACKUP_CLIENTLOCK	0	0	0
DEADLOCK_ENUM_MUTEX	0	0	0
INDEX_USAGE_STATS_MUTEX	0	0	0
VIEW_DEFINITION_MUTEX	0	0	0
QUERY_NOTIFICATION_MGR_MUTEX	0	0	0
QUERY_NOTIFICATION_TABLE_MGR_MUT	11	0	0
QUERY_NOTIFICATION_SUBSCRIPTION_	0	0	0
QUERY_NOTIFICATION_UNITTEST_MUTE	0	0	0
IMP_IMPORT_MUTEX	0	0	0
RESOURCE_SEMAPHORE_MUTEX	1030	328	328
IO_AUDIT_MUTEX	3	0	0
BUILTIN_HASHKEY_MUTEX	0	0	0
SOS_PROCESS_AFFINITY_MUTEX	0	0	0
MSQL_XACT_MGR_MUTEX	0	0	0
MSQL_XACT_MUTEX	0	0	0
QRY_MEM_GRANT_INFO_MUTEX	0	0	0
SOS_STACKSTORE_INIT_MUTEX	0	0	0
SOS_SYNC_TASK_ENQUEUE_EVENT	0	0	0
SOS_OBJECT_STORE_DESTROY_MUTEX	0	0	0
EE_PMOLOCK	10	0	0
RESOURCE_SEMAPHORE_QUERY_COMPILE	3848	1.244813E+07	2156
RESOURCE_SEMAPHORE_SMALL_QUERY	5	0	0
FULLTEXT GATHERER	0	0	0
SEQUENTIAL_GUID	0	0	0
BROKER_TASK_STOP	7611	3.222253E+07	7578
SNI_LISTENER_ACCESS	0	0	0
EXECUTION_PIPE_EVENT_INTERNAL	0	0	0
ASSEMBLY_LOAD	0	0	0
TIMEPRIV_TIMEPERIOD	0	0	0
INTERNAL_TESTING	0	0	0
Total	2.68765E+07	5.175175E+08	4989078

В общем, на сегодняшний день много чего перепробованно, что-то улучшили, но реально проблема не решилась. Индексы перестраиваются/фрагментируются в зависимости от дефрагментации каждую ночь, обновлении статистики каждую ночь - до кучи. Базы не шринкуются.

Куда еще можно покопать по такому вопросу?
19 июн 09, 15:55    [7321548]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3650
гипертрейдинг есть? если есть, отключен ? проседания в чем ? по cpu? i\o? Планы смотрели при проседниях ?
19 июн 09, 15:58    [7321579]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Deniro
Member

Откуда: град Подмосковье
Сообщений: 84
Ozerov

Гипертрейдинга нет (по словам админов), если подскажете как можно проверить точно его наличие, то посмотрел бы сам.

Проседания - в том, что процедуры которые в этот момент вызываются корпоративными приложениями начинают работать на порядок дольше чем обычно. Увеличение по Duration, и частично по CPU, но процессора в общем не грузятся более 60% даже в пиковые нагрузки.

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

К сообщению приложен файл. Размер - 0Kb
19 июн 09, 16:14    [7321702]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Deniro
Member

Откуда: град Подмосковье
Сообщений: 84
Картинку прикрепил, т.к. она достаточно показательна в моменты когда все начинает жутко тормозить.
С такими блокировками что может быть подозрительного?
19 июн 09, 16:19    [7321743]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Glamorama
Member

Откуда:
Сообщений: 152
1)а чего Perfmon говорит на эту тему? какие счетчики проседают в моменты тормозов?
2)как обстоят дела с рекомпиляцией процедур в моменты тормозов?
3) может изменилась нагрузка на неосновные базы?
4)что опять же менялось в последнее время в базе и ПО? может триггеров добавили или foreign key навесили? может драйвера какие обновляли или конфигурацию сервера меняли? службу какую-то включили или дополнительное ПО установили на сам сервер?
19 июн 09, 23:44    [7323498]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Crimean
Member

Откуда:
Сообщений: 13148
судя по картинкам вас убивают рекомпиляции
запускать трас, смотреть на причину, устранять
22 июн 09, 11:01    [7326739]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Deniro
Member

Откуда: град Подмосковье
Сообщений: 84
to Glamorama

1) Из того что мониторили, в тормозные моменты было увидено следующее:
- есть всплески роста очередей к дискам, т.е. показатель "Avg. Disk Queue Lenght" (общий по всем дискам) сильно выходит за рамки общерекоммендованных. Сейчас поставил этот счетчик по отдельности на каждый диск (3 шт.) - посмотрю в таком еще разрезе.
- счетчик "Cache Hit Ratio" = 85 среднее значение, наверное это не очень высокий показатель.
- график "Pages\sec" имеет следующую форму секунд 5 он практически на нуле, пото идет всплеск до 20 буквально на секунду и опять 5 секунд по нулям. Так практически постоянно. Среднее его значение = 2-3. Бывают редкие всплески более высокие и продолжительные до нескольких секунд.
Но в моменты тормозов надо еще посмотреть различные счетчики, тут информации пока не много.

2) Рекомпиляции процедур присуствуют и в моменты тормозов кол-во увеличивается, вот насколько это критично, пока не очень ясно. Но с этим разбираемся.

3) На неосновные базы нагрузка не изменилась - и это видно по всем наблюдениям также. В моменты тормозов резко возрастает время работы процедур только в одной главной рабочей базе. Есть еще одна база, где идет постоянная вставка данных и обновления - там в эти тормозные моменты ничего не меняется, все работает штатно.

4) На счет изменений, тут можно только рассматривать саму архитектуру базы. На самом сервере, ПО и т.д. - ничего не меняется практически, сервер только под SQL используется.
А вот по архитектуре - изменения идут, да, но они все контролируются, т.е. когда меняют таблицу, триггера, ключи и при этом возникают тормоза - про эти моменты все известно. Просто часто возникают ситуации, когда ничего в базе не меняется, но тормоза приходят.
Вот по архитектуре базы такой вопрос может быть - база построена полностью на внешних ключах, т.е. практически везде, где можно использовать этот вид ограничений, он используется. Насколько это может быть критично? Хотя система живет уже более года и за этот период можно сказать, что сначала таких проблем не было, тормозов не было совсем, а вот потом началось...
22 июн 09, 13:21    [7327919]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Deniro
Member

Откуда: град Подмосковье
Сообщений: 84
to Crimean

Да, с рекомпиляцией уже разбираемся - трассируем, процедуры поправляем. Просто пока не очень понятно как оценивать ее критичность? Все равно какие-то процедуры перекомпилируются, в моменты тормозов число перекомпиляций возрастает правда...
22 июн 09, 13:25    [7327954]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Deniro
to Crimean

Да, с рекомпиляцией уже разбираемся - трассируем, процедуры поправляем. Просто пока не очень понятно как оценивать ее критичность? Все равно какие-то процедуры перекомпилируются, в моменты тормозов число перекомпиляций возрастает правда...


причина? "разбираемся" - знаете причину? скажите! она в EventSubClass
22 июн 09, 15:12    [7328863]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Deniro
Member

Откуда: град Подмосковье
Сообщений: 84
причина? "разбираемся" - знаете причину? скажите! она в EventSubClass


Нет, причину не знали. Теперь смотрим - большое спасибо за совет. Основная масса рекомпиляций из-за: Deffered compile и Statistics changed.
22 июн 09, 16:26    [7329494]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> Deffered compile

вот это - бороть!

> Statistics changed.

а эти полезные, не трогайте. а ваще я бы убрал автосоздание и автообновление статистик и настроил раз в 2 часа exec sp_updatestats
а вот для tempdb автосоздание и автообновление статистик... большой вопрос...
22 июн 09, 17:01    [7329770]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Deniro
Member

Откуда: град Подмосковье
Сообщений: 84
> Deffered compile

вот это - бороть!

Насколько я понимаю, это может возникать, например, из-за создания временной таблицы перед вызовом процедуры, в которой эта таблица используется. А вообще чем страшна эта "Deffered compile"? Поясните...

> Statistics changed.

а эти полезные, не трогайте. а ваще я бы убрал автосоздание и автообновление статистик и настроил раз в 2 часа exec sp_updatestats

На базе стоит только Автосоздание статистики. "sp_updatestats" - запускаем сейчас ночью. Попробую поставить раз в 2 часа, посмотреть результат.

а вот для tempdb автосоздание и автообновление статистик... большой вопрос...

А в чем тут может быть большой вопрос? В том, что если интенсивно используются временные таблицы, да еще и с большими объемами данных, то на обслуживание статистики по таким таблицам много накладных расходов приходится?

Тут еще одна проблема обнаружилась, может быть связанная с данными вопросами...
Есть процедура, работает из клиентского приложения за 1 сек. Спустя какой-то промежуток времени (точно не скажу, от нескольких часов) эта же процедура в приложении начинает выполняться за 30 с лишним сек. Берем эту процедуру, подключаемся в Management Studio под теми же аутентификационными данными, что и приложение, запускаем ее с теми же точно параметрами, что и из приложения, получаем время выполнения 1 сек. Пробуем еще раз из приложения - те же 30 сек. с лишним. Если вызвать смену плана процедуры (перекомпиляция, DBCC FREEPROCCACHE), то из приложеня процедура опять начинает работать шустро - 1 сек. В чем может быть причина такого странного поведения?
22 июн 09, 17:32    [7330001]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Nariman Kurbanoff
Member

Откуда: Ашхабад
Сообщений: 51
Deniro,

В процедуру передаются параметры типа DateTime? Если да, то переопределяйте их.
22 июн 09, 19:05    [7330364]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Crimean
Member

Откуда:
Сообщений: 13148
смотреть надо на планы выполнения таких странных процедур
если устаревание статистики приводит к "порче" планов - обновление статистики можно ставить чаще
автообновление на моей памяти не помогало
обновлять можно по конкретным таблицам, хотя в 2005 sp_updatestats уже лишнего все равно не делает
22 июн 09, 20:54    [7330699]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Crimean
Member

Откуда:
Сообщений: 13148
p.s.
обновление статистики тоже приводит к перестроению планов :) не надо так радикально их "сбрасывать"
22 июн 09, 21:15    [7330740]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Glamorama
Member

Откуда:
Сообщений: 152
Nariman Kurbanoff
Deniro,

В процедуру передаются параметры типа DateTime? Если да, то переопределяйте их.


+1
на всякий случай переопределите все параметры (мне помогало в случаях с int переменными)
22 июн 09, 21:26    [7330764]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Deniro
Member

Откуда: град Подмосковье
Сообщений: 84
to Crimean

Обновление статистик через sp_updatestats поставил со вчерашнего вечера, пока через 2 часа. Посмотрим как она повлияет на рекомпиляции и на выполнение процедур из приложения. Хотя вот сейчас утром запустил снова тормозную процедуру из приложения - выполняется также долго, статистики обновлены, индексы тоже все в полном порядке. Т.е. обновление статистик точно не помогает - выходит...
Ну и не понятно пока до сих пор - что делать с опциями АвтоСоздания и АвтоОбновления статистики на tempdb? Сейчас у меня эти опции выставлены... Может это влиять на производительность?

Nariman Kurbanoff
Deniro,

В процедуру передаются параметры типа DateTime? Если да, то переопределяйте их.


+1
на всякий случай переопределите все параметры (мне помогало в случаях с int переменными)

"переопределите все параметры" - вы имеет в виду, что прописать конкретные значения для параметров (datetime, int) в процедуре по умолчанию, а вызывать с требуемыми значениями параметров? Это сделали, причем на одной процедуре прописали так, на другой не стали, просто перекомпилили - посмотрим на результат.

По тормозным процедурам, которые тормозят только из приложения выкладываю планы.
1) План выполнения из приложения:
Table Insert(OBJECT:(@Remains), SET:([Security_ID] = [MatriX].[dbo].[Depo_Divisions].[Security_ID] as [DD].[Security_ID],[Depository_Name] = [Expr1062],[Volume_In] = [Expr1140],[Volume_Out_Free] = [Expr1141],[Volume_Out_Deal] = [Expr1142],[Volume_Out_Furn] = [Expr1143],[Volume_Out_Block] = [Expr1144]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
  |--Compute Scalar(DEFINE:([Expr1140]=CONVERT_IMPLICIT(decimal(29,10),[Expr1135],0), [Expr1141]=CONVERT_IMPLICIT(decimal(29,10),[Expr1136],0), [Expr1142]=CONVERT_IMPLICIT(decimal(29,10),[Expr1137],0), [Expr1143]=CONVERT_IMPLICIT(decimal(29,10),[Expr1138],0), [Expr1144]=CONVERT_IMPLICIT(decimal(29,10),[Expr1139],0)))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
       |--Top(ROWCOUNT est 0)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
            |--Filter(WHERE:([Expr1135]<>(0.) OR [Expr1136]<>(0.) OR [Expr1137]<>(0.) OR [Expr1138]<>(0.) OR [Expr1139]<>(0.)))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                 |--Stream Aggregate(GROUP BY:([Expr1062], [DD].[Security_ID]) DEFINE:([Expr1135]=SUM(CASE WHEN [MatriX].[dbo].[Divisions_Types].[Is_Real] as [DT].[Is_Real]=(1) THEN isnull([Expr1008],(0.0000000000)) ELSE (0.0000000000) END), [Expr1136]=SUM(CASE WHEN [MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_free' AND [MatriX].[dbo].[Enums_Values].[UID] as [EVDT].[UID]<>N'Accounts.SubType.Depo.Block' THEN isnull([Expr1013],(0.0000000000)) ELSE (0.0000000000) END), [Expr1137]=SUM(CASE WHEN [MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_deal' THEN isnull([Expr1013],(0.0000000000)) ELSE (0.0000000000) END), [Expr1138]=SUM(CASE WHEN [MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_furn' THEN isnull([Expr1013],(0.0000000000)) ELSE (0.0000000000) END), [Expr1139]=SUM(CASE WHEN ([MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_block' OR [MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_free' AND [MatriX].[dbo].[Enums_Values].[UID] as [EVDT].[UID]=N'Accounts.SubType.Depo.Block') AND ([MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_block' OR [MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_free') THEN isnull([Expr1013],(0.0000000000)) ELSE (0.0000000000) END))) 
                      |--Sort(ORDER BY:([Expr1062] ASC, [DD].[Security_ID] ASC))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                           |--Nested Loops(Left Outer Join, OUTER REFERENCES:([DA].[Firm_ID], [DA].[Firm_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                |--Nested Loops(Left Outer Join, OUTER REFERENCES:([DD].[Outer_Account_Division_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                |    |--Nested Loops(Inner Join)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                |    |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Accounts].[PK_Depo_Accounts] AS [DA]), SEEK:([DA].[ID]=[@Depo_Account_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                |    |    |--Nested Loops(Inner Join, OUTER REFERENCES:([DD].[Division_Type_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                |    |         |--Concatenation                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                |    |         |    |--Nested Loops(Inner Join, OUTER REFERENCES:([DAD].[Type]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                |    |         |    |    |--Nested Loops(Left Semi Join, OUTER REFERENCES:([DD].[Security_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                |    |         |    |    |    |--Hash Match(Inner Join, HASH:([DAD].[ID])=([DD].[Inner_Account_Division_ID]), RESIDUAL:([MatriX].[dbo].[Depo_Accounts_Divisions].[ID] as [DAD].[ID]=[MatriX].[dbo].[Depo_Divisions].[Inner_Account_Division_ID] as [DD].[Inner_Account_Division_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                |    |         |    |    |    |    |--Index Seek(OBJECT:([MatriX].[dbo].[Depo_Accounts_Divisions].[UQ_Depo_Accounts_Divisions] AS [DAD]), SEEK:([DAD].[Account_ID]=[@Depo_Account_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                |    |         |    |    |    |    |--Hash Match(Inner Join, HASH:([Expr1154])=([DD].[ID]), RESIDUAL:([MatriX].[dbo].[Depo_Divisions].[ID] as [DD].[ID]=[Expr1154]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                |    |         |    |    |    |         |--Compute Scalar(DEFINE:([Expr1154]=isnull([MatriX].[dbo].[Depo_Remains].[Division_ID],[MatriX].[dbo].[Depo_Remains].[Division_ID])))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                |    |         |    |    |    |         |    |--Hash Match(Right Outer Join, HASH:([MatriX].[dbo].[Depo_Remains].[Division_ID])=([MatriX].[dbo].[Depo_Remains].[Division_ID]), RESIDUAL:([MatriX].[dbo].[Depo_Remains].[Division_ID]=[MatriX].[dbo].[Depo_Remains].[Division_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                |    |         |    |    |    |         |         |--Table Spool                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                |    |         |    |    |    |         |         |    |--Compute Scalar(DEFINE:([MatriX].[dbo].[Depo_Remains].[Division_ID]=[MatriX].[dbo].[Depo_Remains].[Division_ID], [MatriX].[dbo].[Depo_Remains].[Volume]=[MatriX].[dbo].[Depo_Remains].[Volume]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
                                |    |         |    |    |    |         |         |         |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Remains].[PK_Depo_Remains]), SEEK:([MatriX].[dbo].[Depo_Remains].[Date]=[@Date_To]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                |    |         |    |    |    |         |         |--Table Spool                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                |    |         |    |    |    |         |              |--Compute Scalar(DEFINE:([MatriX].[dbo].[Depo_Remains].[Division_ID]=[MatriX].[dbo].[Depo_Remains].[Division_ID], [MatriX].[dbo].[Depo_Remains].[Volume]=[MatriX].[dbo].[Depo_Remains].[Volume]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
                                |    |         |    |    |    |         |                   |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Remains].[PK_Depo_Remains]), SEEK:([MatriX].[dbo].[Depo_Remains].[Date]=dateadd(day,(-1),[@Date_From])) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
                                |    |         |    |    |    |         |--Index Seek(OBJECT:([MatriX].[dbo].[Depo_Divisions].[UQ_Depo_Divisions] AS [DD]), SEEK:([DD].[Face_Accountant_ID]=[@Face_Accountant_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                |    |         |    |    |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Securities].[PK_Securities] AS [Secs]), SEEK:([Secs].[ID]=[MatriX].[dbo].[Depo_Divisions].[Security_ID] as [DD].[Security_ID]),  WHERE:((N'Securities.Type.'+CASE WHEN [MatriX].[dbo].[Securities].[Table_Name] as [Secs].[Table_Name]=N'Shares_Issues' THEN N'SharesIssues' ELSE [MatriX].[dbo].[Securities].[Table_Name] as [Secs].[Table_Name] END)=N'Securities.Type.Bonds') ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                |    |         |    |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Enums_Values].[PK_Enums_Values] AS [EVDT]), SEEK:([EVDT].[ID]=[MatriX].[dbo].[Depo_Accounts_Divisions].[Type] as [DAD].[Type]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                |    |         |    |--Nested Loops(Inner Join, OUTER REFERENCES:([DAD].[Type]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                |    |         |         |--Nested Loops(Left Semi Join, OUTER REFERENCES:([DD].[Security_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                |    |         |         |    |--Nested Loops(Inner Join, OUTER REFERENCES:([DD].[Inner_Account_Division_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                |    |         |         |    |    |--Compute Scalar(DEFINE:([Expr1008]=NULL))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                |    |         |         |    |    |    |--Nested Loops(Left Anti Semi Join, WHERE:([MatriX].[dbo].[Depo_Remains].[Division_ID]=[MatriX].[dbo].[Depo_Remains].[Division_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                |    |         |         |    |    |         |--Nested Loops(Inner Join, OUTER REFERENCES:([MatriX].[dbo].[Depo_Remains].[Division_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                |    |         |         |    |    |         |    |--Table Spool                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                |    |         |         |    |    |         |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Divisions].[PK_Depo_Divisions] AS [DD]), SEEK:([DD].[ID]=isnull(NULL,[MatriX].[dbo].[Depo_Remains].[Division_ID])),  WHERE:([MatriX].[dbo].[Depo_Divisions].[Face_Accountant_ID] as [DD].[Face_Accountant_ID]=[@Face_Accountant_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                |    |         |         |    |    |         |--Table Spool                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                |    |         |         |    |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Accounts_Divisions].[PK_Depo_Accounts_Divisions] AS [DAD]), SEEK:([DAD].[ID]=[MatriX].[dbo].[Depo_Divisions].[Inner_Account_Division_ID] as [DD].[Inner_Account_Division_ID]),  WHERE:([MatriX].[dbo].[Depo_Accounts_Divisions].[Account_ID] as [DAD].[Account_ID]=[@Depo_Account_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                |    |         |         |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Securities].[PK_Securities] AS [Secs]), SEEK:([Secs].[ID]=[MatriX].[dbo].[Depo_Divisions].[Security_ID] as [DD].[Security_ID]),  WHERE:((N'Securities.Type.'+CASE WHEN [MatriX].[dbo].[Securities].[Table_Name] as [Secs].[Table_Name]=N'Shares_Issues' THEN N'SharesIssues' ELSE [MatriX].[dbo].[Securities].[Table_Name] as [Secs].[Table_Name] END)=N'Securities.Type.Bonds') ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                |    |         |         |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Enums_Values].[PK_Enums_Values] AS [EVDT]), SEEK:([EVDT].[ID]=[MatriX].[dbo].[Depo_Accounts_Divisions].[Type] as [DAD].[Type]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                |    |         |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Divisions_Types].[PK_Divisions_Types] AS [DT]), SEEK:([DT].[ID]=[MatriX].[dbo].[Depo_Divisions].[Division_Type_ID] as [DD].[Division_Type_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                |    |--Nested Loops(Inner Join, OUTER REFERENCES:([DAD].[Account_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                |         |--Nested Loops(Inner Join, OUTER REFERENCES:([DAD].[Type]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
                                |         |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Accounts_Divisions].[PK_Depo_Accounts_Divisions] AS [DAD]), SEEK:([DAD].[ID]=[MatriX].[dbo].[Depo_Divisions].[Outer_Account_Division_ID] as [DD].[Outer_Account_Division_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                |         |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Enums_Values].[PK_Enums_Values] AS [EVDT]), SEEK:([EVDT].[ID]=[MatriX].[dbo].[Depo_Accounts_Divisions].[Type] as [DAD].[Type]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                |         |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Accounts].[PK_Depo_Accounts] AS [DA]), SEEK:([DA].[ID]=[MatriX].[dbo].[Depo_Accounts_Divisions].[Account_ID] as [DAD].[Account_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                |--Compute Scalar(DEFINE:([Expr1062]=CASE WHEN CASE WHEN [@locale]=N'en' THEN [MatriX].[dbo].[Firms].[Name_English] as [F].[Name_English] ELSE NULL END IS NOT NULL THEN CASE WHEN [@locale]=N'en' THEN [MatriX].[dbo].[Firms].[Name_English] as [F].[Name_English] ELSE NULL END ELSE [MatriX].[dbo].[Firms].[Name] as [F].[Name] END))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                     |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Firms].[PK_Firms] AS [F]), SEEK:([F].[ID]=isnull([MatriX].[dbo].[Depo_Accounts].[Firm_ID] as [DA].[Firm_ID],[MatriX].[dbo].[Depo_Accounts].[Firm_ID] as [DA].[Firm_ID])),  WHERE:([MatriX].[dbo].[Firms].[Face_Accountant_ID] as [F].[Face_Accountant_ID] IS NULL OR [MatriX].[dbo].[Firms].[Face_Accountant_ID] as [F].[Face_Accountant_ID]=[@Face_Accountant_ID]) ORDERED FORWARD)

2) План из Студии:
StmtText                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
--------                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
Table Insert(OBJECT:(@Remains), SET:([Security_ID] = [MatriX].[dbo].[Depo_Divisions].[Security_ID] as [DD].[Security_ID],[Depository_Name] = [Expr1062],[Volume_In] = [Expr1140],[Volume_Out_Free] = [Expr1141],[Volume_Out_Deal] = [Expr1142],[Volume_Out_Furn] = [Expr1143],[Volume_Out_Block] = [Expr1144]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
  |--Compute Scalar(DEFINE:([Expr1140]=CONVERT_IMPLICIT(decimal(29,10),[Expr1135],0), [Expr1141]=CONVERT_IMPLICIT(decimal(29,10),[Expr1136],0), [Expr1142]=CONVERT_IMPLICIT(decimal(29,10),[Expr1137],0), [Expr1143]=CONVERT_IMPLICIT(decimal(29,10),[Expr1138],0), [Expr1144]=CONVERT_IMPLICIT(decimal(29,10),[Expr1139],0)))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
       |--Top(ROWCOUNT est 0)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
            |--Filter(WHERE:([Expr1135]<>(0.) OR [Expr1136]<>(0.) OR [Expr1137]<>(0.) OR [Expr1138]<>(0.) OR [Expr1139]<>(0.)))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                 |--Stream Aggregate(GROUP BY:([Expr1062], [DD].[Security_ID]) DEFINE:([Expr1135]=SUM(CASE WHEN [MatriX].[dbo].[Divisions_Types].[Is_Real] as [DT].[Is_Real]=(1) THEN isnull([MatriX].[dbo].[Depo_Remains].[Volume],(0.0000000000)) ELSE (0.0000000000) END), [Expr1136]=SUM(CASE WHEN [MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_free' AND [MatriX].[dbo].[Enums_Values].[UID] as [EVDT].[UID]<>N'Accounts.SubType.Depo.Block' THEN isnull([MatriX].[dbo].[Depo_Remains].[Volume],(0.0000000000)) ELSE (0.0000000000) END), [Expr1137]=SUM(CASE WHEN [MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_deal' THEN isnull([MatriX].[dbo].[Depo_Remains].[Volume],(0.0000000000)) ELSE (0.0000000000) END), [Expr1138]=SUM(CASE WHEN [MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_furn' THEN isnull([MatriX].[dbo].[Depo_Remains].[Volume],(0.0000000000)) ELSE (0.0000000000) END), [Expr1139]=SUM(CASE WHEN ([MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_block' OR [MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_free' AND [MatriX].[dbo].[Enums_Values].[UID] as [EVDT].[UID]=N'Accounts.SubType.Depo.Block') AND ([MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_block' OR [MatriX].[dbo].[Divisions_Types].[UID] as [DT].[UID]=N'depo_div_free') THEN isnull([MatriX].[dbo].[Depo_Remains].[Volume],(0.0000000000)) ELSE (0.0000000000) END))) 
                      |--Sort(ORDER BY:([Expr1062] ASC, [DD].[Security_ID] ASC))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                           |--Nested Loops(Left Outer Join, OUTER REFERENCES:([DA].[Firm_ID], [DA].[Firm_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                |--Nested Loops(Left Outer Join, OUTER REFERENCES:([DD].[Outer_Account_Division_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
                                |    |--Nested Loops(Inner Join)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                |    |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Accounts].[PK_Depo_Accounts] AS [DA]), SEEK:([DA].[ID]=[@Depo_Account_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                |    |    |--Nested Loops(Inner Join, OUTER REFERENCES:([DD].[Division_Type_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                |    |         |--Nested Loops(Inner Join, OUTER REFERENCES:([DAD].[Type]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                |    |         |    |--Hash Match(Inner Join, HASH:([DAD].[ID])=([DD].[Inner_Account_Division_ID]), RESIDUAL:([MatriX].[dbo].[Depo_Accounts_Divisions].[ID] as [DAD].[ID]=[MatriX].[dbo].[Depo_Divisions].[Inner_Account_Division_ID] as [DD].[Inner_Account_Division_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                |    |         |    |    |--Index Seek(OBJECT:([MatriX].[dbo].[Depo_Accounts_Divisions].[UQ_Depo_Accounts_Divisions] AS [DAD]), SEEK:([DAD].[Account_ID]=[@Depo_Account_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                |    |         |    |    |--Hash Match(Inner Join, HASH:([DD].[ID])=([Expr1154]), RESIDUAL:([MatriX].[dbo].[Depo_Divisions].[ID] as [DD].[ID]=[Expr1154]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                |    |         |    |         |--Hash Match(Inner Join, HASH:([Secs].[ID])=([DD].[Security_ID]), RESIDUAL:([MatriX].[dbo].[Depo_Divisions].[Security_ID] as [DD].[Security_ID]=[MatriX].[dbo].[Securities].[ID] as [Secs].[ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                |    |         |    |         |    |--Clustered Index Scan(OBJECT:([MatriX].[dbo].[Securities].[PK_Securities] AS [Secs]), WHERE:((N'Securities.Type.'+CASE WHEN [MatriX].[dbo].[Securities].[Table_Name] as [Secs].[Table_Name]=N'Shares_Issues' THEN N'SharesIssues' ELSE [MatriX].[dbo].[Securities].[Table_Name] as [Secs].[Table_Name] END)=N'Securities.Type.Bonds'))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                |    |         |    |         |    |--Index Seek(OBJECT:([MatriX].[dbo].[Depo_Divisions].[UQ_Depo_Divisions] AS [DD]), SEEK:([DD].[Face_Accountant_ID]=[@Face_Accountant_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                |    |         |    |         |--Compute Scalar(DEFINE:([Expr1154]=isnull([MatriX].[dbo].[Depo_Remains].[Division_ID],[MatriX].[dbo].[Depo_Remains].[Division_ID])))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                |    |         |    |              |--Hash Match(Full Outer Join, HASH:([MatriX].[dbo].[Depo_Remains].[Division_ID])=([MatriX].[dbo].[Depo_Remains].[Division_ID]), RESIDUAL:([MatriX].[dbo].[Depo_Remains].[Division_ID]=[MatriX].[dbo].[Depo_Remains].[Division_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                |    |         |    |                   |--Compute Scalar(DEFINE:([MatriX].[dbo].[Depo_Remains].[Division_ID]=[MatriX].[dbo].[Depo_Remains].[Division_ID], [MatriX].[dbo].[Depo_Remains].[Volume]=[MatriX].[dbo].[Depo_Remains].[Volume]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                |    |         |    |                   |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Remains].[PK_Depo_Remains]), SEEK:([MatriX].[dbo].[Depo_Remains].[Date]=[@Date_To]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                |    |         |    |                   |--Compute Scalar(DEFINE:([MatriX].[dbo].[Depo_Remains].[Division_ID]=[MatriX].[dbo].[Depo_Remains].[Division_ID], [MatriX].[dbo].[Depo_Remains].[Volume]=[MatriX].[dbo].[Depo_Remains].[Volume]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                |    |         |    |                        |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Remains].[PK_Depo_Remains]), SEEK:([MatriX].[dbo].[Depo_Remains].[Date]=dateadd(day,(-1),[@Date_From])) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                |    |         |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Enums_Values].[PK_Enums_Values] AS [EVDT]), SEEK:([EVDT].[ID]=[MatriX].[dbo].[Depo_Accounts_Divisions].[Type] as [DAD].[Type]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                |    |         |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Divisions_Types].[PK_Divisions_Types] AS [DT]), SEEK:([DT].[ID]=[MatriX].[dbo].[Depo_Divisions].[Division_Type_ID] as [DD].[Division_Type_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                |    |--Nested Loops(Inner Join, OUTER REFERENCES:([DAD].[Account_ID]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                |         |--Nested Loops(Inner Join, OUTER REFERENCES:([DAD].[Type]))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                |         |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Accounts_Divisions].[PK_Depo_Accounts_Divisions] AS [DAD]), SEEK:([DAD].[ID]=[MatriX].[dbo].[Depo_Divisions].[Outer_Account_Division_ID] as [DD].[Outer_Account_Division_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
                                |         |    |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Enums_Values].[PK_Enums_Values] AS [EVDT]), SEEK:([EVDT].[ID]=[MatriX].[dbo].[Depo_Accounts_Divisions].[Type] as [DAD].[Type]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                |         |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Depo_Accounts].[PK_Depo_Accounts] AS [DA]), SEEK:([DA].[ID]=[MatriX].[dbo].[Depo_Accounts_Divisions].[Account_ID] as [DAD].[Account_ID]) ORDERED FORWARD)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                |--Compute Scalar(DEFINE:([Expr1062]=CASE WHEN CASE WHEN [@locale]=N'en' THEN [MatriX].[dbo].[Firms].[Name_English] as [F].[Name_English] ELSE NULL END IS NOT NULL THEN CASE WHEN [@locale]=N'en' THEN [MatriX].[dbo].[Firms].[Name_English] as [F].[Name_English] ELSE NULL END ELSE [MatriX].[dbo].[Firms].[Name] as [F].[Name] END))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                     |--Clustered Index Seek(OBJECT:([MatriX].[dbo].[Firms].[PK_Firms] AS [F]), SEEK:([F].[ID]=isnull([MatriX].[dbo].[Depo_Accounts].[Firm_ID] as [DA].[Firm_ID],[MatriX].[dbo].[Depo_Accounts].[Firm_ID] as [DA].[Firm_ID])),  WHERE:([MatriX].[dbo].[Firms].[Face_Accountant_ID] as [F].[Face_Accountant_ID] IS NULL OR [MatriX].[dbo].[Firms].[Face_Accountant_ID] as [F].[Face_Accountant_ID]=[@Face_Accountant_ID]) ORDERED FORWARD)
23 июн 09, 10:17    [7331609]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Glamorama
Member

Откуда:
Сообщений: 152
я переменные переопределял так
CREATE PROCEDURE tst_proc
@cdate_ DATETIME
AS

DECLARE @cdate DATETIME
SET @cdate = @cdate_

и киньте текст запроса сюда
23 июн 09, 12:19    [7332375]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Deniro
Member

Откуда: град Подмосковье
Сообщений: 84
to Glamorama

Хорошо, попробуем и ваш способ переопределения параметров в процедуре.

Вот текст запроса, по которому я приводил планы (выше):
	insert into @Remains
	(
		Security_ID, 
		Depository_Name, 
		Volume_In, 
		Volume_Out_Free, 
		Volume_Out_Deal, 
		Volume_Out_Furn, 
		Volume_Out_Block
	)
	select
		DD.Security_ID, 
		F.Name,
		sum(case when DT.Is_Real = 1 then DR.Volume_In else 0 end) as Volume_In,
		sum(case when DT.UID = 'depo_div_free' and DADI.Division_Type_UID <> 'Accounts.SubType.Depo.Block' then DR.Volume_Out else 0 end) as Volume_Out_Free,
		sum(case when DT.UID = 'depo_div_deal' then DR.Volume_Out else 0 end) as Volume_Out_Deal,
		sum(case when DT.UID = 'depo_div_furn' then DR.Volume_Out else 0 end) as Volume_Out_Furn,
		sum(case when DT.UID = 'depo_div_block' or (DT.UID = 'depo_div_free' and DADI.Division_Type_UID = 'Accounts.SubType.Depo.Block') then DR.Volume_Out else 0 end) as Volume_Out_Block
	from 
		(
			select 
				isnull(DRI.Division_ID, DRO.Division_ID) as Division_ID, 
				isnull(DRI.Volume, 0) as Volume_In, 
				isnull(DRO.Volume, 0) as Volume_Out
			from (select Division_ID, Volume from dbo.depo_Remains where Date = dateadd(dd, -1, @Date_From)) as DRI 
				full outer join (select Division_ID, Volume from dbo.depo_Remains where Date = @Date_To) as DRO on DRO.Division_ID = DRI.Division_ID
		) as DR
		inner join dbo.Depo_Divisions as DD on DD.ID = DR.Division_ID and DD.Face_Accountant_ID = @Face_Accountant_ID
		inner join dbo.Divisions_Types as DT on DT.ID = DD.Division_Type_ID
		inner join dbo.vw_Depo_Accounts_Divisions as DADI on DADI.ID = DD.Inner_Account_Division_ID and DADI.Account_ID = @Depo_Account_ID
		left outer join dbo.vw_Depo_Accounts_Divisions as DADO on DADO.ID = DD.Outer_Account_Division_ID
		left outer join dbo.udf_Firms_UI_Reference(@locale, @Face_Accountant_ID) as F on F.ID = isnull(DADO.Firm_ID, DADI.Firm_ID)
	where
		DD.Security_ID in (select ID from dbo.vw_Securities where Security_Type_UID in ('Securities.Type.Bonds'))
	group by DD.Security_ID, F.Name
	having 
		sum(case when DT.Is_Real = 1 then DR.Volume_In else 0 end) <> 0
		or sum(case when DT.UID = 'depo_div_free' and DADI.Division_Type_UID <> 'Accounts.SubType.Depo.Block' then DR.Volume_Out else 0 end) <> 0
		or sum(case when DT.UID = 'depo_div_deal' then DR.Volume_Out else 0 end) <> 0
		or sum(case when DT.UID = 'depo_div_furn' then DR.Volume_Out else 0 end) <> 0
		or sum(case when DT.UID = 'depo_div_block' or (DT.UID = 'depo_div_free' and DADI.Division_Type_UID = 'Accounts.SubType.Depo.Block') then DR.Volume_Out else 0 end) <> 0
23 июн 09, 13:34    [7332880]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Deniro
Member

Откуда: град Подмосковье
Сообщений: 84
Изучив вопросы рекомпиляций и т.д. сделали следующее:
1) нашли, с помощью профайлера процедуры, которые наиболее часто перекомпиляются (все они оказались из одного приложения, причина перекомпиляций была - Deferred Colmpile) и подкрутили их так, что перекомпиляции по ним исчезли.
2) настроили профайлер для отлова блокировок процессов
3) запустили еще один профайлер на отлов событий SP:Recompile, SQL:StmtRecompile, Auto Stats

В результате, все равно возникают тормозные моменты. Увидели, что в момент тормозов по блокировкам сразу же рисуется такая картина:
<blocked-process-report monitorLoop="153327">
  <blocked-process>
    <process id="process8d86b8" taskpriority="0" logused="0" waitresource="OBJECT: 6:330704151:0 [COMPILE]" waittime="4359" ownerId="1170791013" transactionname="sqlsource_transform" lasttranstarted="2009-06-24T15:15:33.550" XDES="0x207be8e8" lockMode="X" schedulerid="2" kpid="4208" status="suspended" spid="197" sbid="0" ecid="0" priority="0" transcount="0" lastbatchstarted="2009-06-24T15:15:33.550" lastbatchcompleted="2009-06-24T15:15:33.550" clientapp="MF" hostname="TR_STEPANOVA" hostpid="4008" loginname="_Stepanova_L" isolationlevel="read committed (2)" xactid="1170791013" currentdb="6" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
      <executionStack>
        <frame line="1" sqlhandle="0x000000000000000000000000000000000000000000000000" />
      </executionStack>
      <inputbuf>
Proc [Database Id = 6 Object Id = 481708739]   </inputbuf>
    </process>
  </blocked-process>
  <blocking-process>
    <process status="suspended" waittime="15" spid="149" sbid="0" ecid="0" priority="0" transcount="0" lastbatchstarted="2009-06-24T15:15:33.543" lastbatchcompleted="2009-06-24T15:15:33.543" clientapp="MF" hostname="TR_STEPANOVA" hostpid="1872" loginname="_Stepanova_L" isolationlevel="read committed (2)" xactid="1170790992" currentdb="6" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
      <executionStack>
        <frame line="137" sqlhandle="0x030006001725b613a4641801039c00000100000000000000" />
      </executionStack>
      <inputbuf>
Proc [Database Id = 6 Object Id = 330704151]   </inputbuf>
    </process>
  </blocking-process>
</blocked-process-report>
И таких блокировок много - все по процедурам из того самого приложения в котором эти самы процедуры "подкрутили". Но при этом во 2-м профайлере в этот же самый момент перекомпиляций из этого приложения нет совсем.
В тормозной момент также вырастают сильно очереди к диску с файлами данных баз.

Что же может быть причиной такого поведения системы?
26 июн 09, 12:39    [7347366]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Crimean
Member

Откуда:
Сообщений: 13148
ну так может просто диск затыкается?
26 июн 09, 12:51    [7347460]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895

Deniro

Есть процедура, работает из клиентского приложения за 1 сек. Спустя
какой-то промежуток времени (точно не скажу, от нескольких часов) эта же
процедура в приложении начинает выполняться за 30 с лишним сек. Берем
эту процедуру, подключаемся в Management Studio под теми же
аутентификационными данными, что и приложение, запускаем ее с теми же
точно параметрами, что и из приложения, получаем время выполнения 1 сек.
Пробуем еще раз из приложения - те же 30 сек. с лишним. Если вызвать
смену плана процедуры (перекомпиляция, DBCC FREEPROCCACHE), то из
приложеня процедура опять начинает работать шустро - 1 сек. В чем может
быть причина такого странного поведения?

А флаги (SET'ы), которые устанавливают ваше приложение и студия, сравнивали?

Posted via ActualForum NNTP Server 1.4

26 июн 09, 13:15    [7347664]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Deniro
Member

Откуда: град Подмосковье
Сообщений: 84
Crimean
ну так может просто диск затыкается?

Вряд ли, просто рост очередей к диску возникает только при блокировках компиляции. Проверял уже процедуры в трассе на предмет чтения/записи в такой тормозной момент - ничего найти не удалось. Т.е. все читают/пишут как и без тормозов.
Сейчас нашли, что эти самые процедуры, на которых начинает возникать блокировка компиляции вызываются из приложения без указания имени схемы. Согласно статье - http://support.microsoft.com/kb/263889 сейчас заменим вызовы, с указанием схемы. Посмотрим, что будет, но как-то уже не кажется что такое простое действо поможет :-).
Может еще какие причины могут быть? Все факты говорят за то, что усугубляются как-то эти блокировки компиляции в какой-то момент и все встает, найти бы причину теперь...
26 июн 09, 13:23    [7347724]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
Deniro
Member

Откуда: град Подмосковье
Сообщений: 84
RENaissance

А флаги (SET'ы), которые устанавливают ваше приложение и студия, сравнивали?

Нет, не смогли найти как это сделать? Может дадите наводку?
26 июн 09, 13:24    [7347740]     Ответить | Цитировать Сообщить модератору
 Re: Неизвестная причина проседания производительности  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895

Deniro

Нет, не смогли найти как это сделать? Может дадите наводку?

Запустите Profiler, а затем ваше приложение и студию. Посмотрите, какие SET'ы выставляются при подключении.

Posted via ActualForum NNTP Server 1.4

26 июн 09, 13:34    [7347814]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить