2013-02-04 2 views
6

저는 PostgreSQL 9.2와 작은 데이터베이스에 제가 작업하고있는 웹 사이트의 시드 데이터를 가지고 있습니다. PostgreSQL의 작은 테이블에서 ALTER 쿼리가 매우 느립니다.

다음 쿼리

영원히 실행하는 것 같다

ALTER TABLE diagnose_bodypart ADD description text NOT NULL; 

diagnose_bodypart 미만 10 개 행 테이블입니다. 결과가없는 쿼리가 1 분 넘게 실행되도록했습니다. 무엇이 문제 일 수 있습니까? 이 디버깅을위한 권장 사항은 무엇입니까?

+6

소리가 어떤 종류의 잠금 장치처럼 들립니다. 커밋하지 않고 테이블에 액세스하는 (또는 액세스 한) 연결이 열려 있습니까? –

+0

'pg_locks' 뷰를 보아라. –

+0

네가 맞아! 약간의 자물쇠가 있었다. 나는 그것으로 나아가고, 그들을 없애 버렸다. 추가 질문 없이도 데이터베이스 연결로 작업을 종료하고 잠금을 해제 할 수 있습니다. Craig Ringer :'pg_locks '팁에 감사드립니다. –

답변

4

DEFAULT을 지정하지 않으면 열을 추가해도 테이블을 다시 작성할 필요가 없습니다. 모든 잠금 장치가없는 빠른 작동입니다. 크레이그 (Craig)가 지적한 것처럼 pg_locks는 확인할 장소입니다.

일반적으로 가장 일반적인 원인은 장기 실행 트랜잭션입니다. 나는이 테이블에 어떤 작업 흐름이 닿아 있고 트랜잭션이 얼마나 오랫동안 열려 있는지 살펴볼 것입니다. 이 종류의 잠금은 일반적으로 트랜잭션 방식이므로 트랜잭션을 커밋하면 일반적으로 문제가 해결됩니다.

관련 문제