|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
Привет! Внезапно обнаружил, что последняя версия Firebird 3.0.3.32900 для любого серективного запроса в IBExpert SQL Editor select * from A_TEST показывает в Plan Analyzer как PLAN (ANY_PROC_NAME NATURAL) Если запустить Firebird 2.5.2.26540, то Plan Analyzer показывает план и его можно анализировать. База создается из одного и того же SQL файла. Та же ситуация и при просмотре Plan Analyzer внутри открытой на редактирование процедуры. IBExpert - последняя версия, но и старые версии ведут себя так же. Проверял на Windows 10 64-bit, Windows 7 64bit. Пожалуйста, подскажите кто виноват и что делать. (Attached FB30-25.PNG) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 16:32 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
FB2005, план процедуры - это plan natural план запроса в процедуре - это план запроса из процедуры. Раньше (в 2.5) было неправильно, теперь - правильно. Допустим, в процедуре по условию А = 0 выполняется один запрос, а по условию А = 1 - второй запрос. В плане процедуры выводилось оба плана, хотя одновременно они никогда не выполнялись . Что это дает тебе лично? В чем проблема скопировать конкретный запрос в sql editor и посмотреть его план? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 16:41 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
FB2005, в 3.0 план при обращении к ХП всегда NATURAL, планы внутренних запросов внутри ХП больше не раскрываются ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 16:42 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
Симонов Денис, собственно, выборка из процедуры по смыслу эквивалентна select * from table, где у table нет ни одного индекса (а у процедуры их и нет). В результате действительно получается plan procname natural. И никакие where, order by, group by и прочее сверху к процедуре "вовнутрь" пропихнуть невозможно (в отличие от view). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 16:50 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
на самом деле, мотивация была следующая: 1) при джойнах (особенно многоэтажных) с процедурами, их план тупо "встраивался" по месту потока процедуры, делая результат абсолютно кривым синтаксически (включая невозможность адекватного парсинга) 2) при больших процедурах план тупо обрезался, делая любой его анализ бессмысленным 3) что делать для detailed plan - каждый раз встраивать всю портянку в дерево или делать какие-то внешние ссылки или еще что-то Выкинуть эту псевдофичу к чертовой матери показалось самым очевидным решением :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 17:16 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
kdv, Спасибо за разъяснение. Предыстория: Я заметил, что в Firebird 3.0 выборка одного и того же набора данных из базы размером N происходит в три раза медленнее, чем из базы размером 2N. Удивился и полез смотреть что там с планом. А там теперь ничего нет. И как теперь опримизировать запросы? Поэтому и решил спросить здесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 17:17 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
FB2005, копировать операторы из ХП подготоваливать их смотреть планы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 17:23 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
09.07.2018 17:23, Симонов Денис пишет: > копировать операторы из ХП подготоваливать их смотреть планы. в IBExpert'е есть "отладчик" процедур. он это умеет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 17:27 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
FB2005выборка одного и того же набора данных из базы размером N происходит в три раза медленнее, чем из базы размером 2NНичего не перепутал ? :) PS всё равно - не верю, без чисел ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 17:58 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
FB2005И как теперь опримизировать запросы? В редакторе процедур на закладке "Операции / Использование индексов" все запросы процедуры списком, вместе с планами. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 18:01 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
hvlad, авторНичего не перепутал ? :) PS всё равно - не верю, без чисел Нет. Обе базы аккуратно сохранены для исследования. База размером N: Prepare time = 0ms Execute time = 1s 466ms Avg fetch time = 91.63 ms Current memory = 20,737,680 Max memory = 20,856,264 Memory buffers = 2,048 Reads from disk to cache = 913 Writes from cache to disk = 2 Fetches from cache = 2,457,747 База размером 2N: ------ Performance info ------ Prepare time = 0ms Execute time = 32ms Avg fetch time = 2.00 ms Current memory = 21,442,552 Max memory = 21,689,392 Memory buffers = 2,048 Reads from disk to cache = 615 Writes from cache to disk = 0 Fetches from cache = 18,644 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 19:32 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
Спасибо всем за подсказки по IBExpert. Попытаюсь через отладку понять откуда появились тормоза. "Треугольник будет выпит." ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 19:33 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
FB20051 Reads from disk to cache = 913 Writes from cache to disk = 2 Fetches from cache = 2,457,747 2 Reads from disk to cache = 615 Writes from cache to disk = 0 Fetches from cache = 18,644 разницу невооруженным глазом видно. Причины - где-то или не хватает индекса, или не пересчитана селективность индексов. В общем, надо смотреть планы запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 19:48 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
FB2005авторНичего не перепутал ? :) PS всё равно - не верю, без чисел НетНу, тогда всё просто - чем больше БД, тем быстрее запросы в ней Поздравляю PS 1466/32 никак не 3 PPS планы сравнивай ... |
|||
:
Нравится:
Не нравится:
|
|||
09.07.2018, 20:38 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
Продолжение истории. Используя ваши подсказки, сравнил планы, явно прописал хороший план к SELECT и получил опять быстрое извлечение данных. После этого достал сохраненную базу размером N (медленный план), посмотрел информацию о нем на закладке Operations / Index Using (спасибо user IBExpert за подсказку), добавил второй набор данных (получил базу размером 2N), отключился от сервера, открыл базу в IBExpert, перешел на закладку Operations / Index Using и увидел совершенно другой план. (План, который позволяет быстро выбирать данные.) (В пустой только что созданной базе план тоже изначально плохой.) Получается, что сервер способен со временм изменять планы, основываясь на количестве данных/других характеристиках базы ("учится")? Но в таком случае не сможет ли он случайно ухудшить изначально хороший план вызова запроса? Что скажут разработчики Firebird? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 20:25 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
FB2005Но в таком случае не сможет ли он случайно ухудшить изначально хороший план вызова запроса?Если статистика индексов полетела - может. Пересчитай статистику всех индексов (в ибэксперт есть recompute all на вкладке индексы) для нужных таблиц, убери свои планы, и должно стать оптимально. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 20:32 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
FB2005, https://www. youtube.com/watch?v=0KITHwMNDtw добавлю, что статистика по индексам не пересобирается сама. можно автоматизировать старт set statistics... на 1-2 раза в неделю, например. Но при анализе планов и прочего селективность надо пересчитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2018, 20:42 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
FB2005Получается, что сервер способен со временм изменять планы, основываясь на количестве данных/других характеристиках базы ("учится")? Но в таком случае не сможет ли он случайно ухудшить изначально хороший план вызова запроса? Что скажут разработчики Firebird? Не разработчик, но такое периодически бывает, приходится запросы подкручивать. Планы не задаю, но очень широко использую left join. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 04:03 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
11.07.2018 4:03, fraks пишет: > Планы не задаю, но очень широко использую left join. весьма сомнительный рецепт Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 11:02 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
Мимопроходящий11.07.2018 4:03, fraks пишет: > Планы не задаю, но очень широко использую left join. весьма сомнительный рецепт Если использовать INNER только там где нужен именно INNER - а в остальных случаях использовать OUTER и он там допустим - вполне нормальный рецепт. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 11:57 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
left нужен только там, где нужен именно left. left меняет не только порядок соединения но и "механизм" получения результата. ps: я сейчас стараюсь порядок соединения при помощи +0 рулить. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 12:23 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
Мимопроходящийleft нужен только там, где нужен именно left. left меняет не только порядок соединения но и "механизм" получения результата. Именно потому что left не своевольничает в применении планов - его и применяю. Может быть у меня будет не самый лучший план для всех случаев, но он будет по крайней мере стабильным. В большинстве случаев соединяется мастер-деталь, причем мастер эффективно ограничивается условиями. Мимопроходящийps: я сейчас стараюсь порядок соединения при помощи +0 рулить. +0 не рулит соединениями, он позволяет исключить использование неэффективного в данном запросе индекса. И да, это изменяет или может изменить план, но это уже следствие. Тоже иногда применяю эту фишку. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 12:40 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
fraks, Зато +0 может соединить отличным от nested loops способом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 13:16 |
|
Firebird 3.0 and plan analyzer
|
|||
---|---|---|---|
#18+
Вызов SET STATISTICS помог. Большое спасибо. Немного странно, что изначально план формировался как NATURAL, а после появления данных и обновления selectivity вдруг обнаружил индексы и перестроился без NATURAL. Надеюсь, API позволяет получить текущий используемый план для SELECT, чтобы при необходимости записать его в лог и посмотреть план, не имея доступа к самой базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2018, 19:02 |
|
|
start [/forum/topic.php?fid=40&msg=39672721&tid=1561043]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 310ms |
total: | 468ms |
0 / 0 |