简单查询有时运行非常慢

简单查询有时运行非常慢

我有一些非常简单的查询,偶尔运行非常慢。

表viewed_sites大约有10-20行。

运行 EXPLAIN ANALYZE 的运行时间总是少于 3 毫秒。

当查询自动运行时(每 10 秒),它偶尔需要一秒钟以上的时间才能运行。

查询:

INSERT INTO ga.viewed_sites (site_id) VALUES ('gop2')

桌子:

CREATE TABLE viewed_sites (
    site_id character varying(4) NOT NULL,
    last_viewed timestamp with time zone DEFAULT now() NOT NULL
);

(偶尔的)日志结果:

2010-05-24 15:47:55 UTC LOG: duration: 1044.632 ms statement: INSERT INTO ga.viewed_sites (site_id) VALUES ('gop2')

这是一个非常模糊的问题,但是什么原因造成的呢?我想这可能是 CPU、RAM、HDD 或以上几种的组合。

Postgresql 8.3,Ubuntu 8.04

英特尔(R) Core(TM)2 双核 CPU E6750 @ 2.66GHz

2 GiB 内存

答案1

或者,表可能被锁定。在所有情况下,这似乎更有可能。Postgresql 对于锁定非常保守,但这种情况可能发生。等待 HD 写入或 CPU 一秒钟似乎极不可能。而且,插入不需要太多内存。检查表pg_locks(并pg_stat_activity查看它们在做什么),以及函数pg_lock_status(),或一些与锁定状态有关的其他表和函数。

答案2

表有外键吗?如果必须检查外键约束,则必须进行表查找。这可能会减慢速度。

http://wiki.postgresql.org有很多建议。

相关内容