2015-03-19 41 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語句,如果您沒有將其封裝在事務中,它也會掛起。