我有一个 postgres 环境,其中广泛使用存储过程,并且这些过程很复杂并调用其他存储过程。
当我查询 pg_stat_activity 表时,我得到一条显示正在调用的过程的记录,但没有给出该过程中正在调用哪些 sql 语句的指示。
例如。选择 myprocname($1,$2,$3,$4)
因此,我无法隔离可能导致性能问题的特定 SQL 语句。有问题的 RDS 是一个 amazon RDS 实例,因此操作系统级别的进程访问不可用(据我所知)。
我已经在谷歌上搜索过关于这个主题的信息,到目前为止还没有什么运气。
这个问题不是关于特定场景,因为代码是专有的,我无法直接讨论它,而是关于当我习惯使用的主要来源没有提供足够细节时如何执行此类调整。
有两种方法可以查看函数内 SQL 语句花费的时间:
Enable auto_explain https://www.postgresql.org/docs/current/auto-explain.html with auto_explain.log_nested_statements = on
。这将允许您在 PostgreSQL 日志文件中查看函数内 SQL 语句的持续时间和执行计划。
-
Enable pg_stat_statements https://www.postgresql.org/docs/current/pgstatstatements.html并设置参数pg_stat_statements.track = all
.
Then pg_stat_statements
将跟踪函数内 SQL 语句的信息。这样您就可以看到哪些语句在数据库中消耗了多少时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)