小编nor*_*ter的帖子

postgresql查询无法完成

在postgresl 9.0上我们有一个SQL查询:

SELECT count(*) FROM lane 
WHERE not exists 
    (SELECT 1 FROM id_map 
    WHERE id_map.new_id=lane.lane_id  
    and id_map.column_name='lane_id' 
    and id_map.table_name='lane') 
and lane.lane_id is not null;
Run Code Online (Sandbox Code Playgroud)

这通常需要大约1.5秒才能完成.这是解释计划:http://explain.depesz.com/s/axNN

有时虽然此查询挂起但无法完成.它甚至可以运行11个小时但没有成功.然后它占用了100%的cpu.

此查询所采用的唯一锁定是"AccessShareLock",它们都被授予.

SELECT a.datname,
         c.relname,
         l.transactionid,
         l.mode,
         l.granted,
         a.usename,
         a.current_query, 
         a.query_start,
         age(now(), a.query_start) AS "age", 
         a.procpid 
    FROM  pg_stat_activity a
     JOIN pg_locks         l ON l.pid = a.procpid
     JOIN pg_class         c ON c.oid = l.relation
    ORDER BY a.query_start;
Run Code Online (Sandbox Code Playgroud)

该查询作为使用连接池连接到数据库的java进程的一部分运行,并执行此格式的顺序类似的选择查询:

SELECT count(*) FROM {}  WHERE not exists (SELECT 1 FROM id_map WHERE id_map.new_id={}.{} and id_map.column_name='{}' …
Run Code Online (Sandbox Code Playgroud)

sql postgresql postgresql-9.0

6
推荐指数
1
解决办法
7031
查看次数

标签 统计

postgresql ×1

postgresql-9.0 ×1

sql ×1