|
|
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
ТаблоидМожет, в сильно-конкурентной среде или просто когда база не влазит в кеш :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2014, 20:36 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Таблоидбудет создана таблица t(id, x) с 500 тыс записями, но физ. расположение строк в ней будет отвратительным с т.зр. навигации по ID-индексу. на самом деле это не так. Это важно когда при навигации по индексу отбирается множество записей. Если ты обираешь только первую, то фактор кластеризации должен быть пофигу, т.к прыжков не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2014, 20:52 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
ТаблоидЯ разницу как-то не ощутил. а я вот ощутил Код: plaintext 1. 2. для 1 ------ Информация о производительности ------ Время подготовки запроса = 0ms Время выполнения запроса = 2s 91ms Current memory = 147 993 352 Max memory = 166 714 048 Memory buffers = 16 384 Reads from disk to cache = 0 Writes from cache to disk = 0 Чтений из кэша = 2 029 809 для 2 ------ Информация о производительности ------ Время подготовки запроса = 0ms Время выполнения запроса = 19s 126ms Current memory = 147 996 304 Max memory = 166 714 048 Memory buffers = 16 384 Reads from disk to cache = 0 Writes from cache to disk = 0 Чтений из кэша = 2 237 706 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2014, 21:01 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоидМожет, в сильно-конкурентной средеили просто когда база не влазит в кеш :-)Дык у мну в ФБ-3 кеш 512к, я не вижу в трейсе reads>0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2014, 21:47 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
ТаблоидМожно, ес-сно. Но только если объем записей для SORT'a не очень большой. как показывают мои тесты, даже при миллионах записей PLAN ORDER получается хреновее из-за disk io вместо plan SORT. Который выдает результат за N секунд, а не сразу, но зато навсегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2014, 22:07 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2014, 22:09 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
kdvТаблоидМожно, ес-сно. Но только если объем записей для SORT'a не очень большой. как показывают мои тесты, даже при миллионах записей PLAN ORDER получается хреновее из-за disk io вместо plan SORT. Который выдает результат за N секунд, а не сразу, но зато навсегда. - - - если что, рекомендую перечитать http://ibaseforum.ru/viewtopic.php?f=4&t=4175 Да, я читал её. И перечитал только что снова :-) Там речь идёт о сравнении ORDER vs SORT для источника данных кардинальностью 14 млн строк. Такие объемы вряд ли перелопачиваются в OLTP-среде. У мну в текущих настройках для одного документа будут перелопачены 50 * 15 * 2 = 4500 строк - и это только в самом худшем случае. Длина записи таблицы (её имя: QDistr), в которой идёт это - 42 байта. Хотя, один из индексов в ней действительно с не самой лучшей селективностью, но PLAN ORDER был как раз НЕ по нему, а по другому: Код: plaintext И вот этот индекс, по которому идёт навигация, он-то как раз с хорошей селективностью. Хотя она у него такая "хорошая" за счет второго поля (там составной ключ: doc_id, snd_id). По первому полю Код: sql 1. - возвращает гадость: 0,016215913. Это похоже на пример из статьи:kdv Код: plaintext 1. Если навигация по индексу с плохой селективностью (а для составного индекса - с плохой селективностью "префикс"-полей) всегда тормозит, то сиё очень плохо. Потому что как только мы добавим в таблицу какой-нить составной индекс, оптимизатор может запросто выбрать его, в т.ч. для PLAN ORDER'a. И - "куку" :( Согласен вот с этим:автор4. для небольшого количества записей "стоимость" сортировки на диске или выборки в порядке индекса может быть одинаковой.- но увидел это в своём тесте только для 2.5. А вот для 3.0 разница оказалась очень серьёзной, в пользу PLAN SORT'a. База та у мну сохранилась, её саму и примеры я высылал dimitr'у. PS. К сож-ю, в этой статье не сказано про влияние на время сортировки значений TempCacheLimit'a и TempBlockSize (впрочем, были ли они тогда, в 1.5 ?). PPS. И еще. Полуофф (?). Зачем тут говорится про то, что "недофетчили, оттого и быстро":kdvВторой запрос, с выборкой в порядке индекса B, несмотря на мгновенность выполнения выдает только часть записей в grid, поэтому то же самое считывание страниц и их вытеснение из кэша может начаться по мере того, как пользователь будет нажимать в grid кнопку PageDn (или стрелку вниз).- ? Ведь ясно же, что такое сравнение некорректно и надо было сразу Shift-F9 жмякать :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 00:20 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
ТаблоидХотя она у него такая "хорошая" за счет второго поля (там составной ключ: doc_id, snd_id). По первому полю Код: sql 1. - возвращает гадость: 0,016215913. посегментная селективность есть в rdb$index_segments, не надо изобретать велосипед Таблоидкак только мы добавим в таблицу какой-нить составной индекс, оптимизатор может запросто выбрать его, в т.ч. для PLAN ORDER'a для INDEX-плана не выберет, времени ФБ 1.5 давно позади, а ты все поезда под откос пускаешь. А для ORDER-плана селективность вообще пофиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 09:40 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Таблоид, 1. Я запускал твой тест и там с точностью наоборот. Навигация оказалась быстрее 2. Про недофетчили. В гридах дельфей это очень частый режим. Кстати быстрее может быть не только когда недофетчили, но и когда есть ограничитель ROWS. Где то в fbdevel ДЕ рассуждал о подсказках оптимизатору. Там как раз говорилось об SORT vs ORDER. Предлагалось ввести подсказки типа [OPTIMIZE FOR {FIRST | ALL} ROWS] Так вот для OPTIMIZE FOR FIRST ROWS будет использоваться навигация по индексу, а для OPTIMIZE FOR ALL ROWS сортировка. Потом решили отложить подсказки. Сейчас когда в запросе есть FIRST/ROWS оптимизатор меняет стратегию на OPTIMIZE FOR FIRST ROWS, по умолчанию же стоит OPTIMIZE FOR ALL ROWS. Хотя пока это заметно только на запросах с JOIN. Когда же в запросе всего одна таблица, то всё равно преобладает навигация по индексу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 10:37 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Таблоид, кстати запрос Код: sql 1. эквивалентен Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 10:54 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Симонов Денис1. Я запускал твой тест и там с точностью наоборот. Навигация оказалась быстрееЧисло коннектов-молотилок + сколько ты дал времени им поработать перед тем, как сравнивать ? (и как сравнивал: просто добавил/убавил "+0" из той ХП и перекомпилил её ?) Симонов Денис2. Про недофетчили. В гридах дельфей это очень частый режим.Я знаю. Но у мну нет тут гридов :-) Есть ХП, которая, вместо возврата строк в грид, должна обработать эти строки в опр. порядке, причём обязательно все . Симонов ДенисГде то в fbdevel ДЕ рассуждал о подсказках оптимизатору.Один и тот же запрос с where f = :x будет молотить разное кол-во строк при разных :x, т.к. данные всегда могут быть перекошенными. Без гистограмм распределения значений сколько не подсказывай оптимизатору, толку большого не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 10:55 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Симонов Денис Код: sql 1. эквивалентен Код: sql 1. При наличии индекса по ID. Но второй мне как-то более понятным кажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 11:04 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
ТаблоидЧисло коннектов-молотилок + сколько ты дал времени им поработать перед тем, как сравнивать ? речь не об OLTP тесте (там я самостоятельно ничего менять не буду), а о том EB что ты здесь привёл. ТаблоидБез гистограмм распределения значений сколько не подсказывай оптимизатору, толку большого не будет. в трекере для Beta2 они есть в планах. Но не факт что это будет работать нормально с параметрами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 11:05 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Таблоид> Без гистограмм распределения значений сколько Таблоид> не подсказывай оптимизатору, толку большого не будет. С чего это вдруг? Это смотря какие хинты и как реализовать. Ты до их появления знаешь, что они будут "юажными" что ли? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 13:42 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамТаблоид> Без гистограмм распределения значений сколько Таблоид> не подсказывай оптимизатору, толку большого не будет. С чего это вдруг? Это смотря какие хинты и как реализовать.Ну так если оптимизатор будет знать распределение данных и НЕ будет составлять план параметризованного запроса заранее, до получения конкретного значения параметра, то... зачем тогда вообще хинты ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 14:53 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Таблоид, есть куча запросов с непараметризованными предикатами. Классический пример: WHERE IS_DELETED = 0 AND blah-blah-blah - тут тебе и константа и охрененный перекос в распределении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 15:27 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
dimitrесть куча запросов с непараметризованными предикатами. Классический пример: WHERE IS_DELETED = 0 AND blah-blah-blah - тут тебе и константа и охрененный перекос в распределении.я видел эти дебаты по поводу подсказок (летом в прошлом году они были ?), но что там решили в итоге - не дочитал. Искать в fb-devel'e невозможно, в почте яндекса (куда мне идёт пересыл) - тоже. Хинты - зло. Рано или поздно они устаревают ввиду изменений в данных. План должен быть другим, но не становится таковым. Даже с изменением PLAN ORDER на PLAN SORT (добавлением "+0") - возможна ситуация, когда надо будет вернуть всё взад. Я уж не говорю про всякие искуственные замены inner join'ов на left join'ы, воткнутые в авральном порядке, "чтобы сейчас хоть как-то работало, а попозже обязательно разберёмся" (ога, ну-ну...). Если будет какая-то возможность отследить (трейсом ?) запросы, идущие с хинтами, то это еще ладно, фиг с ними. Но если хинты будут проскакивать мимо всяких средств отслежки, то это бомба себе под табуретку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 16:25 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Таблоид, не в случае двух обсуждаемых типов хинтов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 17:14 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Симонов Денисне в случае двух обсуждаемых типов хинтовчто именно "не в случае" ? Думаешь, не понадобится отлов таких вариантов запросов (с ALL_ROWS | FIRST_ROWS) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 17:30 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Таблоид, я тебе про гистограммы, ты мне про хинты. Продолжаем разговаривать (с) :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 19:02 |
|
||
|
PLAN ORDER (навигация по индексу) и сохранение считанных recId в аналоге TreeSet
|
|||
|---|---|---|---|
|
#18+
Таблоидумаешь, не понадобится отлов таких вариантов запросов (с ALL_ROWS | FIRST_ROWS) ? со временем такие вещи не меняются. Если конечно DBA конкретный косяк, то отлов может потребоваться. А гистограммы даже с константами могут быть очень востребованы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2014, 20:55 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38706799&tid=1563438]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 511ms |

| 0 / 0 |
