|
|
|
Помогите найти, на что уходит время при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Всем добрый день! Имеется: Oracle EE 12.1.0.2 на Oracle linux 86-64. RAC, 2 ноды, AMM, ASM. show sga SQL> show sga Код: plaintext 1. 2. 3. 4. 5. Раз в 5 минут выполняется запрос, время выполнения которого скачет от 3 секунд до 20 и выше. Есть зафиксированный baseline (fixed=yes, он только один такой для того sql_handle). Вот некоторая информация по выполнению, что осталась в sga: селект из gv$sql Код: plaintext 1. 2. 3. 4. 5. В gv$sql данный sql_id присутствует только с SQL_PLAN_BASELINE=SQL_PLAN_b3pxjnwkycv95efd45c5a. Здесь не самые показательные цифры по elapsed time, были варианты, где один child выполнялся 1 раз за 3 секунды, а второй - 3 раза за 60 секунд. Сейчас выдернул то, что есть сейчас. Большое кол-во invalidations, возможно, связано с регулярным ddl по объединению партиций в сканируемой таблице (делается ежечасно в периоды низкой нагрузки, итого где-то 10 раз за сутки). Кстати, как бы узнать истинную причину без догадок? Структура партиций - RANGE-HASH, хэшей 8, интервал по часу. Партиции сейчас выглядят так: партиции таблицы Код: 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. Запрос сканирует данные за последние сутки. Соответственно, под замес попадают последние интервальные партиции и 1-2 последних подневные партиции (почасовки схлопываются в последнюю дневную). В трассе никаких существенных ожиданий, кроме самого чтения, нет: обработанная трасса Код: 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. 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. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. Повторяю вопрос: как найти причину, почему при одном и том же плане, при сравнимых количествах читаемых блоков последовательные выполнения запроса требуют сильно разного времени при том, что прочих существенных ожиданий, кроме дискового чтения, не видно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 05:52 |
|
||
|
Помогите найти, на что уходит время при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Вадиман, почему бы стразу не смотреть DBMS_SQLTUNE.report_sql_monitor ? там все гораздо наглядней Ну и по кол-ву ожиданий одноблочных чтений, видно что дело не в скане секции, а в досутпе к табличкам по индексам, самый жирный вроде 12106 12106 12106 TABLE ACCESS BY INDEX ROWID CARD (cr=12106 pr=3194 pw=0 time=11300343 us cost=2 size=33 card=1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 07:18 |
|
||
|
Помогите найти, на что уходит время при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Про сканы секций я говорил потому, что это инвалидирует курсоры и, возможно, как-то влияет на скачки по времени исполнения. Вопрос не про план. План один и тот же. Плохой или хороший, но он один и тот же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 07:23 |
|
||
|
Помогите найти, на что уходит время при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Вадиман... потому, что это инвалидирует курсоры... имел в виду "ddl по секциям инвалидирует курсоры" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 07:25 |
|
||
|
Помогите найти, на что уходит время при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
ВадиманПро сканы секций я говорил потому, что это инвалидирует курсоры и, возможно, как-то влияет на скачки по времени исполнения. Вопрос не про план. План один и тот же. Плохой или хороший, но он один и тот же. авторкак найти причину, почему при одном и том же плане, при сравнимых количествах читаемых блоков последовательные выполнения запроса требуют сильно разного времени при том, что прочих существенных ожиданий, кроме дискового чтения, не видно? ну ок снимайте еще стату и сравнивайте две на отличия, логично, вроде ) причин то много может быть, зачем гадать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 07:37 |
|
||
|
Помогите найти, на что уходит время при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
DISK_READS * avg_read_time ~= ELAPSED_TIME. Не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 07:40 |
|
||
|
Помогите найти, на что уходит время при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Уже давно сделано. Еще раз: более свежая информация из gv$sql Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Попробуйте поделить elapsed, buffer_gets, disk_reads и rows на execs и сравнить между собой получившийся elapsed. А в трассах будет нечто очень похожее на уже приведенную трассу. Извините, что не вывалил десяток трасс сюда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 07:46 |
|
||
|
Помогите найти, на что уходит время при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
ElicDISK_READS * avg_read_time ~= ELAPSED_TIME. Не? avg_read_time - это надо откуда-то взять или просто сейчас измерить? Заглянул в sys.aux_stats$, там какая-то бяда :( system stats Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 07:52 |
|
||
|
Помогите найти, на что уходит время при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Вадиманavg_read_time - это надо откуда-то взять или просто сейчас измерить?V$FILESTAT ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 08:30 |
|
||
|
Помогите найти, на что уходит время при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
ElicВадиманavg_read_time - это надо откуда-то взять или просто сейчас измерить?V$FILESTAT ? Данные лежат вот здесь: gv$filestat по одному tbs Код: plaintext 1. 2. 3. Получу ли я среднее время, если readtim поделю на phyrds? По первому инстансу получается где-то 3.7ms, по второму - 5.7ms. Disk reads (8k, 9k, 15k - в среднем, допустим, 10k) * avg = 37 секунд. Много. Время хоть и скачет, но все-таки меньше. Что не так делаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 08:52 |
|
||
|
Помогите найти, на что уходит время при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
В сырой трассе вижу такие скачки: вырезка из raw trace Код: 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. Это укладывается в допустимую погрешность или так не должно быть? Сервер был почти пустой в это время (в БД активных пользовательских сессий не было) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 09:00 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39491310&tid=1885580]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
155ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 446ms |

| 0 / 0 |
