powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
69 сообщений из 69, показаны все 3 страниц
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39609866
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня провели вебинар по теме
Firebird 3.0 - оптимизатор и расширенные планы запросов
Этим вебинаром открываем серию вебинаров о новых возможностях Firebird 3.
Задавайте вопросы по вебинару, предложения по будущим темам, и т.д.

Ответы на вопросы по вебинару будут выпущены как отдельное видео в ближайшее время.

YouTube Video
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39610568
Фотография Alexey Kovyazin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Записывайтесь на следующий вебинар:
YouTube Video
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39610569
Фотография Alexey Kovyazin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Записывайтесь на следующий вебинар:
"Архитектура Firebird 3: SuperServer, Classic и Embedded"
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612079
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я в замешательстве от предпоследнего слайда.

Допустим, у меня таблица Docs с 5.000.000 записями, и мне надо загрузить 500 докуметов с известными ключами.

Я просто делаю select * from Docs where DocId in (123,124,145,148, ... )
И всё моментально грузится.

Если последовать совету и переписать на where DocId+0 in (...)
станет всё очень медленно и печально.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612091
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все дело в цене вопроса, явно 500 обращений к индексу дешевле 5 лямов натурала, но если есть еще отсечки, например, по дате, а ИД документа ПК, то может оказаться уже дешевле одно обращение к индексу по дате и дальше уже перебор по ИДам, чем 500 раз поддернуть индекс, а чтобы оптимизатор не хватал индекс по ПК его только +0 и можно отсеять.

Опять таки, если у тебя так много известных ИДов, то можно очень легко натолкнуться на ограничение по длине запроса. Сдается мне дешевле будет ИДы влить в ГТТ табличку и сджойниться с ней, чем писать ин.

а если не 500, скажем 5000?
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612097
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,
извиняюсь за занудство, а разве с пятьюстами значениями в списке in () - не глюкнет?
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612105
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahЯ просто делаю select * from Docs where DocId in (123,124,145,148, ... )
И всё моментально грузится.
видимо, потому что индекс по docid уникальный, и там идет 500 поисков на одно значение (что хорошо видно в explain plan).
В основном field in (...) используют с неуникальными индексами, о чём я и говорил. Там еще есть нюанс, про поиск последовательных и непоследовательных значений. Расскажу отдельно.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612106
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДа разве с пятьюстами значениями в списке in () - не глюкнет?
допустимо до 1500 значений, плюс раньше было ограничение по размеру текста запроса в 64к.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612129
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvчччДа разве с пятьюстами значениями в списке in () - не глюкнет?
допустимо до 1500 значений, плюс раньше было ограничение по размеру текста запроса в 64к.
Точно, до 1500.
А у меня почему-то ограничение в генераторах запросов - не более 255 элементов в списках in(), уж не помню, почему так...
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612243
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvВ основном field in (...) используют с неуникальными индексами, о чём я и говорил
Спасибо, теперь стало понятнее.
Также это, возможно, объясняет явление, что join по primary key намного быстрее, чем по другому индексированному полю таблицы.

Я никак не мог этого понять, думал, что в обоих случаях используется одинаковый поиск по ключу в индексе.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612244
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_PisarevskyОпять таки, если у тебя так много известных ИДов, то можно очень легко натолкнуться на ограничение по длине запроса. а если не 500, скажем 5000?
разбиваю на блоки по 500

Ivan_PisarevskyСдается мне дешевле будет ИДы влить в ГТТ табличку и сджойниться с ней, чем писать ин.
тут проблема будет передать 500 инсертов, это очень медленно.
всё никак не дождусь, когда сделают bulk insert
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612248
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unah,

уже сделали в 4.0. Но новым API надо ещё уметь пользоваться
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612315
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unah> явление, что join по primary key намного быстрее, чем по другому индексированному полю таблицы.

Ась? Это откуда ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612334
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahЯ в замешательстве от предпоследнего слайда.

Допустим, у меня таблица Docs с 5.000.000 записями, и мне надо загрузить 500 докуметов с известными ключами.

Я просто делаю select * from Docs where DocId in (123,124,145,148, ... )
И всё моментально грузится.

Если последовать совету и переписать на where DocId+0 in (...)
станет всё очень медленно и печально.

