2015-03-19 47 views
0
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只会拒绝完成两次。的PostgreSQL 9.3长时间运行的查询

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 

enter image description here 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 

enter image description here https://puu.sh/gGE9n/96da69d341.png

我真的不知道从哪里旁边的确定问题是什么样子,他们似乎是空闲的,而不是等待任何东西,桌子上都没有锁,会导致它们挂起(除非我读错了)。任何帮助,将不胜感激。

+0

守护进程运行选择您提供的顶部? – 2015-03-19 12:41:43

+0

这就是pg_stat_activity.query返回的查询文本。但是,这是从Java Daemon原来的 – user1671538 2015-03-19 13:37:42

+0

哦jaaaaavaaaa ...我现在看到。我在java完成后没有终止连接。我们没有解决它 - 只是创建了一个工作来终止java,如果它完成执行,并没有退出:) – 2015-03-19 14:22:26

回答

0

想想我终于解决了这个问题。这是Java代码中的一个开始/提交。

entityManager.getTransaction().begin(); 
//perform query 
entityManager.getTransaction().commit(); 

即使查询只包含select语句,如果您没有将其封装在事务中,它也会挂起。