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