2012-04-26 4 views
1

데이터베이스 WAL 시퀀스가 ​​무한한 지 궁금합니다. 대부분의 WAL 레코드에는 WAL 번호에 대한 수정 크기가 있습니까? 이것은 정말 큰 번호로 끝나지 않을 것입니까? 이것은 공간 낭비 일 수 있습니다. 아니면 큰 DB 플레이어가 더 나은 방법을 발명하게 만들었습니까?WAL 시퀀스 번호 무한대?

또는 WAI가 다시 0에서 시작하도록하기 위해 일부 논리를 구현합니까? 그것은 코드의 많은 부분에 많은 영향을 줄 수 있습니다 ...?

편집 :

영향 : 일예 충돌 후 복구는 타임 라인을 따라 더 커지는 시퀀스 번호에 의존합니다. 시퀀스가 복구를 시작하면 혼란 스러울 수 있습니다.

용어 WAL 시퀀스 번호 : WAL (응용 프로그램 계층이 트랜잭션이 성공하기 전에받은 디스크에있는 트랜잭션 로그를 미리 기록하십시오.) 이 로그는 데이터베이스를 계속 유지하는 데 필요한 숫자가 증가하고 있습니다. 복구의 경우 WAL의 시퀀스 번호와 비교하여 페이지의 WAL 시퀀스 번호를 확인합니다.

+0

가능한 영향 시나리오를 보여주십시오. – vyegorov

+0

이전에 사용한 "WAL 시퀀스"라는 용어를 본 적이 없으며 Google은 분명히 데이터베이스 관련 내용을 반환하지 않습니다. 우리에게 그 용어를 정의 할 수 있습니까? –

+0

@JustinCave 편집을 참조하십시오. –

답변

3

모든 데이터베이스가 동일한 전략을 구현한다고 가정하지 않습니다.

오라클의 경우 SCN (시스템 변경 번호)은 48 비트 숫자이므로 Oracle 데이터베이스는 제한을 초과하기 전에 약 300 조 트랜잭션을 처리 할 수 ​​있습니다. 현실적으로, 그것은 장구 할 것입니다. 1 초에 1,000 건의 트랜잭션을 처리 할 수 ​​있다고해도 SCN은 3 천억 초 또는 대략 9500 년 동안 제한을 초과하지 않습니다. 이제 트랜잭션을 수행하는 것 외에도 SCN을 증가시킬 수있는 여러 가지 사항이 있습니다 (소수의 사용자가 SCN의 합리성에 대한 데이터베이스 검사를 초과하는 것으로 유명 함). 따라서 9500 년이 걸릴 것입니다. 한계에 도달했다. 그러나 오라클은 실제로 오라클이 64 비트 SCN으로 전환 할 수있는 충분한 시간을 주었고, 모든 사람들에게 몇 세기가 넘는 기능을 제공했습니다.

+1

PostgreSQL의 WAL 시퀀스는 Oracle의 SCN과 다른 것이라고 생각합니다. PostgreSQL의 WAL은 오라클의 REDO 로그와 다소 유사합니다. –

+1

@a_horse_with_no_name - SCN은 리두 로그에 기록되어야합니다. Oracle에서 Redo 로그의 또 다른 구성 요소가 있습니까? PostgreSQL WAL 시퀀스와 더 유사할까요? –

+1

두 가지 모두 (로깅) 내부에 익숙하지 않아서 완전히 오인되었을 수도 있습니다. ** ** Oracles의 "Log Sequence Numbers"는 WAL 시퀀스와 더 잘 일치합니다. 그러나 다시 : 나는 절대적으로 확신 할 수 없다. 반면에. PostgreSQL의'ctid'는 오라클의'SCN'과 잘 어울립니다. 둘 다 "트랜잭션 순서"를 정의했기 때문입니다. –

1

What is an LSN: Log Sequence Number을 참조하십시오. 이 기사에서는 SQL Server LSN (WAL 번호)의 구조를 설명하고이를 디코딩하는 방법을 보여줍니다. LSN은 고정 크기이고 롤오버하지 않기 때문에, 당신은 그것들을 다 쓸 수있다. 그것은 아주 오랜 시간이 걸릴 것입니다.

1

SQL Server와 마찬가지로 DB2는 해당 카운터를 Log Sequence Number (LSN)이라고 부릅니다. IBM은 최근 LSN의 크기를 6 바이트에서 8 바이트로 확장했습니다. LSN은 로그 파일에서 특정 로그 레코드를 찾을 수있는 위치를 표시하는 계속 증가하는 포인터입니다. 8Y이트 LSN은 DB2 데이터베이스가 주소 공간을 초과하여 실행하기 전에 로그 레코드 중 거의 16Y을 쓸 수 있다는 것을의 L합니다.이 때 데이터베이스의 내용을 언로드하여 새 데이터베이스로 복사해야합니다.

1

PostgreSQL에서 WAL 로그는 set of segment files으로 저장됩니다. "세그먼트 파일의 이름은 000000010000000000000000에서부터 계속 증가하고 있습니다." 번호는 감싸지 않습니다.