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в.
Спасибо.
/\/\/\/\/\/\
Дата: 06.03.2015 14:27:53
Dein777,
Еще вариант:
Рассчитать функцию на каком-нибудь слейве (например, потоковой репликации), затем данные записать на мастер (например, через dblink)