2014-09-08 2 views
0

천천히 그리고 지연된 방식으로 삽입하는 데이터베이스에 문제가 있습니다. 상황에 따라 테이블에 높은 삽입이있는 mobiledata 테이블이 있습니다. 기본 키는 id (bigserial)입니다. id nextval은 sequence mobiledata_seq에 있습니다. 테이블에 삽입 된 것을 볼 때 시퀀스가 ​​누락되어있는 동안 행이 삽입됩니다. 또한 어떤 행이 10 초 후 행이 삽입됩니다. 이것은 드물게 발생하며 때로는 매력처럼 작동합니다.Postgres 느리고 지연된 삽입

예 :

Select id from missingdata order by id desc limit 100; 
 
output 
611815 
611813 
611810 
611809 
611807 
611805 
611804 
611802 
611801 
611800 
611799 
611798 
611797 
611796 
611795 
+0

일부 거래가 'nextval'의 통화를 폐기하는 것처럼 들립니다. 시퀀스 생성 열의 간격은 ** 빠진 항목이없는 ** ** 없습니다. 또한 시퀀스 _ 캐싱 _이 여기서 역할을 할 수 있습니다. –

+0

첫 번째 : postgres 로그 파일을 확인하십시오 (응용 프로그램 로그 파일이있는 경우). – joop

답변

0

에 삽입 속도가 매우 높은 경우, 서버는 디스크에 데이터를 플러시 어려움을 겪고있을 수 있습니다. 또 다른 가능성은이 테이블에 너무 많은 인덱스를 작성한 경우 삽입하는 동안 서버를 모두 업데이트해야하므로 매우 비쌀 수 있습니다. 이것에 대한

솔루션이 될 수 : 귀하는 postgresql.conf에

  • 실행 pgtune 유틸리티는 서버 설정이 합리적
  • 드롭
  • 디스크 서브 시스템을 개선이 테이블에 불필요한 인덱스가 있는지 확인하기 위해, 예
  • 이 ID를 누락으로 메모리를

를 추가 SSD 설치 - 삽입 거래의 일부는 클라이언트가 갑자기 연결을 닫는 포함, 어떤 이유로 롤백하는 경우가 발생합니다.

정상인지 아닌지는 말하기 어렵지만 - 워크 플로에 따라 다릅니다. 그러나 누락 된 ID를 회수하려고 시도해서는 안됩니다. 트랜잭션 데이터베이스에서는 단순히 가치가 없습니다.

+0

디스크로 데이터를 플러시하는 것은 SQL에서 데이터를 "보는"것과 아무 관련이 없습니다. –

+0

삽입 속도가 디스크 스트리밍 속도보다 높으면 서버가 스 래싱되어 대부분의 쿼리에 응답하는 데 어려움이 있습니다. – mvp

+0

삽입 (또는 커밋)이 성공하는 데 약간의 시간이 걸릴 수 있습니다. 그러나 커밋이 끝나면 결과는 데이터가 물리적으로 디스크에 기록되지 않은 경우에도 다른 사람들에게 표시됩니다. –

관련 문제