Я тебе один умный вещь скажу, только ты не обижайся пожалуйста (С). За всю мою почти 25-летнюю практику с SQL количество случаев, когда действительно требовался километровый IN в запросе равно... нулю. Этот позыв к IN всегда был следствием попытки заменить естественные условия фильтрации. Например, получить документы с 5-го по 20-е число, со статусом "неоплачено". Или условие на сджойненнной таблице, скажем, город контрагента - Мухосранск. Эти примеры - примитивизация, разумеется, но суть - отсутствие желания проработать интерфейс и стремление замкнуться на построчное мышетыканье пользователем.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612336
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahЯ никак не мог этого понять, думал, что в обоих случаях используется одинаковый поиск по ключу в индексе.
гм. поиск по индексу всегда одинаковый. Только индексы могут быть разные - один допускает повторы значений (неуникальный), а другой - не допускает (уникальный).
Соответственно, при поиске на равенство из неуникального индекса может быть извлечено несколько ключей, а из уникального - один.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612350
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahтут проблема будет передать 500 инсертов, это очень медленно.Клиент же каким-то образом раздобыл себе списки ключей, сдается мне, что он вычитал оные с сервера, а не придумал сам.

Откуда берутся эти списки ИДов?

Старый плюшевый мишкастремление замкнуться на построчное мышетыканье пользователем.Есть у меня одно такое место, где ну никак без такого посточного натыкивания, несмотря на разлапистый фильтр. Я по рабочекрестьянски сразу пишу кажный "тык" в обычную табличку, никаких проблем с отпаданием клиента(по любым причинам, от отвалился ВПН до уборщицы со шваброй), перезапустил АРМ все "тыки" на месте. И мне потом мороки меньше: джойню штатными средствами без квадратноколесных лисапетов.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612378
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky> Есть у меня одно такое место, где ну никак без такого пост Р очного
Ivan_Pisarevsky> натыкивания, несмотря на разлапистый фильтр.

Такое у всех есть. Но их никак не 500. Даже не 100.
Пару десятков наберётся, от силы, и те - у местных
сумасшедших, которые программу лучше тебя знают.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612534
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустамunah> явление, что join по primary key намного быстрее, чем по другому индексированному полю таблицы.

Ась? Это откуда ?

Из жизни.
Вот пример:
Код: sql
1.
2.
3.
create table Shops (ShopId int not null primary key, Address varchar(256));
create table Orders (OrderId int not null primary key, ShopId int not null, OrderNum varchar(64));
alter table Order add constraint FK_Order_ref_Shop foreign key (ShopId) references Shops (ShopId);


заливаем 700 записей в Shops, и 5.000.000 в Orders.
Теперь сравниваем скорость
Код: sql
1.
select * from Shops s join Orders o on o.ShopId=s.ShopId+0


и
Код: sql
1.
select * from Orders o join Shops s on s.ShopId=o.ShopId+0
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612545
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unah,

во-первых твои утверждения не верны. Подробней читай здесь http://www.ibase.ru/dataaccesspaths/

Во-вторых сравнивать надо

Код: sql
1.
select count(*) from Shops s join Orders o on o.ShopId=s.ShopId+0


vs
Код: sql
1.
select count(*) from Orders o join Shops s on s.ShopId=o.ShopId+0


чтобы быть уверенным в извлечении всех записей.

Ну и ради интереса сравни с
Код: sql
1.
select count(*) from Orders o join Shops s on s.ShopId+0=o.ShopId+0
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612552
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисВо-вторых сравнивать надо
Код: sql
1.
select count(*)


это понятно, что всё надо фетчить.

сейчас сравнил все варианты на тестовом сервере.

join по primary key - быстрее

PLAN JOIN (O NATURAL, S INDEX (PK_SHOPS))

------ Performance info ------
Prepare time = 15ms
Execute time = 16s 224ms
Avg fetch time = 16 224,00 ms
Current memory = 147 808 712
Max memory = 800 120 680
Memory buffers = 2 048
Reads from disk to cache = 75 685
Writes from cache to disk = 17
Fetches from cache = 0

чем так

PLAN JOIN (S NATURAL, O INDEX (FK_ORDER_REF_SHOP))

------ Performance info ------
Prepare time = 16ms
Execute time = 19s 640ms
Avg fetch time = 19 640,00 ms
Current memory = 147 734 296
Max memory = 800 120 680
Memory buffers = 2 048
Reads from disk to cache = 1 672 411
Writes from cache to disk = 28
Fetches from cache = 0

И внимание на кол-во страниц, это очень важно. Под нагрузкой время будет отличаться намного сильнее.

Хеш-join вне конкуренции (новость тройки? я его как-то упустил из виду)

