prof¶
Отображение текущих SQL-запросов сервера к базе данных
Примечание
Команда выводит активные запросы PostgreSQL, выполняемые от пользователя rudesktop, с PID и временем работы. Полезна при поиске долгих запросов и анализе нагрузки
Зачем нужна¶
Команда — встроенный профилировщик, показывающий, что именно сервер делает с базой прямо сейчас: какие запросы выполняются, как давно, и при необходимости — план их выполнения. Это первый инструмент при подозрении на «медленный сервер»: позволяет увидеть тяжёлые/длинные SQL-запросы, не подключаясь напрямую к PostgreSQL
Типичные случаи применения:
веб-интерфейс «тормозит» — посмотреть, какие запросы выполняются дольше остальных
разбор инцидента «сервер упёрся в БД» — найти зависшие транзакции, чтобы прибить их по PID
оптимизация:
--explainпоказывает план запроса, по которому можно понять, нужен ли индексрегулярный снимок активности БД для анализа нагрузки в часы пик
Важно
Перед первым использованием выполните rude prof init — без этого длинные запросы будут обрезаться
Синтаксис¶
rude prof
rude prof --explain
rude prof init [BUFSIZE]
Параметры¶
Параметр |
Описание |
|---|---|
--explain |
Дополнительно вывести план выполнения каждого запроса ( |
init [BUFSIZE] |
Подкоманда: установить |
Важно
Подкоманда init изменяет track_activity_query_size в /etc/postgresql/13/main/postgresql.conf и перезапускает PostgreSQL — без неё длинные запросы могут отображаться обрезанными. По умолчанию BUFSIZE=65535
Пример¶
Чтобы увидеть текущие запросы к базе данных, введите следующее:
rude profПосле выполнения команды, если в данный момент выполняются запросы, в выводе отобразятся PID, время и текст запроса:
PID: 2783750 TIME: 00:00:00.172882 UPDATE "peers_server" SET "facts" = '{"paths": [], "monitors": [{"week": 42, "year": 2014, "resolution": "1280x800", "manufacturer": "RHT", ...}], ...
Чтобы получить план выполнения запросов (
EXPLAIN ANALYZE), введите следующее:rude prof --explainПосле выполнения команды для каждого запроса дополнительно будет выведен план выполнения:
PID: 2796472 TIME: -00:00:00.001071 INSERT INTO inventory_assethistory (...) ... QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------- Insert on inventory_assethistory (cost=19.24..19.26 rows=1 width=1080) (actual time=0.102..0.102 rows=0 loops=1) ... Planning Time: 0.775 ms Execution Time: 0.210 ms
Чтобы инициализировать буфер для отображения полных текстов запросов (выполняется один раз):
rude prof initЧтобы задать другой размер буфера (например, 1 МБ):
rude prof init 1048576