我一直在玩解析分析,以了解我之前编写的函数的性能,基本上删除了DB中特定时间段的记录。
我注意到的特殊事情是执行时间段对于同一个函数持续大幅度变化。当我第1次调用该函数时以及当我尝试第二次或稍后执行时,它显示最高值时间不断变化,但低于第一次。 每次删除函数调用后,记录的数量都已更新并保持不变。请按以下方式查找报告:
pcwh=# explain analyze select DelWeeklyWiseRecords ('raj_weekly_records');
QUERY PLAN
------------------------------------------------------------------------------------
Result (cost=0.00..0.26 rows=1 width=0) (actual time=2.782..2.782 rows=1 loops=1)
Total runtime: 2.815 ms
(2 rows)
pcwh=# explain analyze select DelWeeklyWiseRecords ('raj_testWeek_records');
QUERY PLAN
------------------------------------------------------------------------------------
Result (cost=0.00..0.26 rows=1 width=0) (actual time=0.566..0.567 rows=1 loops=1)
Total runtime: 0.597 ms
(2 rows)
pcwh=# explain analyze select DelWeeklyWiseRecords ('raj_weekly_records');
QUERY PLAN
------------------------------------------------------------------------------------
Result (cost=0.00..0.26 rows=1 width=0) (actual time=0.246..0.246 rows=1 loops=1)
Total runtime: 0.257 ms
(2 rows)
每次记录的数量保持不变时,我都会在同一个表上重复运行analyze查询。但是我看到了不同的结果。那我该如何检查性能呢?
答案 0 :(得分:0)
您是否需要查看函数中的基础查询以检查此处的性能?由于种种原因,函数调用可以更快。
另外一个较短的时间必须是一件好事,因为你的功能正在执行被要求的任务吗?
答案 1 :(得分:0)
实际时间取决于正在运行的其他查询以及可能正在访问磁盘的其他进程,使用cpu等以及第一次可能缓存结果之后的事实。这是解释输出中实际相关的成本,因为这给出了从磁盘获取数据的成本以及基于统计,索引等运行查询的无单位概念。在您的情况下,这是(成本= 0.00) ..0.26行= 1宽度= 0)在任何情况下,都没有什么可担心的。
请注意官方文档中的这一行:"显示的最关键部分是估计的语句执行成本,这是计划者猜测运行语句需要多长时间(测量在成本单位中是任意的,但通常意味着磁盘页面提取)"在http://www.postgresql.org/docs/9.2/static/sql-explain.html