Найти в Дзене
Закреплено автором
Postgres DBA
Статистический анализ производительности СУБД PostgreSQL
7 месяцев назад
Postgres DBA
PG_EXPECTO: Чек-лист проверки инфраструктуры Linux по результатам нагрузочного тестирования PostgreSQL(OLTP)
1 месяц назад
Postgres DBA
Преодоление ограничений корреляционного анализа: исследование причинности по Гренджеру для диагностики производительности СУБД PostgreSQL.
1 день назад
Граничные условия и пороговые значения для интерпретации коэффициентов корреляции
При анализе производительности PostgreSQL с использованием коэффициента корреляции между vm_dirty и показателями vmstat руководствуйтесь следующими критериями: Прежде чем интерпретировать силу корреляции, убедитесь в её статистической значимости: Используйте шкалу Чеддока для коэффициента корреляции Пирсона (r): Для следующих пар даже умеренная корреляция (|r| > 0.5) при p-value < 0.05 является тревожным сигналом: (Представлена...
1 час назад
Расчёт статистической значимости коэффициента корреляции в PostgreSQL
Для проверки статистической значимости коэффициента корреляции между vm_dirty и показателями vmstat в PostgreSQL можно использовать следующие методы: WITH correlation_data AS ( SELECT -- Рассчитываем коэффициент корреляции Пирсона CORR(vm_dirty_value, vmstat_value) AS pearson_r, -- Количество наблюдений COUNT(*) AS n, -- Рассчитываем t-статистику CORR(vm_dirty_value, vmstat_value) * SQRT((COUNT(*) - 2) / (1 - POWER(CORR(vm_dirty_value, vmstat_value), 2))) AS t_stat FROM monitoring_data WHERE vm_dirty_value IS NOT NULL...
1 час назад
Преодоление ограничений корреляционного анализа: исследование причинности по Гренджеру для диагностики производительности СУБД PostgreSQL.
Исследовать и реализовать методику применения причинности по Гренджеру для статистического анализа производительности СУБД PostgreSQL с применением комплекса PG_EXPECTO. Глоссарий терминов | Postgres DBA | Дзен GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL Анализ производительности современных СУБД, таких как PostgreSQL, часто упирается в сложную задачу интерпретации множества взаимосвязанных метрик. Традиционные методы, основанные...
1 день назад
Анализ эффективности и применимости корреляции метрик shared_buffers PostgreSQL и vmstat.
Совместный анализ метрик буферного кэша PostgreSQL (shared_buffers) и системной статистики (vmstat) позволяет выявлять взаимосвязи между работой СУБД и использованием ресурсов ОС. Это помогает находить узкие места в производительности, такие как нехватка оперативной памяти или перегрузка дисковой подсистемы. Глоссарий терминов | Postgres DBA | Дзен GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL Формула: Hit Ratio = (buffers_hit) / (buffers_hit + buffers_read) * 100%...
2 дня назад
Анализ корреляции между параметрами vm.dirty и метриками vmstat.
Производительность СУБД, особенно такой мощной, как PostgreSQL, напрямую зависит от тонкой настройки не только самой базы данных, но и операционной системы. Глоссарий терминов | Postgres DBA | Дзен GitHub - Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL Ключевые из них: Для анализа I/O наиболее релевантны метрики: Анализ взаимосвязи между настройками vm.dirty* и показателями vmstat является эффективным методом диагностики проблем, связанных с отложенной записью на диск...
2 дня назад
Оптимизация PostgreSQL на Linux: ключевые параметры
Производительность PostgreSQL — это не магия, а результат грамотной настройки множества взаимосвязанных компонентов: от ядра операционной системы до внутренних параметров СУБД. Данный материал представляет собой сжатое, практико-ориентированное руководство, которое систематизирует ключевые настройки для Linux и PostgreSQL. Опираясь на результаты нагрузочного тестирования, мы выделим оптимальные значения для типовой конфигурации сервера и объясним, как они влияют на работу под различными типами нагрузок — OLTP и OLAP...
2 дня назад
Промпты для анализа отчетов pgpro_pwr с помощью DeepSeek
Проанализируй отчет pgprp_pwr, подготовь сводный анализ по производительности СУБД. Состав отчета: **Общее состояние производительности и ожиданий СУБД в анализируемый период** **Критические паттерны производительности и ожиданий СУБД в анализируемый период** **Рекомендации по оптимизации производительности СУБД и снижению ожиданий СУБД** **Проблемные SQL запросы** **Общие паттерны SQL запросов и их влияние на производительность СУБД и ожидания СУБД** **Рекомендации по оптимизации проблемных запросов** **Итог и выводы по анализируемому периоду** Для формирования отчета используй списки вместо таблиц...
3 дня назад
PG_EXPECTO: Метрика «Взвешенная корреляция ожиданий» для приоритизации проблем производительности PostgreSQL.
В мире администрирования PostgreSQL данные об ожиданиях (wait events) являются ключевым источником диагностики производительности. Однако отдельные метрики без аналитической обработки создают лишь информационный шум, не отвечая на главный вопрос: какой тип ожиданий действительно определяет общую нагрузку на систему? Метод «Взвешенной корреляции ожиданий (ВКО)», реализованный в комплексе PG_EXPECTO, основан на серьёзной теоретической базе. Он сочетает корреляционный анализ для оценки силы связи между типом ожиданий и общей нагрузкой с взвешиванием по значимости, учитывающим долю каждого типа...
3 дня назад
-- scenario3.sql -- 6.0 -- OLTP -- UPDATE CREATE OR REPLACE FUNCTION scenario3() RETURNS integer AS $$ DECLARE  min_i bigint ;  max_i bigint ;  current_aid bigint ;  current_delta bigint ;  counter integer; BEGIN   -- Атомарный выбор и блокировка одной строки с пропуском заблокированных   -- Используем LIMIT 1 и FOR UPDATE SKIP LOCKED для выбора одной доступной строки min_i = 1 ; SELECT MAX(aid) INTO max_i FROM pgbench_accounts ; FOR counter IN 1..10 LOOP -- Генерация случайного сдвига current_delta := (ROUND(RANDOM())::BIGINT) * 10 + 1; current_aid = floor(random() * (max_i - min_i + 1)) + min_i ; SELECT aid INTO current_aid FROM pgbench_accounts WHERE aid = current_aid FOR UPDATE SKIP LOCKED; -- Если строка найдена — обновляем её IF current_aid IS NOT NULL THEN UPDATE pgbench_accounts SET abalance = abalance + current_delta WHERE aid = current_aid; END IF; END LOOP;  return 0 ; END $$ LANGUAGE plpgsql;
5 дней назад
-- scenario3.sql -- 6.0 -- OLAP -- UPDATE CREATE OR REPLACE FUNCTION scenario3() RETURNS integer AS $$ DECLARE  min_i bigint ;  max_i bigint ;  current_aid bigint ;  current_delta bigint ; BEGIN -- Генерация случайного сдвига   current_delta := (ROUND(RANDOM())::BIGINT) * 10 + 1;   -- Атомарный выбор и блокировка одной строки с пропуском заблокированных   -- Используем LIMIT 1 и FOR UPDATE SKIP LOCKED для выбора одной доступной строки min_i = 1 ; SELECT MAX(aid) INTO max_i FROM pgbench_accounts ; current_aid = floor(random() * (max_i - min_i + 1)) + min_i ;   SELECT aid INTO current_aid   FROM pgbench_accounts   WHERE aid = current_aid   FOR UPDATE SKIP LOCKED;   -- Если строка найдена — обновляем её   IF current_aid IS NOT NULL THEN    UPDATE pgbench_accounts    SET abalance = abalance + current_delta    WHERE aid = current_aid;   END IF;  return 0 ; END $$ LANGUAGE plpgsql;
5 дней назад
-- scenario2.sql -- 6.0 -- OLTP -- INSERT CREATE OR REPLACE FUNCTION scenario2() RETURNS integer AS $$ DECLARE  min_i bigint ;  max_i_aid bigint ;  max_i_tid bigint ;  max_i_bid bigint ;  current_aid bigint ;  current_tid bigint ;  current_bid bigint ;  counter integer ; BEGIN min_i = 1 ; SELECT MAX(aid) INTO max_i_aid FROM pgbench_accounts ; SELECT MAX(tid) INTO max_i_tid FROM pgbench_tellers ; SELECT MAX(bid) INTO max_i_bid FROM pgbench_branches ; FOR counter IN 1..10 LOOP current_aid = floor(random() * (max_i_aid - min_i + 1)) + min_i ; current_tid = floor(random() * (max_i_tid - min_i + 1)) + min_i ; current_bid = floor(random() * (max_i_bid - min_i + 1)) + min_i ; INSERT INTO pgbench_history ( tid, bid, aid, delta, mtime , filler , random_fill ) VALUES ( current_tid , current_bid , current_aid , random() * 1000.0 , CURRENT_TIMESTAMP , '1234567890123456789000', random() * 1000.0 ); END LOOP ;  return 0 ; END $$ LANGUAGE plpgsql;
5 дней назад