2012-03-23 3 views
1

PostgreSQL 데이터베이스에 1 백만 레코드를 삽입해야하지만 임의의 지점에서 삽입이 중지되는 테스트 응용 프로그램을 개발하고 있습니다. 삽입 프로세스를 다시 시작하려고하면 응용 프로그램이 테이블을 더 많은 레코드로 채 웁니다. 필자는 데이터베이스의 크기가 약 4GB이지만 데이터베이스가이 값에 근접하지 않는다고 확신합니다.Postgresql 삽입이 임의의 수의 레코드에서 멈춤

그래서 삽입을 중지 한 이유는 무엇입니까?

한 번 170872 레코드에 한 번, 25730 레코드에 다른 시간에 한 번 발생했습니다.

나는 어리석게 들릴지 모르지만 나는 왜 그것이 삽입을 멈추는 지에 대한 다른 이유를 찾을 수 없다.

미리 감사드립니다.

그냥 빨리 UPDATE :

는 사실 문제는 여기에 PostgreSQL을위한 공식 수치이며, 데이터베이스 캡되지 않습니다 :

- Maximum Database Size     Unlimited 
- Maximum Table Size     32 TB 
- Maximum Row Size      1.6 TB 
- Maximum Field Size     1 GB 
- Maximum Rows per Table    Unlimited 
- Maximum Columns per Table    250 - 1600 depending on column types 
- Maximum Indexes per Table    Unlimited 

업데이트 :

오류에 로그 파일 :

2012-03-26 12:30:12 EEST WARNING : 진행중인 거래가 없습니다.

그래서이 문제에 맞는 답을 찾고 있습니다. 당신이 어떤 힌트라도 줄 수 있다면 나는 매우 감사 할 것입니다.

+0

무엇을 말하지 않습니까? –

+2

데이터베이스에 단일 호출 시간 초과가 있습니까? 커밋하지 않고 통화하는 데 걸리는 시간이 더 걸리면 통화가 중지됩니다 (데이터베이스가 완전히 중단되는 것을 방지하기 위해). 우리에게 도움이 될만한 다른 오류가 있습니까? – jzworkman

+0

단일 통화의 시간 제한은 무엇인지 모르겠지만 귀하가 의미하는 바를 이해하고 있다고 생각합니다. 코드를 수정하고 다시 실행합니다. 내가 대답 할 때까지는 어느 정도 시간이 걸릴 수 있습니다. –

답변

0

필자의 삽입 명령에서 문제점이 무엇인지 알았지 만, 재미 있지는 않다고 생각했지만 결코 잘못 될 수는 없다고 생각했던 것 중 하나입니다.

내 응용 프로그램은 장고에서 개발되었으며 단순히 테이블에 삽입 작업을 수행하는 파일을 호출하는 명령이 있습니다.

명령 라인 단말기에서 I는 물품 즉 : I가 삽입 실행하는 데 걸리는 시간을 표시 할 때문에

time python manage.py populate_sql 

I는 time 명령을 사용하는 이유이다. 문제는 여기에있었습니다. 그 time 명령은 오류를 발행, Out of memory 오류로 인해 데이터베이스에 삽입이 중단되었습니다. --verbose 옵션을 사용하여 명령을 실행하는 동안이 작은 코드를 발견했습니다.이 옵션을 사용하면 명령의 모든 세부 사항을 볼 수 있습니다.

나는 그 (것)들에게서 배운 것을 당신이 저를 도우려고 노력하는 동안 당신의 대답에 대해 모두에게 감사하고 싶습니다.

편집 :

당신이 데이터베이스 작업을 많이하게하는 장고 응용 프로그램이있는 경우에, 당신에게 내 조언은 'DEBUG'settings.py에서 변수를 설정하는 것입니다 'FALSE'으로 설정하면 많은 시간을 절약 할 수 있습니다.

그래서,

DEBUG = False 

그리고 결국 , 지원 리처드 Huxton 다시 한번 감사합니다!

+0

"out of memory"오류가 발생하는 "시간"은 아니지만 스크립트는 거의 확실합니다. –

+0

오류가 '시간 % .3f'입니다. 메모리 오류 또는 이와 유사한. –

+0

"이 같은 것"이 아니 었습니다. 특정 소스의 특정 오류였습니다. 오류 메시지를 잘라내어 텍스트 파일에 붙여 넣는 습관을 시도하십시오. 트러블 슈팅을 할 때 디테일에 대한주의가 중요합니다. 처음에 응용 프로그램을 검사 한 경우 근무 시간을 절약 할 수있었습니다. –