PLAN HASH (O NATURAL, S NATURAL)

------ Performance info ------
Prepare time = 0ms
Execute time = 6s 615ms
Avg fetch time = 6 615,00 ms
Current memory = 147 732 704
Max memory = 800 120 680
Memory buffers = 2 048
Reads from disk to cache = 75 433
Writes from cache to disk = 8
Fetches from cache = 0
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612560
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_PisarevskyКлиент же каким-то образом раздобыл себе списки ключей, сдается мне, что он вычитал оные с сервера, а не придумал сам.

Откуда берутся эти списки ИДов?
Разные случаи.

Самое простое - загрузка (или любая другая операция) с большим списком сущностей, по которой юзер хочет видеть прогресс.
Тогда первый запрос select Id from ... join ....
узнаём, сколько всего будет строк в результате, а потом выполняем операцию (грузим на клиент) пачками по 100-1000.

Особенно актуально, если клиент подключен не БД, а к серверу приложений по HTTP и на каждый запрос у клиента лимит по времени и размеру пакета.


Был ещё вариант использования FB как тупое key-value хранилище.

Применялось ручное управление кешированием в сервере приложений.
Все join-ы делаются в памяти, а строки грузятся по списку Id, только те, которых ещё нет в памяти инстанса. Сильно экономит кол-во чтений из БД.

И напоследок. Отношения многие-ко-многим.
Мастер-сущность в таблице с 30 млн. записей, Detail - 3 млн. записей и линков между ними - более 300 млн (отдельная таблица со ссылками на master и detail для каждой связи, всё по лучшим практикам).
И вот как раз join к таблице links стал захлёбываться (потому что не по unique index?).

Последователи чистой реляционной теории могут плеваться, но факт есть факт.
После переноса links в таблицу master тупо в строковое поле varchar(3000) id-шники через запятую, и чтением details по списку Id (where DetailId in (121,122,123,...)) нагрузка настолько уменьшилась, что система была спасена.

Старый плюшевый мишкаЯ тебе один умный вещь скажу, только ты не обижайся пожалуйста (С)У вас опыт слишком ограничен, а мне обижаться? ;)
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612575
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unah,

не надо выдавать свой частный случай распределения данных в таблицах за решения для всех. Я тебе могу привести примеры где всё с точностью наоборот. Ну и буфер Memory buffers = 2 048 для троечного SS это просто смех. Увеличивать надо минимум в 10 раз.

unahХеш-join вне конкуренции (новость тройки? я его как-то упустил из виду)

У тебя Shops мизерная, а Orders большая. Здесь хеш-join то что доктор прописал. HASH JOIN заменил MERGE JOIN в 3.0
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612586
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисНу и буфер Memory buffers = 2 048 для троечного SS это просто смех.
Проверил на другом сервере

PLAN JOIN (O NATURAL, S INDEX (PK_SHOPS))
Memory buffers = 4 194 304
Reads from disk to cache = 120


PLAN JOIN (S NATURAL, O INDEX (FK_ORDER_REF_SHOP))
Memory buffers = 4 194 304
Reads from disk to cache = 914


Похоже это не бага с огромным кол-вом чтений при таких join-ах.
Просто надо buffers поднимать ))) Кто-ж знал )))
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612587
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unah,

сравнивать разные планы запросов и делать из этого выводы о быстродействии поиска по индексу - это, скажем мягко, не умно...
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612591
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

у меня было хорошо воспроизводимое наблюдение:

- если добавлять в запрос join-ы по primary key, никаких проблем можно не ждать

- есть добавлять в запрос join-ы по другим индексам, может резко вырасти кол-во чтений страниц, и такими join-ами надо всё 100 раз проверить.

Хорошо, что в этой теме более-менее разобрали причину.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612596
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahPLAN JOIN (O NATURAL, S INDEX (PK_SHOPS))

PLAN JOIN (S NATURAL, O INDEX (FK_ORDER_REF_SHOP))



