속성에 대한 문서 sync=disabled
에 따르면
File system transactions are only committed to stable storage periodically. This option will give the
highest performance. However, it is very dangerous as ZFS would be ignoring the synchronous transac-
tion demands of applications such as databases or NFS. Administrators should only use this option
when the risks are understood.
그래서 위험을 이해하려고 노력하고 있습니다. 불행하게도 sync=disabled
충돌/정전이 발생할 때 정확히 어떤 일이 발생하는지와 이것이 실제 애플리케이션에 어떤 영향을 미치는지에 대한 몇 가지 상충되는 정보가 있습니다.
다음은 보안에 대해 논의하는 다양한 포럼의 의견 중 일부(의역)입니다 sync=disabled
.
sync=disabled
마지막 5초 동안의 쓰기 내용을 잃어도 괜찮다면 설정할 수 있습니다.- 손상 위험은 없으며
sync=disabled
데이터 손실만 있을 뿐입니다. - 사용하더라도
sync=disabled
. - 충돌 일관성은 파일 시스템 수준(애플리케이션 수준 아님)에서만 달성할 수 있습니다.
- 이를 설정하면
sync=disabled
데이터베이스 애플리케이션의 트랜잭션 보안이 손실됩니다. - ACID 호환 데이터베이스는
sync=disabled
. - 소프트웨어에 대해 의도적으로 거짓말을 했습니다. ACID 데이터베이스와 저널링 파일 시스템(ZFS 위에서 실행)도 예상되는 쓰기 의미를 위반하기 때문에 손상될 수 있습니다.
그래서 그것은 어느 것입니까? 5초 동안의 데이터만 손실됩니까(충돌이 불과 5초 전에 발생한 것처럼, 그러나 에서 발생함 sync=standard
), 아니면 이 5초가 ACID 데이터베이스의 일관성을 깨뜨리는 일부 트랜잭션 불확실성을 초래합니까?
분명히 말하면, 나는 거래의 마지막 5초를 잃게 될 것이라는 것을 알고 있습니다. 문제는 이 5초의 손실로 인해 응용 프로그램 수준 상태가 손상되는지 여부입니다(응용 프로그램 상태가 ZFS 로컬이므로 원격 서버 또는 별도의 비 ZFS 디스크와의 일관성이 중요하지 않다고 가정).
만약에sync=disabled
할 수 있는애플리케이션 수준 상태 손상을 유발합니다. 이 손상이 어떻게 발생하는지에 대한 설명이나 시퀀스 다이어그램을 제공해 주세요.
편집: 지속성이나 약 5초의 데이터 손실에 대해 신경 쓰지 않는다는 점을 다시 한 번 분명히 하고 싶습니다. 내 질문은오직일관성과 거래 보안에 대해. 하나 있다거대한약 5초 동안의 데이터 손실(트랜잭션 롤백으로 인해)과 일관성 손실(데이터가 복구할 수 없을 정도로 손상된 경우 모든 데이터 손실)의 차이입니다.
답변1
그래서 그것은 어느 것입니까?
이 모든 것은 거의 동일합니다 - 데이터아니요디스크에 플러시되면 손실됩니다.
- 손상 위험은 없으며
sync=disabled
데이터 손실만 있을 뿐입니다.
데이터 손실반품저장된 데이터가 손상되거나 논리적 불일치가 발생할 가능성이 있음을 의미합니다. 때에 따라 다르지무엇데이터가 완전히 손실되었습니다.
- 사용하더라도
sync=disabled
.- 충돌 일관성은 파일 시스템 수준(애플리케이션 수준 아님)에서만 달성할 수 있습니다.
여기서 "일관성"은 파일 시스템 자체(즉, 메타데이터)의 일관성만을 포함하며,논리적파일 시스템에 저장된 애플리케이션 데이터의 일관성.
- 이를 설정하면
sync=disabled
데이터베이스 애플리케이션의 트랜잭션 보안이 손실됩니다.
예.
- ACID 호환 데이터베이스는 원자성이며 ZFS는 다음과 같은 경우에도 원자성과 쓰기 순서를 유지합니다.
sync=disabled
주문이 확실하지 않습니다.
내부 트랜잭션 그룹 쓰기의 순서를 변경할 수 있습니다.
https://zfsonlinux.topicbox.com/groups/zfs-discuss/T17417b2984f6c8ff
아니면:
https://zfsonlinux.topicbox.com/groups/zfs-discuss/T969c74e0a6dfdd74-M818821038c9248d92443f67a
애플리케이션 자체에서 제공되는 원자성입니다. 그리고원자성같지 않음내구성.
- 소프트웨어에 대해 의도적으로 거짓말을 했습니다. ACID 데이터베이스와 저널링 파일 시스템(ZFS 위에서 실행)도 예상되는 쓰기 의미를 위반하기 때문에 손상될 수 있습니다.
예.
5초의 데이터만 손실되는 것인가요? 아니면 그 5초가 ACID 데이터베이스의 일관성을 깨뜨리는 일부 트랜잭션 불확실성을 초래하게 됩니까?
둘 다. 둘 다 같은 의미입니다. 즉, (응용 프로그램의) 데이터가 손실되었습니다.
이는 애플리케이션과 물리적 미디어 사이의 모든 계층에 대한 쓰기 캐싱에 관한 것입니다. 만약에어느데이터 출처:어느(비영구) 캐시는 누락된 미디어로 플러시되지 않습니다.
동기화가 비활성화된 파일 시스템은 캐시된 데이터를 새로 고치지 않습니다.곧애플리케이션이 강제로 실행되지만 데이터가 스토리지에 저장된다는 거짓말을 하는 경우. 대신 데이터는 휘발성 메모리에 보관되며 소프트웨어나 하드웨어 오류, 충돌 또는 정전이 발생할 경우 손실됩니다.
예를 들어 텍스트 파일을 작성하고 이를 텍스트 편집기에 저장합니다. 그러나 fsync를 호출하여 파일 시스템을 강제로 실행하더라도 텍스트 파일은 저장 매체에 즉시 도달하지 않습니다. 파일 시스템이 데이터를 새로 고칩니다.나중에.
중간에 나쁜 일이 발생하면 파일이 손실됩니다.
또한 데이터베이스는 지속성을 위해 적절한 fsync 기능을 사용합니다.
HDD, SSD, RAID 컨트롤러와 같은 하드웨어 스토리지도 자체 캐시, 펌웨어 오류 또는 물리적 오류로 인해 쓰기 성공 여부를 운영 체제에 속일 수 있습니다.
https://www.sqlite.org/howtocorrupt.html('동기화 실패' 이하에서)
https://sqlite.org/atomiccommit.html(9.2. 불완전한 디스크 플러시)
https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-FSYNC
https://www.postgresql.org/docs/current/wal-async-commit.html