|
|
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
hi all Дано: таблица ts(x int), 95 млн строк. FB в режиме SuperClassic'a. var-1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. var-2. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Во втором варианте ФБ должен сформировать окно и затолкать во все его строки результат count(*)over() - т.е. выполнить сначала проход по таблице, а затем по "строкам" окна. Статистику манипуляций с окном - её можно где-то увидеть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 20:05:31 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Хм. У меня под Windows вот этой строчки в статистике нет Код: plaintext Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 21:48:14 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидСтатистику манипуляций с окном - её можно где-то увидеть ? нет, нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 21:49:08 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисУ меня под Windows вот этой строчки в статистике нетДык переходи быстрее на линух, тут гораздо больше инфы выдается! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 22:35:08 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоидСтатистику манипуляций с окном - её можно где-то увидеть ?нет, нельзяЛадно. Но почему такое различие во времени ? Окно не влезло в память (TempCacheLimit ?) и он его засвопил, или причина в другом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 22:38:24 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисУ меня под Windows вот этой строчки в статистике нет Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 23:21:53 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
hvlad, раз так то не особо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 23:34:17 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидНо почему такое различие во времени ? Окно не влезло в память (TempCacheLimit ?) и он его засвопил, или причина в другом ? а как 800МБ могло влезть в TempCacheLimit? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 08:48:42 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоидНо почему такое различие во времени ? Окно не влезло в память (TempCacheLimit ?) и он его засвопил, или причина в другом ? а как 800МБ могло влезть в TempCacheLimit? :-)Что-то не взлетает каменный цветок. Вот статистика при дефолтном TempCacheLimit (у мну Super Classic, так что это будет 8М): 294" Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. А вот что происходит при TempCacheLimit = 1024M: 446" Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 12:42:58 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
А нельзя ли в статистике добавить насколько заполнен этот TempCache? Тогда было бы понятно попадают ли сортировки, хэш таблицы или материализованные таблицы в ОП или идут на диск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 12:56:01 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Для tempCacheLimit = 768M результат тот же, что для 1024М. Для 384М - около 380 сек. Есть смутное сомнение, что временные данные для over()-функций храняется вообще не в TCL, а в какой-то области, размер которой уменьшается при увеличении TCL. Ибо увеличение TCL не просто бестолку, а приводит к ухудшению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 13:19:18 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, да, это будет в статистике Таблоид, а если TempBlockSize увеличить раз в 10? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 14:30:30 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
dimitrа если TempBlockSize увеличить раз в 10?Время перестало увеличиваться при увеличении TempCacheLimit. Но и не уменьшилось, застряло на одном значении :-( var-1. Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. var-2. Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 15:23:25 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидНо и не уменьшилось, застряло на одном значении значит, так дорого обходится постоянное копирование записей в/из temp space ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 15:26:59 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
ну и конечно же не надо сравнивать с count(*), сам знаешь почему. count(x) будет честнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 15:28:54 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоидНо и не уменьшилось, застряло на одном значениизначит, так дорого обходится постоянное копирование записей в/из temp spaceмда, печалько :( На SS тоже самое, около 285 сек (при TempCacheLimit=1024m, TempBlockSize=10m). А ведь по сути, он должен делать вот это: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 15:59:32 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
я понял. ему надо более 2.3 Гб для окна, и еще для сортировки 120 Мб. Вот этот скрипт-логгер: Код: plaintext 1. 2. 3. 4. 5. 6. Код: sql 1. следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 2 dimitr: какое макс. значение TempCacheLimit понимает ФБ на 64-разрядной арх-ре ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 16:50:15 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Поставил TempCacheLimit = 2047M, логгер temp-свопа показал, ес-сно, уменьшение на почти 2 Гб: Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 16:57:55 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
В общем, макс. скорость получилась при: 1) установке TempCacheLimit = 4096M (да, он "понимает" это; fb_rec_buf & fb_sort-файлов не создаётся) 2) переназначению TempDirectories на виртуальный диск tmpfs = /dev/shm емкостью 16Гб При этом получилось: Код: plaintext 1. 2. 3. ЗЫ. Так и не понял: 1) зачем вообще в запросе count(distinct x), что с over() что без, применять сортировку, которая жрёт 120 мегов. Можно ведь просто накапливать разные значения в некоторой структуре типа hashset и выдать затем число её элементов. 2) почему увеличение TempCacheLimit с 2 до 4 Гб приводит к такому уменьшению времени, если времянки всё равно создаются в оперативной памяти, на tmpfs емкостью 16 Гб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 20:24:50 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Да, и вот еще (из серии "мотай на ус / хозяйке на заметку"). На этой таблице есть два индекса: Код: plaintext 1. 2. Решил сравнить count(distinct x)over() с эквивалентным ему dense_rank()over(order by x)+dense_rank()over(order by x desc)-1. В логе скрипта, смотрящего на появление файлов в /dev/shm, появилось вот это: Код: plaintext 1. 2. 3. 4. 5. На вторую сортировку у него ушло 5.37 гб - при том, что общий размер базы = 5.9 гб, а в таблице 100 млн int-чисел... Многовато жрёт, КМК. Затраты по времени, ес-сно, оказались хуже плинтуса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 20:50:20 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
ТаблоидМноговато жрёт, КМК там вполне сознательный и необходимый оверхед, причем он фиксирован. Посортируй 10 интов или что еще подлиннее и увидишь это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 22:37:52 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Таблоидзачем вообще в запросе count(distinct x), что с over() что без, применять сортировку, которая жрёт 120 мегов. Можно ведь просто накапливать разные значения в некоторой структуре типа hashset и выдать затем число её элементов. агрегирование хэшированием в FB пока увы нет (хотя я не уверен что здесь тот случай). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 23:12:55 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, тут вопрос в селективности X. При низкой хеш-таблица или дерево могут быть хороши. А при высокой сортировка переиграет вас в разы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 23:54:32 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
dimitr, ну так оптимизатор может ведь выбрать оптимальный вариант агрегирования, если соответствующие сведения доступны в статистике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 00:00:59 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, вот когда будет из чего выбирать - тогда и разговор пойдет. И когда статистика будет не только по индексированным полям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2014, 00:04:07 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
... а это, как его... вот установил я в конфиге ФБ параметр TempBlockSize = 200M, запустил в очередной раз при TempCacheLimit = 1024M запрос select * from (select count(distinct x)over() c from ts) rows 1 - и в другом окне мониторю объем времянок, которые создаются (в /tmp, т.е. через lsof -a +L1 /). И вижу, что размер времянок увеличивается вовсе не на 200 Мб за 1 раз, а строго на 8 М . И это одинаково как для fb_ rec_buf : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 20:14:47 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Таблоид, этот параметр на "времянки" вообще никак не влияет, это гранулярность аллокации блоков в пределах TempCacheLimit. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 20:20:09 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Сделал overall-benchmark для разных вариантов настройки TempDirectories, опции монтирования sync и размера TempCacheLimit (1, 2 и 4 Гб). Гляньте в аттач и почувствуйте разницу (я про sync -vs- async для случая TempCacheLimit = 1Gb ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 20:22:22 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
dimitrэтот параметр на "времянки" вообще никак не влияет, это гранулярность аллокации блоков в пределах TempCacheLimit.он "сверху" чем-то ограничен ? (кроме ес-сно, самого TempCacheLimit'a) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 20:23:12 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Таблоидон "сверху" чем-то ограничен ? (кроме ес-сно, самого TempCacheLimit'a) нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 20:32:58 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Тогда прошу разъяснений (на правах особо недогоняющего). Если времянки растут с шагом = 8М (неважно, почему - может, это в линухе "так заведено"), то какой смысл назначать TempCacheBlock > 8 M ? Ведь когда ему понадобится новое место в temp_space, он получит за один присест только 8 м - так или нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 20:35:32 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Таблоид, еще раз - TempBlockSize играет рояль только пока все влазит в память ФБ (т.е. не превышен TempCacheLimit). Потом он ни на что уже не влияет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 20:41:46 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
спс, теперь понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2014, 20:51:05 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Повторил замеры для сочетаний: TempBlockSize = 1 20 50 100 150 200 300 400 600 800 Mb и TempCacheLimit = 1024 2047 4096 8192 Mb Хранение времяной во всех прогонах назначалось на ram-диске (/dev/shm). И вот что теперь вижу: 1) как только времянки перестают вылазить на предел TempCacheLimit'a, так сразу скорость увеличивается на ~30% (т.е. даже если времянки должны храниться в памяти, превышение TCL ощутимо бьёт по скорости); 2) размер TempBlockSize влияет на скорость только на "малых высотах". Нежелателен размер = 1М - он выглядит явным "изгоем общества" на любом размере TempCacheLimit'a, см аттач. 2 dimitr: около года взад ты присылал патчик, который пишет в firebird.log, насколько оказалася превышен TempCacheLimit в результате того или иного стейтмента. Вывод данной статистики в трейсе и isql было бы полезнейшим нововведением последних лет. Сортировки "не по индексу" - повседневная часть работы. Равно как и заполнение GTT'шек, а в ближайшем будущем - и применение over()-функций. Все они требуют под себя область, задаваемую TempCacheLimit'ом и выход за её границы, как можно видеть по результатам замеров, очень нежелательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 13:46:25 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 13:50:59 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, как оказалось, важнее всего именно вылезание за 100% отведенной области. Даже если она "смаплена" на ram-disk: там результаты становятся похожими на работу с "обычным" диском. А будет ли она заполнена на 7% или на 97% - пофиг, это всё одинаково по скорости. Лишняя инфа, КМК, в статистике не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 13:54:45 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
ЗЫ. Если "главенствующей" арх-рой в трёшке станет SS, то нынешние дефолтные значения для TempCacheLimit & TempBlockSize стопудово станут анахронизмами в наш космический век бесплатных терабайтов. ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 13:57:18 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Таблоид, это тоже важно. Тут нужна инфа насколько заполнено временное пространство и сколько этого пространства требует конкретный оператор. При многопользовательском режиме всё может быть несколько иначе поскольку эта память будет делится между всеми сессиями (для суперклассика/супресервера) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 14:00:16 |
|
||
|
Статистика затрат на манипуляции с окнами OVER()-функций: как её увидеть ?
|
|||
|---|---|---|---|
|
#18+
Симонов Дениснужна инфа насколько заполнено временное пространство и сколько этого пространства требует конкретный оператор. При многопользовательском режиме всё может быть несколько иначе поскольку эта память будет делится между всеми сессиями (для суперклассика/супресервера)Стейтмент при своем окончании высвобождает область TempCacheLimit'a, которая ему была нужна. Если в приложении много стейтментов, которые выполняются дольше 5...10 сек, то - да, они будут пересекаться и затраты их сложатся. Но мне интересно, отчего скорость так падает, даже если времянки хранятся на ram-диске. нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2014, 14:08:10 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1563941]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
180ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 484ms |

| 0 / 0 |