Хоспиди, да при чём тут ПК-не ПК... Азбука, порядок объединения таблиц. Ясен пень перебор большей с подтягиванием элементов меньшей будет тормозней, какой индекс ни используй. Вот почему оптимизатор тройки из-за простой перестановки позиций таблиц и полей в запросе, без волшебной палочки +0, меняет порядок перебора - для меня загадка. Никогда у нас такого не было и вот оно опять?
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612597
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Старый плюшевый мишкаХоспиди, да при чём тут ПК-не ПК... Азбука, порядок объединения таблиц. Ясен пень перебор большей с подтягиванием элементов меньшей будет тормозней, какой индекс ни используй.
Результат видели? Перебор большей с подтягиванием элементов меньшей получился быстрее ;)
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612598
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
unahСтарый плюшевый мишкаХоспиди, да при чём тут ПК-не ПК... Азбука, порядок объединения таблиц. Ясен пень перебор большей с подтягиванием элементов меньшей будет тормозней, какой индекс ни используй.
Результат видели? Перебор большей с подтягиванием элементов меньшей получился быстрее ;)
Я так понимаю, причина в том, что страницы большой таблицы сервер читает последовательно, а маленькая умещается в кешах.

Если ходить по маленькой и присоединять большую, записи большой таблицы будут подтягиваться рандомно из разных страниц, страницы придётся перечитывать.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612601
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahИ напоследок. Отношения многие-ко-многим.
Мастер-сущность в таблице с 30 млн. записей, Detail - 3 млн. записей и линков между ними - более 300 млн (отдельная таблица со ссылками на master и detail для каждой связи, всё по лучшим практикам).
И вот как раз join к таблице links стал захлёбываться (потому что не по unique index?).Какая глубина индекса по большой таблице?

unahПросто надо buffers поднимать ))) Кто-ж знал )))Теперь же знаешь, вот и поднимай. :)
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612602
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahСтарый плюшевый мишкаХоспиди, да при чём тут ПК-не ПК... Азбука, порядок объединения таблиц. Ясен пень перебор большей с подтягиванием элементов меньшей будет тормозней, какой индекс ни используй.
Результат видели? Перебор большей с подтягиванием элементов меньшей получился быстрее ;)

Упс, упустил момент когда вы count ввели в запрос. Это уже другая история. Это раз. Два - упустил из виду второй азбучный случай. Такой эффект возможен если индекс под FK просто дико плохой для конкретного запроса. Крайний случай - 90% записей в Orders имеют один Shops_ID и отбираются записи именно с ним. В таком случае его надо глушить волшебной палкой, без него будет лучше. А если отбираются остатние 10, то индекс будет просто замечательным. Или в индексе вообще 2-3 равномерно распределённых значения. Тогда его надо глушить просто всегда. И, если предметная область позволяет в смысле конкурентности, то есть, в мастер-таблице не бывает удалений, вообще заменить FK на Check.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612607
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_PisarevskyКакая глубина индекса по большой таблице?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    Index FK_LINKS_REF_RECSET (1) 
	Depth: 3, leaf buckets: 127682, nodes: 338547294 
	Average data length: 0.10, total dup: 305812566, max dup: 216 
	Fill distribution: 
	     0 - 19% = 6 
	    20 - 39% = 2 
	    40 - 59% = 2743 
	    60 - 79% = 2 
	    80 - 99% = 124929 
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612611
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahСамое простое - загрузка (или любая другая операция) с большим списком сущностей, по которой юзер хочет видеть прогресс.
Тогда первый запрос select Id from ... join ....
узнаём, сколько всего будет строк в результате, а потом выполняем операцию (грузим на клиент) пачками по 100-1000.Мои в этом плане отучены уже требовать прогресс бар. дрессировка, однако. Прогресс бары зло, на них ресурсов надо почти как на само действо. Как правило такая долгоиграющая хрень запускается в отдельном треде(да еще и с обращением к вспомогательному серверу), как отработало, выводит месседж "забирай, милок, свою XML-ку на обычном месте". Работающему в фоне процессу прогресс бар как корове седло.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612612
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в мастер-таблице не бывает удалений, вообще заменить FK на Check.
что именно проверять надо?
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612614
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unah
Код: plaintext
1.
Depth: 3

навскидку криминала не заметно, если интересно лучше создать отдельный топик и перетереть, с примерами, планами, статистикой.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612616
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_PisarevskyМои в этом плане отучены уже требовать прогресс бар. дрессировка, однако. Прогресс бары зло, на них ресурсов надо почти как на само действо
Ну вот ещё причина. Допустим, сервер приложений не умеет делать read-only транзакции, а выборка 8000 объектов (с кучей подгрузок из других таблиц) занимает 10 минут.

В этом случае, быстро получаем список Id документов в одной короткой транзакции (без деталей).
И потом делаем небольшие транзакции, на пару секунд, по 20 документов в пачке.

