|
|
|
Онлайн - мониторинг ЦПУ
|
|||
|---|---|---|---|
|
#18+
Добрый день, уважаемые форумчане. Хотелось бы посоветоваться насчет вариантов реализации одной задачи. Oracle 10G. Надо ловить моменты, когда загрузка ЦПУ сервера превышает определенный порог. Если после превышения она удерживается в течение указанного тайм-аута, надо получить список сессий, наиболее сильно нагружающих ЦПУ в данный момент времени, затем в каждой такой сессии вычислить самый затратный по ЦПУ запрос. Результат оформить e-mail-ом и отослать на заданный адрес. Следить за загрузкой ЦПУ несложно - смотрим в v$sysmetric_history: Код: plsql 1. А вот с сессиями несколько интересней. Во-первых, можно извлечь инфу из v$sesstat - статистика 'CPU used by this session'. Но в этом случае, если я все правильно понял, я получу статистику по ЦПУ за все время существования сессии, а не на момент фиксации высокого уровня потребления ЦПУ. Во-вторых, имеется v$active_session_history. Там можно подсчитать, кто торчит в статусе 'On CPU'. В-третьих, есть v$sessmetric. Там получаем инфу по ЦПУ за последние 15 сек. Бурлесон для решения такой задачи использует именно этот вариант: Если сопоставлять результат с тем, что дает ASH Viewer, то наиболее похожие результаты дает вариант 3 (хотя исходники ASH Viewer показывают, что они опираются на информацию, извлекаемую из v$active_session_history в свою внутреннюю БД). Как вы думаете, какой вариант из 3-х предложенных все же будет наиболее точно соответствовать задаче? Или может есть еще другие, которые я выпустил из виду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 00:47 |
|
||
|
Онлайн - мониторинг ЦПУ
|
|||
|---|---|---|---|
|
#18+
Desert_NomadНадо ловить моменты, когда загрузка ЦПУ сервера превышает определенный порог. Если после превышения она удерживается в течение указанного тайм-аута, надо получить список сессий, наиболее сильно нагружающих ЦПУ в данный момент времени, затем в каждой такой сессии вычислить самый затратный по ЦПУ запрос.Что подразумевается под "данный момент"? ASH делает сэмплы раз в секунду, и даже если включать runtime execution statistics, то сэмплы (речь уже не про ash) будут с определенной дискретностью явно более редкой чем такты процессора. :) Если интересуют локальные пики - то смотреть максимальное число сэмплов в статусе 'On CPU' в ash за интересующий период - по-моему достаточно. Если интересуют глобально запросы прожорливые к CPU, то можно смотреть v$sql.elapsed_time, v$sql.cpu_time. C 11-й версии можно анализировать в ASH по конкретному выполнению с помощью sql_exec_id, sql_exec_start. В 10-ке этих колонок еще нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 02:20 |
|
||
|
Онлайн - мониторинг ЦПУ
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopЧто подразумевается под "данный момент"? Подразумевается интервал времени от момента обнаружения превышения порога T0 до момента времени T0+некий защитный интервал (например, 30 сек), в течение которого это превышение сохраняется - ведь спамить по каждому броску метрики ЦПУ не есть хорошо. Поковыряю сейчас вариант с ASH сэмплами, сверю результат с ASH Viewer-ом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 09:25 |
|
||
|
Онлайн - мониторинг ЦПУ
|
|||
|---|---|---|---|
|
#18+
Спасибо за идею, получилось вроде недурственно: Код: 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. И с ASH Viewer-ом бьет один-в-один, ЧТД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2017, 13:28 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39466395&tid=1885805]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
192ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 513ms |

| 0 / 0 |
