|
|
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
ora601DBAshnik, https://oracle-base.com/articles/9i/dbms_xplan#gather_plan_statistics_hint Cпасибо! Ну как смог так вытянул, не судите строго: :-) Код: 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. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 20:00 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, 2. индексы на таблицах этих покажи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 22:44 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, Пришли результат Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2017, 23:07 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, ну наконец-то, сразу многое стало понятным: Код: 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. А вот с query rewrite можно очень хорошо оптимизнуть, думаю до 1-2 секунд: 1. надо заменить запрос с помощью query rewrite на: 1.1 если есть табличка со всеми CMPCODE (можешь глянуть есть ли внешний ключ у OS_BALANCE с CMPCODE и на какую таблицу он смотрит): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 1.2 Если нет такой таблицы, то использовать OS_EL1_ELEMENT как ведущую: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 2. Нужен хоть какой-нибудь индекс на OS_BALANCE, в котором CMPCODE стоит первым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2017, 03:13 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
xtender! Я не люблю цитировать самого себя, но 6 января 17 (16:12) я уже говорил, что: автор"индексы все плохи ( несмотря на свежую статистику ) - прежде всего из-за низкой селективности. "(c) авторА вот с query rewrite можно очень хорошо оптимизнуть, думаю до 1-2 секунд: до 2х это вряд-ли, так как твой лучший вариант уже даёт 0.33 Sek примерно! :-) Но на будущее "query rewrite" - это очень интересная опция! Правда для меня (как и других дбшников тут) это абсолютно пока на практике незнакомая штука. И даже не ясно имеем ли мы на право её юзать. Вообще-то у нас EE и в заметках там "еxtra cost option" не замечен, но с этим лицензированием фич вечно такая неразбериха! ( https://docs.oracle.com/cd/E11882_01/license.112/e47877/editions.htm#DBLIC116 ) автор(можешь глянуть есть ли внешний ключ у OS_BALANCE нету такого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 16:26 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik твой лучший вариант уже даёт 0.33 Sek примерно! :-) упс. Сорри! Это я чё-то не проснулся ещё после праздников то! (и спутал с другим SQL-запросом) ;-) 33 Sek конечно же!!! ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 16:34 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
xtender ! твой крайний вариант "with os_cmpcodes as (select distinct EL1_CMPCODE as cmpcode from OS_EL1_ELEMENT)" летает вообще! Выполняется за одну секунду - нереально круто!!! Но разве мне не нужно иметь mv чтобы юзать rewrite query? (сорри, ещё не вчитался как-следует в мат.часть) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 17:14 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, можно юзать dbms_translation framework ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 19:05 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
ora601DBAshnik, можно юзать dbms_translation framework cпасибо! Буду изучать! Поскольку с query rewrite я вообще не понимаю, как пока это сделать! Пока что понял, что как-то так: Код: sql 1. Но думаю, что без создания mv-шек тут не обойтись. (что нам в чужой базе вообще вряд-ли позволят....) :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 19:33 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnikora601DBAshnik, можно юзать dbms_translation framework cпасибо! Буду изучать! Поскольку с query rewrite я вообще не понимаю, как пока это сделать! Пока что понял, что как-то так: Код: sql 1. Но думаю, что без создания mv-шек тут не обойтись. (что нам в чужой базе вообще вряд-ли позволят....) :-( Только мне кажется я немного поторопился с ним, потому что у Вас явно что то ниже 12 с R1 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 19:40 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
ora601DBAshnik, можно юзать dbms_translation framework у нас кстати нет такого пакета! Может он в Оракл только в 12с? ( у нас то везде 11g и в этом году 12с ещё не будет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 19:43 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
да, похоже только с 12с: https://blogs.oracle.com/imc/entry/sql_translation_framework ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 19:48 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, вот готовый пример: 15903763 Но боюсь вам придется отказаться от cursor_sharing=force для этого запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2017, 20:13 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
xtenderDBAshnik, вот готовый пример: 15903763 Но боюсь вам придется отказаться от cursor_sharing=force для этого запроса в смысле "для этого запроса"? Для всего инстанца этот параметр (в v$parameter) изменить? (ну это нам, конечно, никто не позволит!!!) А что там с query rewrite? (там без MVs вообще никак? или есть варианты?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 12:39 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, это переписывание запроса, мв там не причем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:13 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
ora601DBAshnik, это переписывание запроса, мв там не причем. xtender написал: автор1. надо заменить запрос с помощью query rewrite на: Опа! Ну и как это делается без м.в.???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 13:35 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
вот тут есть вроде про DBMS_ADVANCED_REWRITE и cursor_sharing= https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3696883368520#56945400346165461 а что если его только на уровне сессии пересаживать на: Код: sql 1. ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 14:21 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
решил тут поиграться (на тестовой дб) таки с QUERY REWRITE + mv (вдруг нам её таки разрешат юзать!) создал базовую вьюху: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. когда делаю запрос 1 в 1 один с базовым, всё летает (и, разумеется, expain plan показывает, что MV юзается!) авторselect distinct T1.CMPCODE c1, T1.EL1 c2, T2.EL6_CODE c3, T3.EL1_SNAME c4 from DACODB.OS_BALANCE T1, DACODB.OS_EL6_ELEMENT T2, DACODB.OS_EL1_ELEMENT T3 where T1.CMPCODE=T2.EL6_CMPCODE and T1.EL6=T2.EL6_CODE and T1.CMPCODE=T3.EL1_CMPCODE and T1.EL1=T3.EL1_CODE но стоит добавить предикат, который всего-то должен только отфильтровывать что-то из базы - как MV уже не доступна (и это видно в explain plan !) distinct T1.CMPCODE c1, T1.EL1 c2, T2.EL6_CODE c3, T3.EL1_SNAME c4 from DACODB.OS_BALANCE T1, DACODB.OS_EL6_ELEMENT T2, DACODB.OS_EL1_ELEMENT T3 where T1.CMPCODE=T2.EL6_CMPCODE and T1.EL6=T2.EL6_CODE and T1.CMPCODE=T3.EL1_CMPCODE and T1.EL1=T3.EL1_CODE and T1.EL3<>'0200' даже хинт не помог: Код: sql 1. глупый Оракл не втыкает, что можно взять mv! Или это я глупый и что-то не знаю ещё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 20:28 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnikora601DBAshnik, это переписывание запроса, мв там не причем. xtender написал: автор1. надо заменить запрос с помощью query rewrite на: Опа! Ну и как это делается без м.в.????я же даже ссылку привёл... Не надо никаких mv. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2017, 20:42 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
xtender я же даже ссылку привёл... Не надо никаких mv. xtender, cпасибо большое. Я ссылку учёл. Но ты же сам писал: авторНо боюсь вам придется отказаться от cursor_sharing=force для этого запроса cкорее всего нам не позволят изменить cursor_sharing даже на уровне сессии! А вот что позволят юзать не очень большие(!) MVs - на это больше шансов! Да и нам хотелось бы овладеть этой технологией, не только для решения данной проблемы, но и подобных ей в будущем (на разных _чужих_! системах!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 19:49 |
|
||
|
задачка оптимизации производительности для продвинутых :-)
|
|||
|---|---|---|---|
|
#18+
DBAshnik, попробуйте создать sql_patch для этого запроса с хинтом cursor_sharing_exact: https://blogs.oracle.com/optimizer/entry/how_can_i_hint_a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2017, 19:53 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39380180&tid=1886674]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 494ms |

| 0 / 0 |
