powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как сделать график активности кластера БД PostgreSQL TOP Activity в разрезе по классам ожиданий ?
Модераторы: zerot
2 сообщений из 2, страница 1 из 1
как сделать график активности кластера БД PostgreSQL TOP Activity в разрезе по классам ожиданий ?
    #40142625
zerot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
мож кому пригодится

как сделать график активности кластера БД PostgreSQL TOP Activity в разрезе по классам ожиданий ? Взять мой старый запрос года так от 2009, использовавшийся в оракловом моём продукте ОрСиМОН БЕССТ, малость изменить под поля аналогичной таблички в постгрисе, и на основании полученных данных попросить построить график какой нибудь свободный инструмент. В данном случае это Garfana
мой_TOP_Activity_grafana_20_часов_20260213_172428.png
В сделанном на основе ОрСиМОН другом моём продукте, заточенном уже на PostgreeSQL - КАМАктСоСт БЕССТ, запрос доработан, но для целей озвученной задачи хватит и старого. Графики, построенный Графаной, и построенный КАМАктСоСт'ом, сопоставимы, хотя графана не позволит пройти в глубину, проанализировать запросы, сессии, события ожидания за выбранный период времени ...
мой_TOP_Activity_КАМАктСоСт_с_начала_суток_20260213_172428.png
В качестве другого костыля в стэк инструментов там, где нельзя поставить КАМАктСоСт, подумываю использовать интересное расширение pg_profile, аналог построителя Oracle AWR отчетов. Сложность только в том, что pg_profile содержит много кода, который кто то должен проанализировать на закладки согласовать при установке в компании ...

А, ещё сам запрос построения данных. Всего 17 строчек изначально. Но, если в Oracle вы берете данные из готового хранилища статистик ASH, то в Postgres такого хранилища нет, и нужно озаботиться периодическим сохранением данных таблички pg_stat_activity, например, раз в секунду. Но это задача не сложная
Код: SQL
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.
-- ORSiMON BESST TA-query, optimized for PostgreSQL
select src2.sampling_time::timestamp sampling_time, sum(src2.wc_CPU_Active) wc_CPU_Active, sum(src2.wc_Activity) wc_Activity,
            sum(src2.wc_BufferPin) wc_BufferPin, sum(src2.wc_Client) wc_Client, sum(src2.wc_Extension) wc_Extension, sum(src2.wc_IO) wc_IO,
            sum(src2.wc_IPC) wc_IPC, sum(src2.wc_Lock) wc_Lock, sum(src2.wc_LWLock) wc_LWLock, sum(src2.wc_Timeout) wc_Timeout,
            sum(src2.wc_Other) wc_Other
            from (select src1.sampling_time,
                      CASE WHEN src1.wait_event_type = 'CPU Active' THEN src1.value ELSE 0 END wc_CPU_Active,
                      CASE WHEN src1.wait_event_type = 'Activity' THEN src1.value ELSE 0 END wc_Activity,
                      CASE WHEN src1.wait_event_type = 'BufferPin' THEN src1.value ELSE 0 END wc_BufferPin,
                      CASE WHEN src1.wait_event_type = 'Client' THEN src1.value ELSE 0 END wc_Client,
                      CASE WHEN src1.wait_event_type = 'Extension' THEN src1.value ELSE 0 END wc_Extension,
                      CASE WHEN src1.wait_event_type = 'IO' THEN src1.value ELSE 0 END wc_IO,
                      CASE WHEN src1.wait_event_type = 'IPC' THEN src1.value ELSE 0 END wc_IPC,
                      CASE WHEN src1.wait_event_type = 'Lock' THEN src1.value ELSE 0 END wc_Lock,
                      CASE WHEN src1.wait_event_type = 'LWLock' THEN src1.value ELSE 0 END wc_LWLock,
                      CASE WHEN src1.wait_event_type = 'Timeout' THEN src1.value ELSE 0 END wc_Timeout,
                      CASE WHEN src1.wait_event_type NOT IN ('CPU Active','Activity','BufferPin','Client','Extension','IO','IPC','Lock','LWLock','Timeout')
                                                THEN src1.value ELSE 0 END wc_Other
                      from (select ash.sampling_time sampling_time,
                                                CASE WHEN ash.wait_event_type IS NULL THEN 'CPU Active' ELSE ash.wait_event_type END wait_event_type,
                                                CASE WHEN round(sum(ash.value)/60,4) IS NULL THEN 0 ELSE round(sum(ash.value)/60,4) END value
                                                from (select date_trunc('minute', sampling_time) sampling_time, wait_event_type, count(*) value
                                                                          from bestat_sa_history
                                                                         where sampling_time >= (now() - interval '20 hour') AND sampling_time <= now()
                                                                         group by date_trunc('minute', sampling_time), wait_event_type) ash
                                                                         group by ash.sampling_time, ash.wait_event_type) src1 ) src2
                     group by src2.sampling_time
                     order by src2.sampling_time asc
...
zerot:
Пользователь запросил модераторские права на тему.
Изменено: Вчера, 21:15 - zerot
Рейтинг: 0 / 0
Горбатый ёж:
Пользователь назначен модератором темы: zerot.
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как сделать график активности кластера БД PostgreSQL TOP Activity в разрезе по классам ожиданий ?
Модераторы: zerot
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]