isHighLoad функция

Dein777
Дата: 06.03.2015 13:51:26
Добрый день,

Хотелось бы услышать рекомендации и best practise по следующему вопросу.

Есть небольшая базка на 9.2.6. под террабайт.

База является мониторинговой в которую стекаются статусы различных устройств. Есть аналитические и предрасчётные функции которые необходимо запускать на систематической основе и считать агрегаты сырых данных.

Для того чтобы не загружать мониторинговую базу функциями расчётов были предприняты следующию шаги: выделение интервалов расчётов. Анализ текущей загрузки сервера и запуск расчётов только в случае не загруженности сервера (отдельный вопрос что под ней понимать).

Соответственно просьба помочь с функцией и идеями по её реализации типа isHighLoad - которая предположим возвращает smallint от 0..7 где 0 - нулевая загрузка 7 - полная загрузка сервера.

В зависимости от значения загрузки сервера принимается стратегия по частоте запуска расчётно-аналитических функций.


Возможные варианты:
1. Смотреть в pg_stat_activity и в зависимости от наличия autovacuum процесса который работает более например 5 минут - выставляем приоритет.

2. Смотрим на статистику ibloat.

3. Заводим табличку аля bgwriter_hist - в которой сливаем данные из pg_stat_bgwriter и смотрим например на количество checkpoint_req или buffers_clean вернее на разницу snapshotoв.

Спасибо.
Alexius
Дата: 06.03.2015 14:23:33
Dein777,

лучше наверное будет смотреть дисковую утилизацию в iostat и la. а всякие длинные расчеты запускать с пониженным приоритетом ionice/renice.
/\/\/\/\/\/\
Дата: 06.03.2015 14:27:53
Dein777,

Еще вариант:
Рассчитать функцию на каком-нибудь слейве (например, потоковой репликации), затем данные записать на мастер (например, через dblink)
Dein777
Дата: 06.03.2015 15:50:09
2Alexius код можете прислать???? Вообщето для запуска iotop нужен sudo, которого нет.
Ы
Дата: 06.03.2015 16:36:21
Dein777,

man batch
batch executes commands when system load levels permit; in other words, when the load average drops below 0.8