|
|
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
Собственно сабж. Never again... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 19:31 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
Методом научного втыка - провести серию экспериментов и в данном окружении на данном паттерне нагрузки найти оптимальный limit :) Но лично я еще ни разу не встречал (правда, уже и давно не экспериментировал) среды, где limit >100..200 давал бы ощутимый прирост. Поэтому дефолтная 100 - вполне адекватна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 19:44 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
Поскольку я причастен к созданию этой темы , приведу пример кода, иллюстрирующий вопрос автора: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 19:50 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
SQL*PlusПоскольку я причастен к созданию этой темы , приведу пример кода, иллюстрирующий вопрос автора: Десяток экспериментов - и лимит для конкретной среды найден :) Или просто поставить 100 и не мучаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 20:08 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
SQL*Plusприведу пример кода, иллюстрирующий вопрос автора: Тогда уж вот так: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 20:14 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousДесяток экспериментов - и лимит для конкретной среды найден :)Я бы даже сказал конкретного запроса в конкретной ситуации. Есть предположение, что для запросов с результатом на темпе или прямого FTS, оптимальное начинается где-то в районе объема мультиблочного чтения деленного на размер строки. Запросы, которые думают над каждой строкой, - лучше может оказаться фетч по одной строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 20:16 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
Lecter, а по какому показателю вы хотите оптимизировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 20:24 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
LecterNever again..."Never Say Never Again" :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 20:27 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
-2-Запросы, которые думают над каждой строкой, - лучше может оказаться фетч по одной строке.И чем это может быть лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 20:28 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
-2-[quot andrey_anonymous]Запросы, которые думают над каждой строкой, - лучше может оказаться фетч по одной строке. Наоборот хуже, поскольку увеличивают LIO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 20:41 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
ТС, а оптимальный по какому критерию: времени выполнения, PGA, ещё чему-нибудь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 20:53 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
-2-Есть предположение, что для запросов с результатом на темпе или прямого FTS, оптимальное начинается где-то в районе объема мультиблочного чтения деленного на размер строки. Ну это смотря что и где. Если код не на сервере (конкретно PL/SQL - формсы те же), то bulk скорее позволяет оптимизировать сетевые передачи. Чем меньше round-trips случится между клиентом и сервером для получения набора данных - тем лучше используется сеть. Проблема всех синхронных протоколов, не только sql*net. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 21:20 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
suPPLerТС, а оптимальный по какому критерию: времени выполнения, PGA, ещё чему-нибудь? Ну начинааааитца :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 21:20 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
SQL*Plus-2-Запросы, которые думают над каждой строкой, - лучше может оказаться фетч по одной строке.И чем это может быть лучше?Копейкой памяти и процессорного времени на индексную адресацию буфера. wildwindНаоборот хуже, поскольку увеличивают LIO.А как размер фетча влияет на LIO? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 09:14 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
-2-wildwindНаоборот хуже, поскольку увеличивают LIO.А как размер фетча влияет на LIO?Конечно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 09:21 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
suPPLerТС, а оптимальный по какому критерию: времени выполнения, PGA, ещё чему-нибудь? времени выполнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 11:40 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
Я так понимаю что рекомендаций Оракл по этому поводу не дает? Типа пробуйте и вам воздастся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 11:49 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров-2-wildwindНаоборот хуже, поскольку увеличивают LIO.А как размер фетча влияет на LIO?Конечно В мемориз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 11:51 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
SQL*Plus-2-Запросы, которые думают над каждой строкой, - лучше может оказаться фетч по одной строке.И чем это может быть лучше? а имхо, тут оно уже - просто пофиг. (шутка ) на самом деле +1, хотя бы потому, что процесс извлечения данных может быть остановлен, например, прерыванием от клиентского приложения. т.е. челу надоело ждать черепашку - вжал капу cancel - инициировал соответствующий (oci или т.п.) функционал. Соответственно, точка во времени, где это можно сделать зависит от размера курсорного буфера (ну и + на стороне клиента ещё может быть аналогичная своя буферизация - влияет аналогично, тоже надо учитывать) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 12:55 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
orawish, Учитывать нужно осторожно. Ведь "обрывание" операции все же ситуация... не ради которой все делалось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 13:05 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
Lecterorawish, Учитывать нужно осторожно. Ведь "обрывание" операции все же ситуация... не ради которой все делалось :) ит, типо, депендс. :) я про случай, если цель - показать пользователю на экраньчике результат его запроса (мощностью обратно и скоростью прямо пропорционально зависящий от прямоты его же рук :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 13:19 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
LecterЯ так понимаю что рекомендаций Оракл по этому поводу не дает? Типа пробуйте и вам воздастся? Да. Выбор достаточно субъективный и ориентирован на то, чтобы сократить накладные расходы связанные в выволнением fetch, которые не зависят от числа выбираемых строк. Время выполнения запроса можно описать такой функцией: t(N) = call + row * N. Где call - накладные расходы времени на выполнение fetch. row - время выборки одной записи без учёта накладных расходов времени. Когда N′→∞, row=t′/N′. Соответственно при небольших N″ (например 1..10) call=t″ - row*N″, где t′ и t″ время измеренное экспериментально соответственно для больших (N′) и малых (N″) значений N. В идеальном случае накладных расходов нет и τ(N) = row * N. Чтобы оценить оптимальное значение N, построим график функции t(N)/τ(N) по N. С ростом N линия графика очень быстро стремится к 1. t(N)/τ(N) = (call + row * N) / row * N = call / (row * N) + 1; Так что увеличение N перестанет приносить ощутимую прибавку производительности. В добавок, на выделение памяти под большой буфер может уходить много времени, так что призводительность начнёт снижаться. Найдём N, при котором расчётная производительность будет мало отличаться (d) от идеальной. t(N)/τ(N) = 1 + d = call / (row * N) + 1; N = call / (d * row); Полагая d = 0.001 можно потестить запрос column_name из all_tab_columns таким скриптом: Код: 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. 40. 41. 42. 43. 44. 45. 46. Скрипт следует запускать несколько раз, чтобы значения стабилизировались. У меня получились такие значения: t1:283 t2:314 row:.0283 call:.0062 Opt N:219.08127208480565371024734982332155477 На другом сервере, где собственно выборка строк из БД идёт медленно, получил такой результат: t1:6987 t2:7009 row:,6987 call:,0044 Opt N:6,29740947473880062974094747388006297409 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 17:21 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
Спасибо за скрипт. Небольшие разъяснения для рискнувших использовать его: Перепишите определение курсора cr под ваш запрос. Если исполнение выпадает по ошибке деления на ноль, увеличьте p2 constant number := 50000; У меня на боевой базе оригинальный запрос на all_tab_columns вернул 400, а на большие таблицы - порядка 14000 в зависимости от использования индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 20:56 |
|
||
|
Как выбрать оптимальный размер LIMIT при FETCH ... BULK COLLECT
|
|||
|---|---|---|---|
|
#18+
Господа, а кто прокомментирует, d=0.001 что это? Насколько я понял - точность, к которой мы стремимся. Но при уменьшении значения до 0.0001 получаем увеличение лимита в 10 раз. Где правда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2017, 05:50 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=36729859&tid=1885133]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
182ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 543ms |

| 0 / 0 |
