【发布时间】:2015-03-19 12:11:33
【问题描述】:
select vesseltrav0_.id as id1_0_, vesseltrav0_.created as created2_0_, vesseltrav0_.lastUpdated as lastUpda3_0_, vesseltrav0_.geoFenceId as geoFence4_0_,
vesseltrav0_.geoFenceName as geoFence5_0_, vesseltrav0_.mmsi as mmsi6_0_, vesseltrav0_.position as position7_0_, vesseltrav0_.timestamp as timestam8_0_,
vesseltrav0_.vesselEnteredTime as vesselEn9_0_, vesseltrav0_.vesselExitTime as vesselE10_0_, vesseltrav0_.vesselId as vesselI11_0_
from VESSEL_ENTERED_GEOFENCE vesseltrav0_ where vesseltrav0_.geoFenceId=$1 and vesseltrav0_.vesselId=$2
我有一个守护进程将记录记录到数据库并定期更新它们,但似乎每小时一两次,这个看起来很无辜的 SQL 会拒绝完成。
CREATE TABLE public.vessel_entered_geofence
(
id bigint NOT NULL,
geofenceid character varying(36),
geofencename character varying(128),
mmsi character varying(32),
vesselenteredtime timestamp without time zone,
vesselexittime timestamp without time zone,
vesselid character varying(36),
created timestamp without time zone,
lastupdated timestamp without time zone,
"position" geometry(Point,4326),
"timestamp" timestamp without time zone,
CONSTRAINT vessel_entered_geofence_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
CREATE INDEX vessel_entered_geofence_idx
ON public.vessel_entered_geofence
USING btree
(mmsi COLLATE pg_catalog."default");
CREATE INDEX vessel_entered_geofence_gid_idx
ON public.vessel_entered_geofence
USING btree
(geofenceid COLLATE pg_catalog."default");
CREATE INDEX vessel_entered_geofence_vid_idx
ON public.vessel_entered_geofence
USING btree
(vesselid COLLATE pg_catalog."default");
当我在 SQL 上运行解释计划时,它正在使用索引并且手动运行 SQL 会很快返回答案。所有连接都处于空闲状态(编辑:它们都是“事务中的空闲”)并且它们不等待任何东西(根据 pg_stats_activity)。
select * from pg_stat_activity order by backend_start
http://i.stack.imgur.com/0pp8X.png
select a.*, b.relname from pg_locks a left outer join pg_class b on a.relation = b.oid
https://puu.sh/gGE9n/96da69d341.png
我不确定下一步该去哪里确定问题所在,它们似乎处于空闲状态,没有等待任何东西,而且桌子上没有任何锁会导致它们挂起(除非我正在阅读错了)。任何帮助将不胜感激。
【问题讨论】:
-
守护进程正在运行选择您在顶部提供的选项?..
-
这是 pg_stat_activity.query 返回的查询文本。但是是的,这最初是从 Java 守护进程调用的
-
哦 jaaaaaavaaaa... 我现在明白了。我和java一样,完成后没有终止连接。我们没有解决它 - 只是创建了一个作业来终止 java,如果它完成执行并且没有退出:)
标签: sql postgresql locking database-administration