문제

Perl DBI를 통해 액세스되는 Oracle 10g를 사용하면 다른 프로세스에서 훨씬 더 자주 읽는 동안 초당 수 천만 행이 업데이트되는 테이블이 있습니다.

곧 업데이트 빈도가 몇 배 (아마 2 배) 증가 할 것입니다. 누군가는 매 업데이트 이후가 아니라 N 업데이트마다 커밋하면 성능에 도움이된다고 제안했습니다.

몇 가지 질문이 있습니다.

  • 속도가 더 빠르거나 느리거나 상황에 따라 다릅니다 (새 부하에 대한 적절한 시뮬레이션을 얻을 수있는 즉시 양방향 벤치 마크 계획)
  • 성능에 도움이되거나 방해가되는 이유
  • "그것에 따라 ...", 무엇에 따라?
  • N의 최고 값이 도움이된다면?
  • 왜 필요한 경우 지역 DBA가 유용한 정답을 얻을 수 없습니까?
    (사실 저는 그 답을 알고 있습니다) :-) <인용구>

    수정 :

    @codeslave : 감사합니다. 커밋되지 않은 변경은 문제가되지 않습니다. 사용 된 원본 데이터를 삭제하지 마십시오 내가 모든 것을 확신 할 때까지 업데이트하기 위해 괜찮아요, btw 청소부 아줌마가 했어 서버의 플러그를 뽑습니다. 두 번 :-)

    일부 인터넷 검색에서 도움이 될 수 있음을 보여주었습니다. 롤백 관련 문제로 인해 세그먼트,하지만 여전히 N에 대한 경험 법칙은 몇십 만에? 수백? 천?

    @diciu : 좋은 정보, 확실히 저것을보세요.

도움이 되었습니까?

해결책

커밋은 Oracle이 디스크에 내용을 기록하게합니다. 즉, 리두 로그 파일에 커밋 된 트랜잭션이 정전 등의 경우에 복구 할 수 있도록합니다. 파일에 쓰는 것이 메모리에 쓰는 것보다 느리기 때문에 일련의 병합 된 업데이트가 아니라 연속으로 많은 작업을 수행하면 커밋이 더 느려집니다.

Oracle 10g에는 훨씬 빠르지 만 안정성이 떨어지는 비동기 커밋이 있습니다. https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6158695.html

PS 필자는 특정 애플리케이션에서 본 시나리오에서 병합 된 업데이트 수를 5K에서 50K로 변경하면 10 배 더 빨라진다는 것을 확실히 알고 있습니다.

다른 팁

커밋 빈도를 줄이면 확실히 속도가 빨라지지만이 테이블을 자주 읽고 쓰기 때문에 잠금이 발생할 가능성이 있습니다.동일한 데이터가 동시에 업데이트 될 가능성은 본인 만이 결정할 수 있습니다.가능성이 낮 으면 50 행마다 커밋하고 상황을 모니터링합니다.시행 착오가 두렵습니다 :-)

커밋 빈도를 줄이는 것 외에도 개별 업데이트 대신 일괄 업데이트를 수행하는 것도 고려해야합니다.

"모든 것이 정상인지 확인 될 때까지 업데이트에 사용 된 원본 데이터를 삭제하지 마십시오", 그렇다면 그 사이에 증분 커밋을 모두 제거하고 문제가 있으면 롤백하지 않는 이유는 무엇입니까?거래 위에 거래 시스템을 효과적으로 구축 한 것 같습니다.

@CodeSlave 귀하의 질문에 @stevechol이 답변합니다. 증분 커밋을 모두 제거하면 잠금이 발생합니다.더 나은 것이 없다면 나는 그의 조언에 따라 임의의 숫자를 선택하고 부하를 모니터링하고 그에 따라 조정할 것입니다.@diciu twaks를 적용하는 동안.

PS : 트랜잭션 상단의 트랜잭션은 우발적입니다. FTP에서 업데이트에 사용되는 파일을 가져오고 즉시 삭제하는 대신 일주일 후에 파일을 삭제하도록 크론 작업을 설정했습니다 (응용 프로그램을 사용하는 사람이 불만을 제기하지 않은 경우) 즉, 문제가 발생하면 일주일 동안 오류를 잡을 수 있습니다.

<인용구>

더 빠르거나 느린가요?

아마 조금 더 빠를 것입니다.그러나 교착 상태에 빠질 위험이 더 커지고 치명적인 일이 발생하면 커밋되지 않은 변경 사항을 잃게됩니다 (청소녀가 서버의 플러그를 뽑음), FUD, Fire, Brimstone 등. <인용구>

왜 도움이 되나요?

확실히 더 적은 커밋 작업으로 디스크 쓰기 등이 줄어 듭니다. <인용구>

DBA의 솔직한 답변?

쉬웠다면 필요하지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top