Можно ли получить историю запросов сделанных в postgres

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

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


person Chiwai Chan    schedule 06.10.2009    source источник
comment
Я откатил изменение тегов, потому что это не конкретный вопрос sql.   -  person Chiwai Chan    schedule 06.10.2009


Ответы (8)


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

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

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

\timing
select 1;

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

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

Time: 1.196 ms

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

person Greg Smith    schedule 06.10.2009
comment
Если это значение (значение log_min_duration_statement) указано без единиц измерения, оно принимается как миллисекунды. - person brainLoop; 23.04.2020

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

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

person Community    schedule 06.10.2009

Вы можете использовать как

\s 

он получит всю историю команд терминала, чтобы экспортировать ее в файл, используя

\s filename
person DARK_C0D3R    schedule 18.08.2020

Если вопрос заключается в просмотре истории запросов, выполненных в командной строке. Ответ

Согласно Postgresql 9.3, попробуйте \? в командной строке, вы найдете все возможные команды в этом поиске истории,

  \s [FILE]              display history or save it to file

в командной строке попробуйте \s. Это отобразит историю запросов, которые вы выполнили в текущем сеансе. вы также можете сохранить в файл, как показано ниже.

hms=# \s /tmp/save_queries.sql
Wrote history to file ".//tmp/save_queries.sql".
hms=# 
person Allahbakash.G    schedule 17.06.2020
comment
Каким будет расположение по умолчанию, если мы не укажем полный путь? - person Chaminda Bandara; 02.06.2021

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

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

person Vincent De Smet    schedule 29.07.2016

К сведению пользователей UI Navicat:

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

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

введите описание изображения здесь

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

person JayRizzo    schedule 09.05.2017

В самой базе данных нет истории, но если вы используете инструмент управления данными DataGrip, вы можете проверить историю вашего запуска в datagrip. введите описание изображения здесь

person Hoque MD Zahidul    schedule 17.09.2020

Не ведение журнала, но если вы устраняете проблемы с медленно выполняющимися запросами в реальном времени, вы можете запросить pg_stat_activity представление, чтобы узнать, какие запросы активны, от какого пользователя / соединения они поступили, когда они были запущены и т. Д. Например ...

SELECT *
FROM pg_stat_activity
WHERE state = 'active'

См. pg_stat_activity просмотреть документы.

person Molomby    schedule 10.02.2021