我在postgres数据库中有一个功能,可以进行大量的分析;它由一系列update和insert语句组成,最终会抛出一些输出。我想知道哪些语句执行缓慢,而不查看日志文件。 (我比使用SQL更熟悉,比如perl,编写日期/时间算术查询以发现问题。)
我有一张表,activity_log:
CREATE TABLE activity_log
(
action character varying(250),
action_date date,
action_tune time without time zone
);
然后在我的函数中,在每次INSERT / UPDATE之后我写了像
这样的语句INSERT INTO activity_log (action_date, action_tune, action)
VALUES (current_date, current_timestamp, 'INSERT to base_model');
所以函数看起来像这样:
CREATE FUNCTION rebucket(pos_control character varying, absolute_max_cpc numeric, absolute_max_bucket character varying)
RETURNS integer AS
$BODY$
DECLARE qty INT;
BEGIN
INSERT INTO activity_log (action_date, action_tune, action)
VALUES (current_date, current_timestamp, 'Off we go');
-- Do something that takes 5 minutes
INSERT INTO activity_log (action_date, action_tune, action)
VALUES (current_date, current_timestamp, 'INSERT to base_model');
-- Then do something else that also takes about 5 minutes ...
INSERT INTO activity_log (action_date, action_tune, action)
VALUES (current_date, current_timestamp, 'INSERT to diagnostics');
END
$BODY$
LANGUAGE plpgsql VOLATILE
我过去在其他数据库中已经没有这个了,但是当我在Postgres中尝试这种方法(Windows 7上的9.1)时,每当我运行整个函数时,activity_log中的日期和时间就完全相同了。函数中的每个语句:在上面的例子中,
SELECT * FROM activity_log
让我
Off we go 2013-05-13 12:33:23:386
INSERT to base_model 2013-05-13 12:33:23:386
INSERT to diagnostics 2013-05-13 12:33:23:386
(该功能需要5分钟到一个小时才能运行,具体取决于我们提供的参数,并且其中有超过20种不同的语句,因此每个语句似乎不太可能在相同的1/100秒内完成。)
为什么?