Можно ли получить историю запросов, сделанных в postgres? - PullRequest
52 голосов
/ 06 октября 2009

Можно ли получить историю запросов, сделанных в postgres? и можно ли получить время, затрачиваемое на каждый запрос? В настоящее время я пытаюсь определить медленные запросы в приложении, над которым я работаю.

Я использую Postgres 8.3.5

Ответы [ 4 ]

64 голосов
/ 06 октября 2009

В самой базе данных нет истории, если вы используете psql, вы можете использовать "\ s", чтобы просмотреть там историю ваших команд.

Вы можете получать будущие запросы или другие типы операций в файлы журнала, установив log_statement в файле postgresql.conf. Вместо этого вы, вероятно, захотите: log_min_duration_statement , который, если вы установите его в 0, будет регистрировать все запросы и их продолжительность в журналах. Это может быть полезно после запуска ваших приложений, если вы установите для этого значения более высокое значение, вы увидите только длительные запросы, которые могут быть полезны для оптимизации (вы можете запустить EXPLAIN ANALYZE для запросов, которые вы там найдете, чтобы выяснить, почему медленно).

Еще одна полезная вещь, которую нужно знать в этой области, это то, что если вы запустите psql и скажете ему «\ хронометраж», он покажет, сколько времени занимает каждое утверждение после этого. Так что если у вас есть файл sql, который выглядит так:

\timing
select 1;

Вы можете запустить его с правильными флагами и увидеть, как каждое утверждение чередуется с тем, сколько времени это заняло. Вот как и как выглядит результат:

$ psql -ef test.sql 
Timing is on.
select 1;
 ?column? 
----------
        1
(1 row)

Time: 1.196 ms

Это удобно, потому что вам не нужно быть суперпользователем базы данных, чтобы использовать его, в отличие от изменения файла конфигурации, и его проще использовать, если вы разрабатываете новый код и хотите его протестировать.

3 голосов
/ 06 октября 2009

Если вы хотите идентифицировать медленные запросы, тогда метод должен использовать настройку log_min_duration_statement (в postgresql.conf или установить для каждой базы данных с помощью ALTER DATABASE SET).

Когда вы регистрируете данные, вы можете использовать grep или некоторые специализированные инструменты, такие как pgFouine или мой собственный анализатор , в котором отсутствуют надлежащие документы, но, несмотря на это, он работает довольно хорошо. .

0 голосов
/ 10 мая 2017

FYI для тех, кто использует UI Navicat :

Вы ДОЛЖНЫ установить свои предпочтения для использования файла как where для хранения истории.

Если это поле пустое, ваш Navicat будет пустым.

enter image description here

PS: Я не имею никакого отношения к Navicat или его филиалам или связан с ними. Просто хочу помочь.

0 голосов
/ 29 июля 2016

pgBadger - это еще один вариант, который также указан здесь: https://github.com/dhamaniasad/awesome-postgres#utilities

Требуется некоторая дополнительная настройка заранее для сбора необходимых данных в журналах postgres, хотя, смотрите официальный сайт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...