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

Откуда:
Сообщений: 30
iap
Таким образом, создав процедуру с опцией RECOMPILE, можно добиться построения оптимального плана
для текущего значения переменной при каждом запуске.

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

TaPaK
оптимизатор считает это более оптимальным путём при запросе с переменной, как вариант прибить индекс, OPTION(RECOMPILE), OPTIMIZE FOR
или изменить разобраться почему лезет в "не правильный" индекс считая его более удачным

Индексы прибил и пересоздал во вторую очередь, тоже не помогло. С OPTION(RECOMPILE) отработало нормально. Не понятно почему процедура три года работала по правильному индексу, а теперь лезет в предназначенный для других целей :-( Причем я бы понял, если бы это был неудачно созданный новый индекс, но он также жил три года и процедуре не мешал!
15 авг 17, 12:04    [20724671]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Невский,
автор
Индексы прибил и пересоздал во вторую очередь, тоже не помогло. С OPTION(RECOMPILE) отработало нормально. Не понятно почему процедура три года работала по правильному индексу, а теперь лезет в предназначенный для других целей :-( Причем я бы понял, если бы это был неудачно созданный новый индекс, но он также жил три года и процедуре не мешал!

прибить = WITH(INDEX (name)) а не удалить.

автор
Не понятно почему процедура три года работала по правильному индексу, а теперь лезет в предназначенный для других целей

оракулы все на каникулах
15 авг 17, 12:06    [20724678]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Невский
Member

Откуда:
Сообщений: 30
Konst_One
ну там ещё * в запросах, не могло быть, что таблицы менялись?

Звездочка это для примера, в процедуре выбирается 4 поля и список полей не менялся с даты создания.
15 авг 17, 12:07    [20724679]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Невский
Konst_One
ну там ещё * в запросах, не могло быть, что таблицы менялись?

Звездочка это для примера, в процедуре выбирается 4 поля и список полей не менялся с даты создания.


а индекс, который вы называете правильным, покрывающий?
15 авг 17, 12:08    [20724687]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
ну вы как-то нам всё порциями свои секреты выдаёте, мы ж гадать то не умеем
15 авг 17, 12:08    [20724689]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Невский
Member

Откуда:
Сообщений: 30
Shakill
а индекс, который вы называете правильным, покрывающий?

Ну да, с ним за пару секунд отрабатывает.
15 авг 17, 12:09    [20724696]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Невский
Shakill
а индекс, который вы называете правильным, покрывающий?

Ну да, с ним за пару секунд отрабатывает.

покажите скрипт создания индекса и какие 4 поля на самом деле выбираются в запросе
15 авг 17, 12:12    [20724702]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Невский
Member

Откуда:
Сообщений: 30
Невский
Shakill
а индекс, который вы называете правильным, покрывающий?

Ну да, с ним за пару секунд отрабатывает.

Да вобщем то тему можно закрывать. OPTION(RECOMPILE) помогло, а с чего вдруг сервак начал юзать не тот индекс вряд ли кто то скажет, не видя всей картины...
Всем спасибо! Если кто подскажет, как вопрос закрыть - сразу сделаю.
15 авг 17, 12:13    [20724706]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Невский
Member

Откуда:
Сообщений: 30
Shakill
покажите скрипт создания индекса и какие 4 поля на самом деле выбираются в запросе


CREATE NONCLUSTERED INDEX [idx_Daily_K1] ON [dbo].[Daily]
(
[ReportDate] ASC
)

select d.ReportDate
,d.KeyId
,d.[Principal]
,d.[Interest]
from [Daily] d
where d.ReportDate>@ReportDate OPTION (RECOMPILE)

Без OPTION (RECOMPILE) лезет почему то сюда.

CREATE NONCLUSTERED INDEX [idx_Daily_K2_K1_18_19] ON [dbo].[Daily]
(
[KeyId] ASC,
[ReportDate] ASC
)INCLUDE ([PastPrincipal],[PastInterest])
15 авг 17, 12:21    [20724736]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
KeyId - это PK?
15 авг 17, 12:22    [20724740]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Невский
Member

Откуда:
Сообщений: 30
Konst_One
KeyId - это PK?

Для этой таблицы foreign key
15 авг 17, 12:25    [20724748]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Невский
Shakill
покажите скрипт создания индекса и какие 4 поля на самом деле выбираются в запросе


CREATE NONCLUSTERED INDEX [idx_Daily_K1] ON [dbo].[Daily]
(
[ReportDate] ASC
)

select d.ReportDate
,d.KeyId
,d.[Principal]
,d.[Interest]
from [Daily] d
where d.ReportDate>@ReportDate OPTION (RECOMPILE)


ну а вы говорите, что покрывающий. создайте индекс по ReportDate и в INCLUDE поместите (KeyId, Principal, Interest)
15 авг 17, 12:25    [20724752]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
то что 2-й идекс выбирает, то оптимизатор его считает более удачным, там инклуды тех полей, что возвращает запрос и поле по которому собственно отбор производится
15 авг 17, 12:27    [20724758]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Невский,

автор
[idx_Daily_K2_K1_18_19]

я не знаю как используется в остальных слуаях этот индекс, но для текущего запроса достаточно сменить порядок полей
15 авг 17, 12:29    [20724768]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Невский
Member

Откуда:
Сообщений: 30
Shakill
ну а вы говорите, что покрывающий. создайте индекс по ReportDate и в INCLUDE поместите (KeyId, Principal, Interest)

Дык это таблица с 20+ полями на сотни миллионов строк. Если под каждый запрос индекс создавать - места на винтах на хватит. К тому же EP говорит, что этого индекса с головой хватает. Да и селект по нему идет мгновенный.
15 авг 17, 12:29    [20724770]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
ТС,
давайте уж выкладывайте всю подноготную своей проблемы со всеми данными. а то уже вот узнали, что и индексы не те и таблицы миллионики. что у вас там ещё?
15 авг 17, 12:31    [20724777]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Невский
Shakill
ну а вы говорите, что покрывающий. создайте индекс по ReportDate и в INCLUDE поместите (KeyId, Principal, Interest)

Дык это таблица с 20+ полями на сотни миллионов строк. Если под каждый запрос индекс создавать - места на винтах на хватит. К тому же EP говорит, что этого индекса с головой хватает. Да и селект по нему идет мгновенный.

под этот индекс вы получаете Lookup, измените втрой индекс и должно всё стать на место
15 авг 17, 12:31    [20724778]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Невский
Member

Откуда:
Сообщений: 30
Konst_One
то что 2-й идекс выбирает, то оптимизатор его считает более удачным, там инклуды тех полей, что возвращает запрос и поле по которому собственно отбор производится

Там в инклудах другие поля. Т.е. оптимизатор лезет в него, потому как в индекс KeyId включен. Но имхо это бессмысленно. Да и с OPTION(RECOMPILE) оптимизатор сразу возвращается к первому идексу, в котором только отчетная дата. Думаю как только статистика обновится вопрос решиться.
15 авг 17, 12:33    [20724780]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Невский,

автор
Там в инклудах другие поля. Т.е. оптимизатор лезет в него, потому как в индекс KeyId включен. Но имхо это бессмысленно. Да и с OPTION(RECOMPILE) оптимизатор сразу возвращается к первому идексу, в котором только отчетная дата. Думаю как только статистика обновится вопрос решиться.

что за бредятину приходится читать...
15 авг 17, 12:34    [20724784]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Невский
Member

Откуда:
Сообщений: 30
Konst_One
ТС,
давайте уж выкладывайте всю подноготную своей проблемы со всеми данными. а то уже вот узнали, что и индексы не те и таблицы миллионики. что у вас там ещё?

Да вобщем то в самом начале написал, что индексы есть и таблица весит несколько десятков гиг, из-за чего не хотел сразу статистику на обновление запускать. А то, что оптимизатор лезет во второй индекс выяснилось только походу обсуждения.
15 авг 17, 12:37    [20724792]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
проанализируйте все запросы, что идут к вашей таблице и выполните рекомендации по использованию индексов, что вам выше написали
15 авг 17, 12:38    [20724797]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
Невский
Member

Откуда:
Сообщений: 30
TaPaK
под этот индекс вы получаете Lookup, измените втрой индекс и должно всё стать на место

Второй индекс совсем под другую цель сделан. Он для той цели нужен в таком виде и работает прекрасно. Для Цели "глючного" запроса вполне хватает первого индекса и никаких задержек при его использовании нет.
15 авг 17, 12:39    [20724801]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Невский
TaPaK
под этот индекс вы получаете Lookup, измените втрой индекс и должно всё стать на место

Второй индекс совсем под другую цель сделан. Он для той цели нужен в таком виде и работает прекрасно. Для Цели "глючного" запроса вполне хватает первого индекса и никаких задержек при его использовании нет.

да, sql это точно не ваше
15 авг 17, 12:41    [20724804]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
invm
Member

Откуда: Москва
Сообщений: 9270
Невский
OPTION(RECOMPILE) помогло, а с чего вдруг сервак начал юзать не тот индекс вряд ли кто то скажет, не видя всей картины...
OPTION(RECOMPILE) заставляет сервер каждый раз строить новый план выполнения. Т.к. план строится уже при выполнении процедуры, то это дает возможность учесть значение @ReportDate и построить более оптимальный план.

А ранее план строился для неизвестного значения @ReportDate в котором, скорее всего, "юзать не тот индекс" есть Index Scan.
Потому что все необходимые столбцы можно добыть из этого индекса, а сканировать индекс дешевле чем сканировать таблицу.
15 авг 17, 12:47    [20724822]     Ответить | Цитировать Сообщить модератору
 Re: Жутко тупит запрос, при использовании в where переменной  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
кстати, а есть какие нибудь хинты что бы сервер смотрел на статистику/индексы и при необходимости компилил план заново?
15 авг 17, 14:47    [20725284]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить