prof

Отображение текущих SQL-запросов сервера к базе данных

Примечание

Команда выводит активные запросы PostgreSQL, выполняемые от пользователя rudesktop, с PID и временем работы. Полезна при поиске долгих запросов и анализе нагрузки

Зачем нужна

Команда — встроенный профилировщик, показывающий, что именно сервер делает с базой прямо сейчас: какие запросы выполняются, как давно, и при необходимости — план их выполнения. Это первый инструмент при подозрении на «медленный сервер»: позволяет увидеть тяжёлые/длинные SQL-запросы, не подключаясь напрямую к PostgreSQL

Типичные случаи применения:

  • веб-интерфейс «тормозит» — посмотреть, какие запросы выполняются дольше остальных

  • разбор инцидента «сервер упёрся в БД» — найти зависшие транзакции, чтобы прибить их по PID

  • оптимизация: --explain показывает план запроса, по которому можно понять, нужен ли индекс

  • регулярный снимок активности БД для анализа нагрузки в часы пик

Важно

Перед первым использованием выполните rude prof init — без этого длинные запросы будут обрезаться

Синтаксис

rude prof
rude prof --explain
rude prof init [BUFSIZE]

Параметры

Параметр

Описание

--explain

Дополнительно вывести план выполнения каждого запроса (EXPLAIN ANALYZE)

init [BUFSIZE]

Подкоманда: установить track_activity_query_size в конфиге PostgreSQL 13 и перезапустить службу. По умолчанию BUFSIZE=65535

Важно

Подкоманда init изменяет track_activity_query_size в /etc/postgresql/13/main/postgresql.conf и перезапускает PostgreSQL — без неё длинные запросы могут отображаться обрезанными. По умолчанию BUFSIZE=65535

Пример

  1. Чтобы увидеть текущие запросы к базе данных, введите следующее:

    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", ...}], ...
    
  2. Чтобы получить план выполнения запросов (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
    
  3. Чтобы инициализировать буфер для отображения полных текстов запросов (выполняется один раз):

    rude prof init
    

    Чтобы задать другой размер буфера (например, 1 МБ):

    rude prof init 1048576