Google Cloud의 로컬 SSD(Postgresql)를 사용한 느린 Fsync

Google Cloud의 로컬 SSD(Postgresql)를 사용한 느린 Fsync

간단한 "pgbench" 테스트를 사용하여 GCE의 "로컬 SSD" 옵션(SSD 영구 디스크와 비교)에서 초당 트랜잭션 수가 예기치 않게 낮습니다.

# With Local SSD
# /dev/mapper/vg0-data on /data type xfs (rw,noexec,noatime,attr2,inode64,noquota)
pg-dev-002:~$ pgbench -c 8 -j 2 -T 60 -U postgres
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 8
number of threads: 2
duration: 60 s
number of transactions actually processed: 10765
tps = 179.287875 (including connections establishing)
tps = 179.322407 (excluding connections establishing)

# With SSD Persistent Disk
# /dev/mapper/vg1-data on /data1 type xfs (rw,noexec,noatime,attr2,inode64,noquota)
pg-dev-002:/data$ pgbench -c 8 -j 2 -T 60 -U postgres
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1
query mode: simple
number of clients: 8
number of threads: 2
duration: 60 s
number of transactions actually processed: 62457
tps = 1040.806664 (including connections establishing)
tps = 1041.012782 (excluding connections establishing)

"fio" 벤치마크는 로컬 SSD에 대해 광고된 IOPS 및 처리량을 보여줍니다. 그러나 로컬 SSD 마운트에서 "pg_test_fsync"를 실행하면 fsync 대기 시간이 원인이라고 생각됩니다. 로컬 SSD 번호는 Google의 IRQ 스크립트를 적용한 후입니다.여기:

# Local SSD
open_datasync                     319.738 ops/sec    3128 usecs/op
fdatasync                         321.963 ops/sec    3106 usecs/op

# Persistent SSD
open_datasync                    1570.305 ops/sec     637 usecs/op
fdatasync                        1561.469 ops/sec     640 usecs/op
  • Ubuntu 14.04 및 Debian 7 이미지로 테스트됨
  • 인스턴스 유형: n1-highmem-4
  • 마운트 옵션은 두 볼륨 유형 모두 동일합니다.

fsync 및 로컬 SSD의 제한 사항에 대해서는 아무것도 본 적이 없지만 어디에서 확인하거나 테스트해야 할지 잘 모르겠습니다.

답변1

비교하나의로컬 SSD/HDD/등. SAN 유형 RAID 컨트롤러와 비교하는 것은 VW Beetle을 Audi RS10 Le-mans 자동차와 비교하는 것과 같습니다. 예, 둘 다 동일한 공장에서 나왔고 둘 다 4행정 엔진/SSD/HDD를 사용하지만 튜닝 등이 있습니다. 아주 아주 다릅니다.

얻은 경험에 대한 몇 가지 예를 드릴 수 있지만 간단한 대답은 SAN 기반 스토리지를 로컬 SSD/HDD가 아닌 스토리지와 비교했을 때 엄청난 양의 배터리 백업 RAM 캐시와 관련이 있습니다. SSD조차도 데이터가 디스크에 "커밋"되었다는 것을 확인할 때 배터리 지원 DDR3 RAM과 경쟁할 수 없습니다. 더욱이 단일 로컬 디스크는 (현실적으로) "디스크"에 블록을 쓰는 동시에 단일 작업만 처리할 수 있는 반면, 배터리로 지원되는 SAN 시스템은 "디스크에 쓰기"(데이터를 커밋할 때) 동시에 여러 요청을 처리할 수 있습니다. 배터리 백업 DDR3 RAM에)

마지막으로 질문은 아마도어느로컬 SSD 디스크가 사용되고 있습니다. 서로 다른 SSD 간의 쓰기 성능이 크게 차이나는 것을 보았기 때문입니다.크기다양한 SSD 디스크의 다양한 속도는 말할 것도 없고 동일한 SSD 제품군(더 클수록 더 빠름)입니다.

예, SSD는 HDD보다 빠르지만 아직 배터리 지원 DDR3 RAM만큼 빠르지는 않습니다.)

답변2

Google은 로컬 SSD에서 쓰기 캐시 플러시가 상당히 느리다는 점을 인정하고 [사용 사례에 적합한 경우] 지연을 방지하기 위해 파일 시스템 마운트에서 쓰기 캐싱을 비활성화하는 단계를 제공합니다. 문서는여기.

관련 정보