是否可以获得在 postgres 中进行的查询历史记录?是否有可能获得每个查询所花费的时间?我目前正在尝试识别我正在处理的应用程序中的慢查询。
我正在使用 Postgres 8.3.5
是否可以获得在 postgres 中进行的查询历史记录?是否有可能获得每个查询所花费的时间?我目前正在尝试识别我正在处理的应用程序中的慢查询。
我正在使用 Postgres 8.3.5
数据库本身没有历史记录,如果您使用 psql,您可以使用 "\s" 在那里查看您的命令历史记录。
您可以通过在 postgresql.conf 文件中设置log_statement将未来的查询或其他类型的操作放入日志文件。您可能想要的是log_min_duration_statement,如果您将其设置为 0 ,则会在日志中记录所有查询及其持续时间。一旦您的应用程序上线,这可能会有所帮助,如果您将其设置为更高的值,您只会看到有助于优化的长时间运行的查询(您可以对在那里找到的查询运行 EXPLAIN ANALYZE 以找出它们的原因'很慢)。
在这方面要知道的另一件方便的事情是,如果您运行 psql 并告诉它“\timing”,它将显示之后的每条语句需要多长时间。因此,如果您有一个如下所示的 sql 文件:
\timing
select 1;
您可以使用正确的标志运行它,并查看每个语句与它所用的时间交错。以下是结果的方式和结果:
$ psql -ef test.sql
Timing is on.
select 1;
?column?
----------
1
(1 row)
Time: 1.196 ms
这很方便,因为您不需要成为数据库超级用户即可使用它,这与更改配置文件不同,并且如果您正在开发新代码并想要对其进行测试,它会更容易使用。
如果要识别慢查询,则方法是使用log_min_duration_statement设置(在 postgresql.conf 中或使用 ALTER DATABASE SET 设置每个数据库)。
当你记录数据时,你可以使用 grep 或一些专门的工具——比如pgFouine或我自己的分析器——它们缺少适当的文档,但尽管如此——运行得很好。
你可以使用喜欢
\s
它将获取终端的所有命令历史记录,以将其导出到文件中
\s filename
仅供使用UI Navicat的用户参考:
您必须设置您的偏好以利用文件where
来存储历史记录。
如果这是空白,你的 Navicat 将是空白的。
PS:我与 Navicat 或其附属公司没有任何关系或关联。只是想帮忙。
如果问题是查看在命令行中执行的查询的历史记录。答案是
按照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=#
pgBadger 是另一种选择 - 也在此处列出:https ://github.com/dhamaniasad/awesome-postgres#utilities
不过,需要提前进行一些额外的设置才能在 postgres 日志中捕获必要的数据,请参阅官方网站。
不记录,但如果您正在对运行缓慢的查询进行实时故障排除,您可以查询pg_stat_activity
视图以查看哪些查询处于活动状态、它们来自的用户/连接、它们何时启动等。例如...
SELECT *
FROM pg_stat_activity
WHERE state = 'active'