4

I've read that databases have a size cap, which is around 4 Gb

나는 그것을 의심합니다. 확실히 PostgreSQL에 대해서는 사실이 아닙니다.

[...]at random points the insert stops and if I try to restart the insertion process, the application refuses to populate the table with more records

다시 말하지만, 나는 이것이 의심 스럽습니다. 응용 프로그램이 자체 인식되지 않으면 아무 것도하지 않습니다. 충돌, 잠금 또는 뭔가 발생하기를 기다리는 중일 수 있습니다.

I know the question might sound silly but I can't find any other reasons for why it stops inserting.

나는 당신이 충분히 열심히 생각한 것 같지 않습니다. 확실한 사항 :

  1. PostgreSQL 로그에 오류가 있습니까?
  2. 그렇지 않은 경우 오류를 기록 하시겠습니까? 점검 할 잘못된 조회를 발행하십시오.
  3. 애플리케이션에 오류가 있습니까?
  4. 그렇지 않은 경우. 확인하고 계십니까? 다시 확인하십시오
  5. 컴퓨터는 무엇입니까? 얼마나 많은 CPU/RAM/디스크 IO가 사용되고 있습니까? 비정상적인 활동?
  6. 비정상적인 잠금이 시작됩니다 (pg_locks보기 확인).

위의 사항을 확인한 질문을하면 도움을 줄 수있는 사람이 있습니다. 아마 당신 앞에서 사실을 알게되면 아마 스스로 생각할 것입니다.

+0

크기 제한에 관해서는 좀 더 연구를 해본 결과 32TB의 fot 테이블, 행의 경우 1.6TB, 데이터베이스의 경우 제한이 없다는 것을 알았습니다. –

+0

힌트를 보내 주셔서 감사합니다. 나는 그들 모두를 점검 할 것입니다. –

+0

3. 응용 프로그램 내부에 오류가 없습니다. 4. 확인하고 다시 검사했습니다. 5. CPU/RAM 사용량이 정상 범위 안에 있으며 수정 된 코드를 다시 시작한 경우 비정상적인 활동이없고 약 65.000 개의 레코드 만 테이블에 삽입됩니다. –

0

가능성 중 하나는 OP가 ssl을 사용하고 ssl_renegotiation_limit에 도달한다는 것입니다. 어쨌든 : log_connections/log_disconnections를 "On"으로 설정하고 로그 파일을 확인하십시오.

+0

OP가 의미하는 바를 명확히 설명해 주시겠습니까? –

+0

"Original Poster"(또는 "Original Post")이 경우에는 : reos. – wildplasser

+0

그래, 그게 나 일거야 :) –

1

OK - "진행중인 트랜잭션 없음"이 표시되면 커밋/롤백을 실행 중이지만 명시 적 트랜잭션을 벗어 났음을 의미합니다. "BEGIN"을 발행하지 않으면 각 명령문에 고유 한 트랜잭션이 적용됩니다.

이것은 문제의 원인이되지 않습니다.

삽입물이 멈추는 현상이 발생하며 아직 내용을 알려주지 않았습니다. 이전에는 애플리케이션 내부에서 오류가 발생하지 않았다고합니다. PostgreSQL이 응용 프로그램에서 오류를 반환해야하는 경우에는 가능하지 않습니다.

정확한 정보가 없으면 더 도움이되기 어렵습니다. PostgreSQL에 보내는 모든 문장은 상태 코드를 반환합니다. 다중 명령문 트랜잭션 내에서 오류가 발생하면 해당 트랜잭션의 모든 명령문이 롤백됩니다. 애플리케이션에서 혼란스러운 트랜잭션 제어가 있거나 다른 이유로 떨어지고 있습니다.

+0

나는 더 철저하게 보였고 나의 응용 프로그램은 어떤 오류도 알려주지 않았지만 로그 안에 IntegrityError를 찾아서 고쳤다. 응용 프로그램과 삽입 부분을 다시 시작했는데 몇 시간 만에 170k 표시를 통과했는지 여부를 알려주겠습니까? –

+0

데이터베이스에 오류가 있지만 응용 프로그램에 오류가 발생하는 경우 다른 것에 대해 걱정하기 전에 응용 프로그램을 수정해야 할 수 있습니다. 항상 외부 명령의 리턴 코드를 점검하십시오. –

관련 문제