300 транзакций по 2 секунды лучше, чем одна 10-минутная?
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612618
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevskyнавскидку криминала не заметно, если интересно лучше создать отдельный топик и перетереть, с примерами, планами, статистикой.
Сейчас не важно. Понятно, что buffers сильно не хватало.
Было это на FB 2.5 CS, текущий FB 3.0 SS может и справился бы, если увеличить buffers.
Но всё равно, новая денормализованная схема будет быстрее любых join-ов.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612632
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevskyнавскидку криминала не заметно

Я не знаю как страницы распределяются по глубине, но у меня впечатление, что в кэш не
влезли даже первых два уровня.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612634
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаВот почему оптимизатор тройки из-за простой перестановки позиций таблиц и полей в запросе, без волшебной палочки +0, меняет порядок перебора - для меня загадка. Никогда у нас такого не было и вот оно опять?Это где это ? В этой теме я вижу только разные запросы с разными хинтами +0
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612635
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahFetches from cache = 0Серьёзно ? Откуда это ???
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612637
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahв мастер-таблице не бывает удалений, вообще заменить FK на Check.
что именно проверять надо?

Наличие записи в Sklad при вставке в Order и при изменении в ордере склада.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612638
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovв кэш не влезли даже первых два уровня.Про кэш выше уже обсудили.
unah300 транзакций по 2 секунды лучше, чем одна 10-минутная?Смотря где и смотря для чего. Для отчетов я выбрал одну транзакцию. Я не ограничен по времени, у меня под рукой сервер на репликации, надо мне чтоб он час рубал запрос - будет час рубать запрос. Такие долгоиграющие сборы запускают только по закрытому периоду, поэтому транзакция рид коммитед, административно не ожидается изменений.
unahНо всё равно, новая денормализованная схема будет быстрее любых join-ов.Очень оптимистичное и неоднозначное заявление.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612640
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladСтарый плюшевый мишкаВот почему оптимизатор тройки из-за простой перестановки позиций таблиц и полей в запросе, без волшебной палочки +0, меняет порядок перебора - для меня загадка. Никогда у нас такого не было и вот оно опять?Это где это ? В этой теме я вижу только разные запросы с разными хинтами +0

Исходные запросы. Я зевнул когда добавили count-ы и хинты (и взгрустнул по гистораммам)
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612643
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

гистрограммы джойнам не помогут
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612644
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladunahFetches from cache = 0Серьёзно ? Откуда это ???
Похоже, IBExpert перестал показывать.
В mon-таблицах всё честно:
Код: sql
1.
select io.MON$PAGE_FETCHES from MON$IO_STATS io join MON$TRANSACTIONS tr on tr.MON$STAT_ID=io.MON$STAT_ID where tr.MON$TRANSACTION_ID=current_transaction


2511127
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612647
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Старый плюшевый мишкаНаличие записи в Sklad при вставке в Order и при изменении в ордере склада.
Я думал, какой check constraint предлагаете...
Видимо, подразумевалось заменить foreign key на index.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612649
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаhvladСтарый плюшевый мишкаВот почему оптимизатор тройки из-за простой перестановки позиций таблиц и полей в запросе, без волшебной палочки +0, меняет порядок перебора - для меня загадка. Никогда у нас такого не было и вот оно опять?Это где это ? В этой теме я вижу только разные запросы с разными хинтами +0
Исходные запросы. Я зевнул когда добавили count-ы и хинты (и взгрустнул по гистораммам)Если это 21245947 исходные запросы, то хинты там уже были :)
Ну что - ложная тревога ? :)
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612650
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahПохоже, IBExpert перестал показывать.Если так, то нужно сообщить Александру
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612666
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladunahПохоже, IBExpert перестал показывать.Если так, то нужно сообщить Александру

Я потестил немного... Проблема не в IBExpert.

Берём gds32.dll от FB 2.6, кладём в IBExpert - fetches показывает (естественно, на FB 2.5, к 3.0 не коннектится).

Но любая 32-битная fbclient.dll от тройки (начиная с беты до последнего снепшота 3.0.4) или четвёрки (4.0.0.918) приводит к тому, что fetches=0, что при подключении к FB3, что к FB2.5

Версия IBExpert любая - 2015, 2017, 2018

Как бы эти fetches и не нужны вовсе. Убрать их, чтобы не смущали.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612668
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
unahот FB 2.6
от 2.5.6
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612669
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unah,

я те уберу
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612670
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисunah,

