查找使用了哪些函数

And*_*niy 6 postgresql statistics functions postgresql-9.5

我有一个PostgreSQL包含数百个函数的旧数据库模式。我知道其中一些不再使用了,我想删除它们。

查找有时执行哪些过程而哪些不执行的最简单方法是什么?PostgreSQL 中是否有任何关于过程使用的统计数据?

使用的引擎版本为 PostgreSQL 9.5。

Erw*_*ter 9

是的,使用统计收集器。手册:

PostgreSQL 的统计收集器是一个子系统,支持收集和报告有关服务器活动的信息。[...] 它还可以计算对用户定义函数的调用以及在每个函数中花费的总时间。

[...]

该参数track_functions可以跟踪用户定义函数的使用情况。

大胆强调我的。

track_functions (enum)
Run Code Online (Sandbox Code Playgroud)

启用对函数调用计数和使用时间的跟踪。指定pl仅跟踪过程语言函数,all同时跟踪 SQL 和 C 语言函数。默认为none,禁用函数统计跟踪。只有超级用户才能更改此设置。

注意:无论此设置如何,都不会跟踪足够简单以“内联”到调用查询中的 SQL 语言函数。

所以这是默认关闭的。如果所有相关功能都是LANGUAGE plpgsql,则将其设置为plinpostgresql.confreload就足够了。无需为此设置重新启动服务器。

track_functions = pl
Run Code Online (Sandbox Code Playgroud)

重新加载pg_ctl reload。或者在典型的 Debian(相关)安装上:

sudo -u postgres pg_ctlcluster 12 main reload
Run Code Online (Sandbox Code Playgroud)

Postgres 开始收集信息。一段时间后,检查跟踪记录。不过要小心,一些重要的功能可能不会在几周内被调用。您的来电 ...

如何访问收集的统计信息?又是说明书:

启用统计信息收集后,可以通过系统视图pg_statpg_statio系列访问生成的数据。有关详细信息,请参阅第 27 章

基本上:

SELECT * FROM pg_stat_user_functions;
Run Code Online (Sandbox Code Playgroud)

或者您可以使用 pgAdmin(或其他 GUI)轻松查找它。在 pgAdmin(3 或 4)中,选择函数并查看右上角的“Statistics”选项卡:“Number of Calls”

旁白:
在 Postgres 11 之前没有真正的“存储过程”,只有函数。术语“程序”经常被用作同义词。