|
Использование индексов на временных таблицах внутри процедур с и без EXECUTE STATEMENT
|
|||
---|---|---|---|
#18+
FB 2.5 1. Есть набор временных таблиц. На транзакцию. 2. На эти таблицы созданы индексы на связки и еще один на данные Код: sql 1.
3. Есть ХП, которая набивает таблицы данными, потом собирает по ним агрегаты. 4. Все, кроме связок (ATTRIBUTE_VALUE, :D1, :D2) - текст(varchar(70)) . Связки - bigint. Запрос, 30 раз выполненый внутри ХП, дает 10 млн. фетчей Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Этот же запрос, выполненный ПОСЛЕ процедуры (есс-но в той же транзакции) на 1/30 диапазона. Распределение данных более-менее равномерное. Код: sql 1. 2.
И это можно было бы понять, но! Если обернуть сбор агрегата в execute statement, то тот же самый запрос в те же 30 раз этих самых 10 млн. фетчей не дает. 5 млн - первоначальная набивка данных. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Ну и собственно вопрос: Как дальше жить? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2016, 11:42 |
|
Использование индексов на временных таблицах внутри процедур с и без EXECUTE STATEMENT
|
|||
---|---|---|---|
#18+
pastor, чем фетчи меряешь. IBExpert'ом? Раз FB2.5 то скорее всего CS или SC. Значит счётчики фетчей разные на каждое соединение. Есть подозрение что счётчики фетчей ES не попадают в общую статистику. Попробуй померить трейсом, там точнее должно быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 12:56 |
|
Использование индексов на временных таблицах внутри процедур с и без EXECUTE STATEMENT
|
|||
---|---|---|---|
#18+
pastor, планы запросов внутри процедуры и в ES разные, судя по статистике ? Вообще - нифига не понятно - в чём проблема ? PS pastorЗапрос, 30 раз выполненый внутри ХП, дает 10 млн. фетчей ... Код: sql 1.
Не получается... PPS воспроизводимый пример снимет бОльшую часть вопросов ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 13:31 |
|
Использование индексов на временных таблицах внутри процедур с и без EXECUTE STATEMENT
|
|||
---|---|---|---|
#18+
hvladpastor, планы запросов внутри процедуры и в ES разные, судя по статистике ? Вообще - нифига не понятно - в чём проблема ? PS pastorЗапрос, 30 раз выполненый внутри ХП, дает 10 млн. фетчей ... Код: sql 1.
Не получается... PPS воспроизводимый пример снимет бОльшую часть вопросов 1. планы разные. проблема в этом. хочу внутри процедуры такой же план. 2. получается, получается :) 5 млн - первоначальное заполнение таблиц. 3. сделаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 14:02 |
|
Использование индексов на временных таблицах внутри процедур с и без EXECUTE STATEMENT
|
|||
---|---|---|---|
#18+
pastor, а чего параметры в execute statement не используешь? В 2.5 ведь можно. Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 14:21 |
|
Использование индексов на временных таблицах внутри процедур с и без EXECUTE STATEMENT
|
|||
---|---|---|---|
#18+
pastor1. планы разные. проблема в этом. хочу внутри процедуры такой же план.Таблицы наполнились, план поменялся ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 15:27 |
|
Использование индексов на временных таблицах внутри процедур с и без EXECUTE STATEMENT
|
|||
---|---|---|---|
#18+
hvladpastor1. планы разные. проблема в этом. хочу внутри процедуры такой же план.Таблицы наполнились, план поменялся а делать-то что? разносить наполнение и анализ по разным процедурам? или есть еще какой-нить лайфхак устроить сэйвпоинт внутри процедуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 15:40 |
|
Использование индексов на временных таблицах внутри процедур с и без EXECUTE STATEMENT
|
|||
---|---|---|---|
#18+
pastor, не поможет ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 15:44 |
|
Использование индексов на временных таблицах внутри процедур с и без EXECUTE STATEMENT
|
|||
---|---|---|---|
#18+
pastor, не понял причём тут сейвпойт. Проблема если я правильно понял, заключается в том что для этого запроса план составляется на этапе загрузки ХП в кэш метаданных. А тогда данных в таблицах ещё нет. Для EXECUTE STATEMENT плана заранее составлено быть не может, поэтому он каждый раз анализирует запрос и составляет план заново. Попробуй зафиксировать в запросе план хинтами (+0) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 15:50 |
|
Использование индексов на временных таблицах внутри процедур с и без EXECUTE STATEMENT
|
|||
---|---|---|---|
#18+
Симонов Денисpastor, не понял причём тут сейвпойт. Проблема если я правильно понял, заключается в том что для этого запроса план составляется на этапе загрузки ХП в кэш метаданных. А тогда данных в таблицах ещё нет. Для EXECUTE STATEMENT плана заранее составлено быть не может, поэтому он каждый раз анализирует запрос и составляет план заново. Попробуй зафиксировать в запросе план хинтами (+0) хинтами там не прибьешь. есть составной индекс точно по условию выборки. таки придется поделить на две процедуры - набивалка и разбиралка. PS. при просмотре зависимостей на эти временные таблички, похожие разделенные набивалки и разбиралки нашлись. при просмотре лога svn выяснилось, что делал это я. видимо, забыл где лежит рецепт на таблетки от склероза. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 16:44 |
|
|
start [/forum/topic.php?fid=40&msg=39167716&tid=1562350]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 263ms |
total: | 383ms |
0 / 0 |