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

Откуда:
Сообщений: 34
Здравствуйте, помогите, пожалуйста кто может.
Есть процедура, которая временами начинает выполняться очень долго и под свое выполнение резервирует больше гигабайта оперативной памяти,, памяти перестает хватать, остальные запросы ждут в состоянии RESOURCE_SEMAPHORE, не могу понять в чем дело.
Может посмотрит кто.

К сообщению приложен файл (query.txt - 10Kb) cкачать
14 фев 13, 11:36    [13924898]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
karu
Member

Откуда:
Сообщений: 34
и план запроса

К сообщению приложен файл (plan.txt - 27Kb) cкачать
14 фев 13, 11:37    [13924902]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
Для каких значений параметров ваш принудительный план просто становится неоптимальным.
14 фев 13, 11:46    [13924954]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
karu
Member

Откуда:
Сообщений: 34
Glory
Для каких значений параметров ваш принудительный план просто становится неоптимальным.

Не совсем понял, это вопрос?
14 фев 13, 11:55    [13925034]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
karu
Не совсем понял, это вопрос?

Предложенный вами план отличается от того, что вы захинтовали в тексте своего запроса ? - вот это вопрос
Если нет, то значит, ваш принудительный план не является оптимальным для какиих значений параметров. - а это предположение.
14 фев 13, 11:57    [13925053]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
karu
Member

Откуда:
Сообщений: 34
Это полный текст процедуры, параметры выставляются в программе, начитываются подзапросами.

К сообщению приложен файл (proc.txt - 28Kb) cкачать
14 фев 13, 12:00    [13925077]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
karu
Это полный текст процедуры, параметры выставляются в программе, начитываются подзапросами.

Вы понимаете о чем речь ?
В вашем запросе уже четко определен план выполнения.
Вы из каких соображений давали все эти хинты в тексте запроса ?
Вы тестировали этот план для всех возможных "параметров выставляемых в программе" ?
14 фев 13, 12:02    [13925098]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
karu
Member

Откуда:
Сообщений: 34
Glory, слабо разбираюсь в планах выполнения, хинты писали разработчики ПО, plan.txt- это актуальный план из профайлера.
Может немного понятнее объяснил.
14 фев 13, 12:06    [13925137]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
karu
хинты писали разработчики ПО, plan.txt- это актуальный план из профайлера.

И что, этот план НЕ совпадает с тем, который задают хинты ?
14 фев 13, 12:07    [13925150]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Гость333
Member

Откуда:
Сообщений: 3683
karu,

Можете приложить план запроса в xml (файл .sqlplan)? В текстовом плане вижу несколько Index Scan + Table Spool. Скорее всего, печальная печаль происходит именно из-за этого.

И какая у вас "select @@version"? Если 2008 и выше, то там есть хинт FORCESEEK. Если 2005, то может помочь пересбор нужных статистик с опцией FULLSCAN. В запущенных случаях может понадобиться разбить большой запрос на более мелкие.
14 фев 13, 12:15    [13925233]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
karu
Member

Откуда:
Сообщений: 34
Гость333, Microsoft SQL Server 2005 - 9.00.5000.00 (X64) Dec 10 2010 10:38:40 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 (Build 7600: )

Не знаю как снять .sqlplan- запросы через ПО идут, а не через managment studio(
14 фев 13, 12:38    [13925441]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Гость333
Member

Откуда:
Сообщений: 3683
karu
Не знаю как снять .sqlplan- запросы через ПО идут, а не через managment studio(

А как вы текстовый план добыли? :-)
14 фев 13, 12:42    [13925474]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
karu
Member

Откуда:
Сообщений: 34
Гость333, в профайлере.
14 фев 13, 12:44    [13925482]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Kanadec
Member

Откуда: Moscow
Сообщений: 43
karu,

Попробуйте сперва убрать хинты с таблиц tFoldingDocument, tFoldingDocumentRelation, tSignDoc.
Если не поможет, то попробуйте вообще убрать все хинты со всех таблиц и строку option.

Если решите оставить строку option, то впишите в строку option maxdop 1. maxdop проблему не решит, зато минимизирует нагрузку на другие процессоры, что позволит другим процессам работать без ожидания.

option (MAXDOP 1, FORCE ORDER, LOOP JOIN, KEEPFIXED PLAN)

А еще я бы вам посоветовал проапдейтить статистики в базе, как уже упомяналось выше.
это можно сделать так: dbcc updateusage('имя вашей базы') with count_rows, no_infomsgs
14 фев 13, 12:54    [13925556]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Гость333
Member

Откуда:
Сообщений: 3683
karu
Гость333, в профайлере.

В профайлере можно включить трассировку событий Performance — Showplan XML Statistics Profile. Будут выводиться планы запросов в графическом виде. Если нажать правой кнопкой на соответствующей строке в таблице с трассой, то будет активен пункт меню "Extract Event Data", при выборе которого можно будет сохранить файл .sqlplan.
14 фев 13, 13:00    [13925604]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Kanadec
впишите в строку option maxdop 1

В приложенном плане запроса вроде и так нет параллелизма?
14 фев 13, 13:01    [13925620]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Kanadec
Member

Откуда: Moscow
Сообщений: 43
Да и вообше такой жесткий хардкод по индексам я встречал только в очень часто вызываемых процедурах, где изменение плана запроса просто неприемлемо и деградация производительности не допустима.

попробуйте переписать запрос. Добавьте пару табличных переменных или временных таблиц. Возможно это ускорит запрос.
14 фев 13, 13:02    [13925630]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Kanadec
Member

Откуда: Moscow
Сообщений: 43
Гость333
Kanadec
впишите в строку option maxdop 1

В приложенном плане запроса вроде и так нет параллелизма?


Сейчас нет, но если запрос тяжелый, а судя по всему он реально тяжелый, то вполне возможно появление паралелизма.
14 фев 13, 13:05    [13925648]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Kanadec
если запрос тяжелый, а судя по всему он реально тяжелый

Беглый осмотр обнаружил в запросе ведущую таблицу tDealTransact (доступ к которой осуществляется по индексу), к которой через loop join цепляются 16 других таблиц, также всё через индексы. По задумке разработчиков (и при правильном плане выполнения) это лёгкий запрос. Но MSSQL2005 при устаревшей/неполной статистике легко может свалиться в Index Scan + Table Spool, и тогда имеем ситуацию как у топикстартера.
14 фев 13, 13:16    [13925752]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Kanadec,

Сорри, только сейчас дошло, что вы хотели сказать :)
14 фев 13, 13:17    [13925768]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2551
Kanadec
Да и вообше такой жесткий хардкод по индексам я встречал только в очень часто вызываемых процедурах, где изменение плана запроса просто неприемлемо и деградация производительности не допустима.
Это обычная практика для тех, кто интегрируется с продуктами ДИАСОФТ (если не ошибаюсь, тут имеем дело именно с ними) и пишет в их стиле.
14 фев 13, 13:30    [13925874]     Ответить | Цитировать Сообщить модератору
 Re: План выполнения запроса  [new]
karu
Member

Откуда:
Сообщений: 34
Спасибо всем огромное за советы, это действительно продукт Диасофт, я вышел на разработчиков, экспериментируем с процедурой на тестовой аналогичной базе.
14 фев 13, 13:54    [13926130]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить