2014-11-14 5 views
0

임을 차단하고 내가 ALTER TABLE 내가포스트 그레스는 표가 포스트 그레스 8.3을 실행

SELECT t.relname,l.locktype,page,virtualtransaction,pid,mode,granted FROM pg_locks l, pg_stat_all_tables t WHERE l.relation=t.relid ORDER BY relation asc; 

테이블의 이름이 대리점입니다이 쿼리를 실행할 때 AccessShareLock에 의해 차단 될 것으로 보인다 ADD COLUMN 문 실행하는 데 문제가 있어요 ALTER.

relname  | locktype | page | virtualtransaction | pid |  mode   | granted 
dealer   | relation |  | 2/40    | 12719 | AccessExclusiveLock | f 
dealer   | relation |  | -1/154985751  |  | AccessShareLock  | t 

나는 또한 내가이 실행 -1/154985751

트랜잭션 ID 154985751가 pg_locks 테이블의 virtualtransaction과 유사

transaction |            gid            |   prepared   | owner |  database  
    154985751 | 131075_MS1hMzIwM2E3OmIwMjM6NTQxMGY0MzE6MWM1ZTg5OQ==_YTMyMDNhNzpiMDIzOjU0MTBmNDMxOjFjNWU4OWM= | 2014-09-19 08:01:49.650957+10 | user  | database 

반환

SELECT * FROM pg_prepared_xacts  

를 실행 데이터베이스에서 쿼리를 실행할 수있는 프로세스를 보는 명령

ps axu | grep postgres | grep -v idle 

그리고 데이터베이스에서 쿼리를 실행하는 다른 프로세스가 없음을 확인했습니다. 쿼리가 딜러 테이블에 AccessShareLock 원인이 될 수 무엇

2014-11-14 17:25:00.794 EST (pid: 12719) LOG: statement: BEGIN; 
2014-11-14 17:25:00.794 EST (pid: 12719) LOG: statement: ALTER TABLE dealer ADD bullet1 varchar; 
2014-11-14 17:25:01.795 EST (pid: 12719) LOG: process 12719 still waiting for AccessExclusiveLock on relation 2321398 of database 2321293 after 1000.133 ms 
2014-11-14 17:25:01.795 EST (pid: 12719) STATEMENT: ALTER TABLE dealer ADD bullet1 varchar; 

를 실행 한 후

로그 파일이 표시? 그것은 트랜잭션과 관련이 있다고 추측합니다 154985751 가상 ID를 사용하여 트랜잭션을 종료하는 방법이 있습니까?

+2

실제로 지원되는 최신 버전으로 업그레이드 할 계획입니다. 8.3은 * 정말로 * 오래되었습니다. –

+0

예, http://www.postgresql.org/support/versioning/. 업그레이드 계획을 세우십시오. 진지하게. –

답변

1

준비된 거래가 있습니다. 준비된 거래 - 이지만 COMMIT PREPARED 또는 ROLLBACK PREPARED이 실행되지 않은 거래는 정상적인 거래와 마찬가지로 잠금을 유지합니다.

XA 트랜잭션 관리자, JTA 등이 미리 준비한 거래를 사용할 수 있으며 앱에서 직접 처리하지 않아도됩니다. 많은 대기열 시스템에서도이 시스템을 사용합니다. 트랜잭션이 무엇인지 알지 못하고 커밋하거나 롤백하면 2 단계 커밋에 의존하는 무언가가 중단 될 수 있습니다.


당신은 당신이 당신이 할 수있는 무엇인지 알고 있다고 확신하는 경우 :

COMMIT PREPARED '131075_MS1hMzIwM2E3OmIwMjM6NTQxMGY0MzE6MWM1ZTg5OQ==_YTMyMDNhNzpiMDIzOjU0MTBmNDMxOjFjNWU4OWM=' 

또는 커밋 또는 준비 XACT를 중단할지 여부에 따라

ROLLBACK PREPARED '131075_MS1hMzIwM2E3OmIwMjM6NTQxMGY0MzE6MWM1ZTg5OQ==_YTMyMDNhNzpiMDIzOjU0MTBmNDMxOjFjNWU4OWM=' 

.

거래 내용을 확인하기 위해 거래를 조사 할 수 없으며 거래를 생성 한 앱/도구가 무엇인지 알 수 없으며 그 이유가 무엇인지 알 필요가 없습니다.


식별자가 [number]_[base64]_[base64] 그래서 우리는 그와 함께 무엇을 할 수 있는지 볼 수 있습니다 의심과 같습니다

postgres=> SELECT convert_from(decode((string_to_array('131075_MS1hMzIwM2E3OmIwMjM6NTQxMGY0MzE6MWM1ZTg5OQ==_YTMyMDNhNzpiMDIzOjU0MTBmNDMxOjFjNWU4OWM=','_'))[2], 'base64'), 'utfpostgres=> SELECT convert_from(decode((string_to_array('131075_MS1hMzIwM2E3OmIwMjM6NTQxMGY0MzE6MWM1ZTg5OQ==_YTMyMDNhNzpiMDIzOjU0MTBmNDMxOjFjNWU4OWM=','_'))[2], 'base64'), 'utf-8'); 
      convert_from   
--------------------------------- 
1-a3203a7:b023:5410f431:1c5e899 
(1 row) 

postgres=> SELECT convert_from(decode((string_to_array('131075_MS1hMzIwM2E3OmIwMjM6NTQxMGY0MzE6MWM1ZTg5OQ==_YTMyMDNhNzpiMDIzOjU0MTBmNDMxOjFjNWU4OWM=','_'))[3], 'base64'), 'utf-8'); 
     convert_from   
------------------------------- 
a3203a7:b023:5410f431:1c5e89c 
(1 row) 

이 희미하게 보이는 :

postgres=> SELECT decode((string_to_array('131075_MS1hMzIwM2E3OmIwMjM6NTQxMGY0MzE6MWM1ZTg5OQ==_YTMyMDNhNzpiMDIzOjU0MTBmNDMxOjFjNWU4OWM=','_'))[2], 'base64'); 
           decode        
------------------------------------------------------------------ 
\x312d613332303361373a623032333a35343130663433313a31633565383939 
(1 row) 

postgres=> SELECT decode((string_to_array('131075_MS1hMzIwM2E3OmIwMjM6NTQxMGY0MzE6MWM1ZTg5OQ==_YTMyMDNhNzpiMDIzOjU0MTBmNDMxOjFjNWU4OWM=','_'))[3], 'base64'); 
          decode        
-------------------------------------------------------------- 
\x613332303361373a623032333a35343130663433313a31633565383963 
(1 row) 

흠 ASCII 또는 유사한처럼 보이는 볼 수 있습니다 GUID/UUID-ish, 홀수 서식 및 그룹화.

아마도 이러한 식별자는 xact의 출처를 파악하는 데 도움이됩니다.


BTW, 8.3은 상당히 오래된 제품입니다. 업그레이드 계획을 세우십시오.