运行很长时间的简单查询

时间:2015-12-09 16:11:10

标签: postgresql

我有一个运行PostgreSQL 9.3的Amazon RDS实例,它运行在会话池模式下运行的pgbouncer 14.2实例,为运行在nginx之上的PHP Codeigniter应用程序提供服务。

在过去几周内,似乎数据库连接缓慢累积,直到达到最大连接数,并且无法对数据库运行查询,迫使我们重新启动pgbouncer(从而中止连接)。

在查看pgbouncer和nginx的日志以及RDS监控之后,我决定检查数据库,发现一些查询运行了几个小时没有明显的原因。

目前,我有一个非常简单的查询,运行时间超过4小时:

SELECT json_cache 
FROM cache 
WHERE id='27325' 
AND passengers_id = '26817'`  

表格如下:

CREATE TABLE public.cache 
(
id bigserial NOT NULL DEFAULT nextval('cache_id_seq'::regclass),
passengers_id int8 NOT NULL,
created_on timestamptz NOT NULL DEFAULT 'now()',
json_cache text(2147483647),
isr_xml text(2147483647),
passengers_route_history_id int8,
CONSTRAINT pk_cache PRIMARY KEY (id)
);

CREATE INDEX pk_cache ON cache (id);  

这是EXPLAIN ANALYZE输出:

Index Scan using pk_cache on cache
(cost=0.29..8.31 rows=1 width=724) (actual time=0.033..0.036 rows=1 loops=1)
Index Cond: (id = 27325)
Filter: (passengers_id = 26817)
Total runtime: 0.074 ms
(4 rows)

这个表有一些不到30k的行,查询很简单,所以我无法弄清楚它为什么花了这么长时间。

它也不是唯一需要这么长时间的查询,现在还有两个简单的查询运行了几个小时,根据pg_stat_activity中的信息,它们似乎都没有等待锁定。

这是我第一次询问有关DB的相关问题而我实际上并不十分熟悉PostgreSQL,所以如果有任何我遗漏的信息(请给我们提供信息)让我知道。

0 个答案:

没有答案