я те уберу Ну, то есть ты ими так активно пользовался, что не заметил, как они пару лет назад отвалились :)
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612671
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unah,

у меня не отвалились. Хотя иногда тоже бывало 0 в fetch замечал, но это исключение. Когда происходит так и не понял
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612672
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unah,

чушь какая-то.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612673
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пашу надо. Он поймает :)
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612700
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисСтарый плюшевый мишка,

гистрограммы джойнам не помогут

Взаправди? С чего бы это? Нет, есть варианты с параметризованными в самом интересном месте препарированными запросами, когда да, непонятно подо что оптимизировать. А в целом - вполне. Если не иметь в виду текущую конкретную реализацию , к которой их прикручивать бессмысленно.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612701
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladСтарый плюшевый мишкапропущено...

Исходные запросы. Я зевнул когда добавили count-ы и хинты (и взгрустнул по гистораммам)Если это 21245947 исходные запросы, то хинты там уже были :)
Ну что - ложная тревога ? :)

Таки да. Посыпаю главу пеплом. Даже не знаю почему не увидел. Трезв как стекло :(
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39612702
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahСтарый плюшевый мишкаНаличие записи в Sklad при вставке в Order и при изменении в ордере склада.
Я думал, какой check constraint предлагаете...
Видимо, подразумевалось заменить foreign key на index.

Подразумевалось ликвидировать заведомо вредный индекс. Кстати, с таким и на ресторе хорошо отдохнёшь.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39627721
unah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денися те уберу
Да, удалять только Fetches недостаточно.

Там, оказывается, врёт не только Fetches, но как минимум и "Writes from cache to disk".
Иногда показывает много writes в select, но мусора точно нет - база после sweep и никто в ней не работает.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39627837
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unahТам, оказывается, врёт не только Fetches, но как минимум и "Writes from cache to disk".
Иногда показывает много writes в select, но мусора точно нет - база после sweep и никто в ней не работает.Не приходило в голову, что не оно врёт - а ты чего-то не понимаешь ?
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39628458
optimiz94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
unah,

У тебя случайно не HQBird?

У нас HQBird ENGINE_VERSION=3.0.3.
Запрос, не читающий страницы из файла БД (хотя, может я что-то не знаю)

Код: sql
1.
select count(*) from MON$ATTACHMENTS



показывает в IBExpert статистику:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Plan
PLAN (MON$ATTACHMENTS NATURAL)

------ Performance info ------
Prepare time = 0ms
Execute time = 546ms
Avg fetch time = 546,00 ms
Current memory = 0
Max memory = 0
Memory buffers = 8 338 608
Reads from disk to cache = 119
Writes from cache to disk = 789
Fetches from cache = 0

На Firebird 3.0.0 у таких запросов Reads/Writes нули, а в Current/Max memory - не нули.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39628489
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
optimiz94,

в isql глянь и сравни
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39628506
optimiz94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39628530
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
optimiz94,

отсюда вывод, либо c Fetches косячит 32-разрядный fbclient (я так понимаю isql и fb у тебя x64), либо сам IBE
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39628533
optimiz94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

А ненулевые Reads/Writes на таком запросе как объяснить?
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39628547
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
optimiz94,

это нормально. Эти счётчики общие для всех коннектов в SS
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39628552
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
optimiz94А ненулевые Reads/Writes на таком запросе как объяснить?

Посмотрев в MON$STATS.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39628568
optimiz94
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисoptimiz94,

это нормально. Эти счётчики общие для всех коннектов в SS

Очень контринтуитивно. Где-нибудь это документировано?

В фоне выполняется множество всяких запросов.
Я, как пользователь, ожидаю, что статистика будет показана только по моему запросу, а не общая по серверу.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39628585
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
optimiz94,

мне это тоже не нравится, но так было с самого начала изобретения SS. В статистике отображаются счётчики кэша, а для SS он общий.
Информация по конкретному запросу можно найти либо в MON$ либо в трассировке.

По поводу глюка. Походу Current memory переполняет 32-битную переменную (не знаю где), возможно это косвенно влияет и на показания других счётчиков которые тоже нулями становятся.
...
Рейтинг: 0 / 0
Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
    #39628615
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
optimiz94Очень контринтуитивно. Где-нибудь это документировано?
еще с InterBase 4.2, когда появился суперсервер.
...
Рейтинг: 0 / 0
69 сообщений из 69, показаны все 3 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вебинар: Firebird 3.0 - оптимизатор и расширенные планы запросов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]