| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| 사설 토토 : 문서 : 9.3 : 신뢰성과 쓰기 로그 | 사설 토토 : 문서 : 9.3 : 신뢰성과 쓰기 로그 | 29장. 토토 베이성 및 미리 쓰기 로그 | 스포츠 토토 베트맨 : 문서 : 9.3 : 쓰기 호위 (WAL) | |
토토 베이성은 모든 심각한 데이터베이스의 중요한 속성입니다 시스템 및PostgreSQL그렇습니다 안정적인 작동을 보장하기 위해 가능한 모든 것. 한 측면 안정적인 작동은 커밋된 데이터에 의해 기록된 모든 데이터가 트랜잭션은 안전한 비휘발성 영역에 저장되어야 합니다. 정전, 운영 체제 오류, 하드웨어 오류로 인해 (물론 비휘발성 영역 자체의 고장은 제외) 컴퓨터의 영구 저장소에 데이터를 성공적으로 기록했습니다. (디스크 드라이브 또는 동급)은 일반적으로 이 요구 사항을 충족합니다. 에서 실제로 컴퓨터가 치명적인 손상을 입더라도 디스크 드라이브가 유사한 하드웨어를 갖춘 다른 컴퓨터로 이동할 수 있음 커밋된 모든 트랜잭션은 그대로 유지됩니다.
주기적으로 디스크 플래터에 데이터를 강제하는 것은 간단한 조작처럼 그렇지 않습니다. 디스크 드라이브는 메인 메모리와 CPU보다 훨씬 느리며, 여러 계층의 컴퓨터의 메인 메모리와 디스크 사이에 캐싱이 존재합니다. 플래터. 먼저 운영체제의 버퍼 캐시가 있고, 자주 요청되는 디스크 블록을 캐시하고 디스크를 결합하는 것 쓴다. 다행스럽게도 모든 운영 체제는 애플리케이션에 다음과 같은 방법을 제공합니다. 버퍼 캐시에서 디스크로 강제로 쓰기, 그리고PostgreSQL이러한 기능을 사용합니다. (참조wal_sync_method이 작업 수행 방법을 조정하는 매개변수입니다.)
다음으로 디스크 드라이브 컨트롤러에 캐시가 있을 수 있습니다. 이 특히 다음과 같은 경우에 일반적입니다.RAID컨트롤러 카드. 이러한 캐시 중 일부는 다음과 같습니다.연속 토토 베이, 즉 토토 베이가 드라이브로 전송됨을 의미합니다. 그들이 도착하자마자. 다른 것들은다시 토토 베이, 데이터가 다음 드라이브로 전송됨을 의미합니다. 나중에. 이러한 캐시는 신뢰성에 위험이 될 수 있습니다. 디스크 컨트롤러 캐시의 메모리는 휘발성이므로 손실됩니다. 정전 시 그 내용. 더 나은 컨트롤러 카드가 있습니다.배터리 백업 장치 (BBUs), 이는 카드에 다음과 같은 배터리가 있음을 의미합니다. 시스템 전원이 손실되는 경우 캐시에 대한 전원을 유지합니다. 이후 전원이 복원되면 데이터가 디스크 드라이브에 기록됩니다.
그리고 마지막으로 대부분의 디스크 드라이브에는 캐시가 있습니다. 일부는 Write-through이고 일부는 Write-back이며 동일한 문제입니다. 디스크와 마찬가지로 후기입 드라이브 캐시에도 데이터 손실이 존재합니다. 컨트롤러 캐시. 소비자급 IDE 및 SATA 드라이브는 특히 살아남지 못하는 후기입 캐시가 있을 가능성이 높습니다. 정전. 많은 솔리드 스테이트 드라이브(SSD)에도 휘발성 드라이브가 있습니다. 후기입 캐시.
이러한 캐시는 일반적으로 비활성화될 수 있습니다. 그러나 방법은 이는 운영 체제와 드라이브 유형에 따라 다릅니다.
켜기리눅스, IDE 및 SATA 드라이브 다음을 사용하여 쿼리할 수 있습니다.hdparm -I; 쓰다 다음과 같은 경우 캐싱이 활성화됩니다.*옆에토토 베이 캐시. hdparm -W 0쓰기 캐싱을 끄는 데 사용할 수 있습니다. SCSI 드라이브는 다음과 같습니다. 다음을 사용하여 쿼리함sdparm. 사용sdparm --get=WCE토토 베이 캐시가 있는지 확인하려면 활성화되어 있으며sdparm --clear=WCE비활성화하다 그것.
켜기FreeBSD, IDE 드라이브는 다음과 같습니다. 다음을 사용하여 쿼리함atacontrol그리고 캐싱 쓰기 다음을 사용하여 꺼졌습니다.hw.ata.wc=0에/boot/loader.conf; SCSI 드라이브는 다음을 사용하여 쿼리할 수 있습니다.캠 제어 식별및 토토 베이 캐시 다음을 사용하여 쿼리하고 변경했습니다.sdparm언제 가능합니다.
켜짐솔라리스, 디스크 쓰기 캐시는 다음에 의해 제어됩니다.형식 -e. ( 솔라리스ZFS파일 시스템은 안전합니다 자체 디스크 캐시를 발행하므로 디스크 토토 베이 캐시가 활성화됩니다. 플러시 명령.)
켜기윈도우, 만약wal_sync_methodisopen_datasync(기본값), 쓰기 캐싱은 다음과 같습니다. 선택을 취소하여 비활성화됨내 컴퓨터\열기\디스크 운전\Properties\Hardware\Properties\Policies\토토 베이 활성화 디스크에 캐싱. 또는 설정하십시오.wal_sync_method에fsync또는fsync_writethrough14061_14093
켜짐맥 OS X, 토토 베이 캐싱 가능 설정으로 방지하세요wal_sync_method에fsync_writethrough.
최근 SATA 드라이브(다음 항목ATAPI-6이상) 드라이브 캐시 플러시 제공 명령(플러시 캐시 확장), 반면 SCSI 드라이브는 오랫동안 비슷한 명령을 지원했습니다.캐시 동기화. 이러한 명령은 직접적으로 적용되지 않습니다. 접근 가능PostgreSQL, 하지만 일부 파일 시스템(예:ZFS, ext4)는 이를 사용하여 데이터를 플러시할 수 있습니다. 다시 토토 베이 지원 드라이브의 플래터에 저장됩니다. 불행하게도 그러한 배터리 백업과 결합하면 파일 시스템이 최적이 아닌 상태로 작동함 단위(BBU) 디스크 컨트롤러. 에서 이러한 설정에서 동기화 명령은 모든 데이터를 컨트롤러 캐시를 디스크에 저장하므로 BBU. 다음을 실행할 수 있습니다.pg_test_fsync당신이 맞는지 확인하는 프로그램 영향을 받았습니다. 영향을 받는 경우 BBU의 성능 이점 파일 시스템에서 쓰기 장벽을 끄면 다시 복구할 수 있습니다. 디스크 컨트롤러 재구성(옵션인 경우) 쓴다면 배리어가 꺼져 있으면 배터리가 계속 작동하는지 확인하십시오. 결함이 있는 배터리는 잠재적으로 데이터 손실로 이어질 수 있습니다. 바라건대 파일 시스템 및 디스크 컨트롤러 설계자는 결국 이 문제를 해결할 것입니다. 최적이 아닌 행동입니다.
운영 체제가 스토리지에 쓰기 요청을 보낼 때 하드웨어에서는 데이터가 제대로 작동하는지 확인하기 위해 할 수 있는 일이 거의 없습니다. 진정한 비휘발성 저장 영역에 도착했습니다. 오히려 그것은 모든 스토리지가 제대로 작동하는지 확인하는 것은 관리자의 책임입니다. 구성 요소는 데이터와 파일 시스템 메타데이터 모두의 무결성을 보장합니다. 배터리로 지원되지 않는 토토 베이 캐시가 있는 디스크 컨트롤러는 사용하지 마세요. 드라이브 수준에서 드라이브가 불가능할 경우 후기입 캐싱을 비활성화합니다. 종료 전에 데이터가 기록되도록 보장합니다. 당신이 사용하는 경우 SSD의 경우 이들 중 상당수가 캐시 플러시 명령을 따르지 않는다는 점에 유의하세요. 기본적으로. 다음을 사용하여 안정적인 I/O 하위 시스템 동작을 테스트할 수 있습니다.diskchecker.pl.
디스크 플래터 쓰기로 인해 또 다른 데이터 손실 위험이 발생합니다. 운영 자체. 디스크 플래터는 섹터로 구분되며, 일반적으로 각각 512바이트입니다. 모든 물리적 읽기 또는 쓰기 작업 전체 부문을 처리합니다. 쓰기 요청이 도착하면 드라이브의 경우 512바이트의 배수일 수 있습니다(포스트그레SQL일반적으로 8192바이트 또는 16바이트를 씁니다. 섹터를 한 번에), 쓰기 프로세스가 실패할 수 있습니다. 언제든지 전원이 손실됩니다. 즉, 512바이트 섹터 중 일부가 다른 사람들은 그렇지 않은 동안 작성되었습니다. 그러한 실패를 방지하기 위해,포스트그레SQL정기적으로 씁니다 전체 페이지 이미지를 영구 WAL 저장소로 저장이전실제 페이지 수정 중 디스크. 이렇게 하면 충돌 복구 중에PostgreSQL부분적으로 작성된 페이지를 복원할 수 있습니다. 월에서. 부분적인 차단을 방지하는 파일 시스템 소프트웨어가 있는 경우 페이지 쓰기(예: ZFS)를 수행하는 경우 다음을 통해 이 페이지 이미징을 끌 수 있습니다. 끄는 중full_page_writes매개변수. BBU(배터리 지원 장치) 디스크 컨트롤러는 데이터가 다음과 같이 보장되지 않는 한 부분 페이지 쓰기를 방지합니다. BBU에 전체(8kB) 페이지로 기록됩니다.
PostgreSQL또한 보호합니다 저장 장치의 일부 데이터 손상에 대비하여 시간이 지남에 따라 하드웨어 오류나 미디어 오류로 인해 발생합니다. 쓰레기 데이터 읽기/토토 베이로.
WAL 파일의 각 개별 기록은 CRC-32로 보호됩니다. (32비트) 레코드 내용이 다음과 같은지 알 수 있는 검사입니다. 맞습니다. CRC 값은 각 WAL 레코드를 작성할 때 설정되며 충돌 복구, 아카이브 복구 및 복제.
데이터 페이지는 현재 기본적으로 체크섬되지 않지만 가득 차 있습니다. WAL 기록에 기록된 페이지 이미지는 보호됩니다. 참조initdb데이터 활성화에 대한 자세한 내용 페이지 체크섬.
다음과 같은 내부 데이터 구조pg_clog, pg_subtrans, pg_multixact, pg_serial, pg_notify, pg_stat, pg_snapshots직접 체크섬되지 않으며, 전체 페이지 쓰기로 보호되는 페이지. 그러나 그러한 데이터가 어디에 구조는 지속적이고 WAL 레코드는 다음을 허용하도록 작성됩니다. 충돌 복구 시 정확하게 재구축되는 최근 변경 사항과 WAL 기록은 위에서 설명한 대로 보호됩니다.
개별 상태 파일pg_twophaseCRC-32로 보호됩니다.
정렬을 위한 대규모 SQL 쿼리에 사용되는 임시 데이터 파일, 구체화 및 중간 결과는 현재 없습니다. 체크섬 처리되며 WAL 기록은 해당 변경사항에 대해 기록되지 않습니다. 파일.
PostgreSQL보호하지 않음 수정 가능한 메모리 오류에 대해 다음과 같이 가정합니다. 업계 표준 오류 수정을 사용하는 RAM을 사용하여 작동 코드(ECC) 또는 더 나은 보호를 제공합니다.
| 사설 토토 : 문서 : 9.3 : 신뢰성과 쓰기 로그 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 스포츠 토토 베트맨 : 문서 : 9.3 : 쓰기 호위 (WAL) |
| 토토 베이성과 미리 쓰기 로그 | 사설 토토 : 문서 : 9.3 : 신뢰성과 쓰기 로그 | 미리 토토 베이 로깅 (WAL) |