|
|
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
есть чужая система в которой SQL-запросы нам НИКАК НЕ ИЗМЕНИТЬ! Можно рулить только наклеиванием хинтов (по технологии SQL-Patches) ну или индексами - на ДБА-уровне. В запросе фигурируют три теблицы и две вьюхи: --огромная таблица: select count(*) from DACODB.OS_BALANCE T1 -- --> 51.569.529 --маленикая таблица (примерно 1,6% от большой): select count(*) from CODADB.os_element -- 833.494 и пару вьюшек на её основе (просто отфильтровывают из CODADB.os_element, других таблиц в них нет!) --View T2: select count(*) from DACODB.OS_EL6_ELEMENT -- 163.339 --View T3: select count(*) from DACODB.OS_EL1_ELEMENT -- 121.489 Пока моё "руление" хинтами уменьшило время ответа с изначального варианта (без хинтов!) с 3,5 минуты на 1 минуту примерно: Код: plsql 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. 47. 48. 49. 50. 51. 52. 53. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 12:46 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
оно и понятно - все full-scan-ы оказались выигрышнее чем прыгания по индексам. Но вот что я не понимаю и не могу добиться, чтоб Оракл взял Nested Loop Join вместо Hash Join (по моему опыту это почти всегда имеет смысл, когда join-щиеся таблицы сильно не равны по величине!). Оракл хотя и переделывает план с учётом хинтов usе_nl, но NL таки не берёт, оставляя Hash-Join: Код: plsql 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. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. есть ли какие-то методы его заставить взять NL? Ещё какие-то идеи, чтобы ещё разогнать запрос?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 12:52 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, ты план показывай с +outlines или просто формат 'advanced' ставь или код вьюшек покажи - нужны внутренние алиасы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 12:53 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, ну и еще: 1. планы приводи с 'allstats last', а то статистик-то не видно 2. индексы на таблицах этих покажи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 12:56 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
xtenderDBAshnik, ты план показывай с +outlines или просто формат 'advanced' ставь или код вьюшек покажи - нужны внутренние алиасы код вьюшек?? я ж говорю, там только фильтры. Ну пожалуйста: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 13:02 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnikесть ли какие-то методы его заставить взять NL?вообще забавно - ты ставишь хинт чтобы фулсканило OS_BALANCE при этом хочешь NL - нафига? 163.339 фулсканов хочешь? :) твои же хинты не работают потому что вьюхи у тебя мерджатся и после трансформации твои хинты уже невалидны, т.к. нет никаких T2 и T3. Как простейший вариант попробуй так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 13:17 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
xtender, респектище тебе!!! Разогнал до 37 сек! Так я и чуял, что можно как-то разогнать, но не понимал как! Спасибо за науку! ( особенно за новый для меня хинт: swap_join_inputs ) Код: plsql 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. 47. 48. 49. 50. 51. 52. 53. 54. 55. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 13:54 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, попробуй еще так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. или так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 14:21 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, Про индексы ты, кстати, ничего так и не сказал, как и про статистики выполнения - нифига не понятно, откуда сколько строк по каким предикатам возвращается. Какие индексы есть на OS_BALANCE? Попробуй еще так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 14:28 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
Уважаемый xtender, 3 твоих крайних варианта выдают такие времена выполнения, соответственно: -- 33 секунды 31 секунда > 5 минут P.S. индексы все плохи ( несмотря на свежую статистику ) - прежде всего из-за низкой селективности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 16:12 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
хотя 1-й и 2-й вариант примерно одинаковы. Вот план первого: Код: plsql 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. 47. 48. 49. 50. 51. 52. 53. 54. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 16:24 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, невооруженным глазом видно что возвращается 250к, с os_balance читаеться 43 M, соответственно там должен быть индексный доступ в os_balance. Сделай правильные индексы там и будет счастье) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 16:48 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, Издревле, в первых сроках письма указывали номер версии и прочие атрибуты существенные для решения проблемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 17:05 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, Что-то вы там намудрили с параметрами, должен был бы быть iffs в первых двух вариантах. Вообще, уже бесит, что не дал всю информацию, что я просил. и до сих пор показываешь херню, а не план со статистиками... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 17:10 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
Sergey_Korolev, Что там в star_transformation_enabled ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 17:25 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
C ака xtender, это как в известной комедии: "А он не может!". Если бы мог дать требуемую информацию, то и с задачкой давно разобрался :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 17:32 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
Sergey_KorolevSergey_Korolev, Что там в star_transformation_enabled ? и каким боком она тут ?:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 17:34 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
Sergey_Korolev, ну как минимум дать список существующих индексов и показать реальный план со статистиками и аутлайнами умеют все... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 17:36 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
скорее всего, у них optimizer_index_cost_adj сильно занижен, поэтому надо пытаться с opt_param('optimizer_index_cost_adj' 100) ну и попробовать distinct-placement отключить, чтобы дважды не гоняло hash unique, т.к. подозреваю что набор (cmpcode,el1,e6) будет практически уникальным, т.е. добавить еще opt_param('_optimizer_distinct_placement' 'false') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 17:48 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
xtenderчтобы дважды не гоняло hash unique На тех объемах вряд ли это какой-то bottleneck. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 17:53 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 17:57 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
К тому же это эвристическая трансформация, а не стоимостная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 18:00 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
xtender, Вообще для той джоин кардинальности должен быть nl по индексу, тогда и этой ерунды не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 18:05 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
xtenderSergey_Korolev, ну как минимум дать список существующих индексов и показать реальный план со статистиками и аутлайнами умеют все... эээ... "сами мы не местные" .... Я даю то, что выплёвывает мне TOAD по кнопке ЕXPLAIN PLAN! Почему этот план для вас не реальный, и что мне нужно сделать, чтоб было со "статистиками и аутлайнами " я, простите великодушно, не знаю. Это из sqlplus-a как-то запускать, да? (я с ним не очень дружу, кстати). Или же ручками выполнять ЕXPLAIN PLAN и результаты сюда из соотв. таблицы доставать? Подскажите конкретно, плиз! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 18:26 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39380116&tid=1886674]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
196ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
85ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 575ms |

| 0 / 0 |
