AlloyDB Omni 디스크 캐시는 표준 PostgreSQL 메모리 내 공유 버퍼 외에도 솔리드 스테이트 드라이브(SSD)와 같은 빠른 스토리지에 버퍼를 저장할 수 있도록 지원합니다. 디스크 캐싱은 느린 스토리지에 데이터 디렉터리가 위치한 AlloyDB Omni 설치 환경에서 데이터 검색을 가속화합니다.
PostgreSQL 공유 버퍼와 마찬가지로 AlloyDB Omni 디스크 캐시는 비영속적이므로, 다시 시작하면 캐시된 데이터가 손실됩니다.
기본적으로 AlloyDB Omni 디스크 캐시는 파일 시스템에서 보고되는 모든 스토리지를 사용합니다. omni_disk_cache_file_size 파라미터를 사용하여 캐싱 데이터에 예약할 스토리지 용량을 정의할 수 있습니다.
AlloyDB Omni 디스크 캐시 사용 설정
AlloyDB Omni의 디스크 캐시를 사용 설정하는 단계는 AlloyDB Omni가 컨테이너에서 또는 Kubernetes 클러스터에서 실행되는지 여부에 따라 다릅니다.
일반 볼륨에서 디스크 캐시 사용 설정
일반 볼륨을 사용하여 디스크 캐시를 사용 설정할 수 있습니다.
AlloyDB Omni Kubernetes 연산자의 일반 볼륨에서 디스크 캐시를 사용 설정하려면 미리 준비된 영구 볼륨과 storageClass이 필요합니다.
예를 들어 GKE를 사용하고 영구 볼륨과 storageClass가 준비되지 않은 경우 일반 볼륨에서 디스크 캐시를 사용 설정하기 전에 다음을 실행해야 합니다.
- 로컬 SSD 기반 스토리지로 클러스터를 만들었습니다.
- 로컬 볼륨 정적 프로비저닝 도구 실행의 1단계에 따라 볼륨을 ext4 파일 시스템으로 포맷했습니다.
- 스토리지 기기에 영구 스토리지를 정의하는
storageClass를 사용하여 클러스터의 각 SSD에 영구 볼륨을 수동으로 만들었습니다.
데이터베이스의 일반 볼륨에서 디스크 캐시를 사용 설정하려면 다음 단계를 완료하세요.
데이터베이스 클러스터 매니페스트를 수정하여
spec섹션의features섹션에ultraFastCache속성을 추가합니다.apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: CLUSTER_NAME spec: databaseVersion: "17.5.0" primarySpec: features: ultraFastCache: cacheSize: DISK_CACHE_SIZE genericVolume: storageClass: "STORAGE_CLASS_NAME" ...
다음을 바꿉니다.
DB_CLUSTER_NAME: 데이터베이스 클러스터의 이름. 이 이름은 데이터베이스 클러스터를 만들 때 선언한 데이터베이스 클러스터 이름과 동일합니다.DISK_CACHE_SIZE: 캐시 크기(예:100Gi).shared_buffers보다 커야 합니다. 이 필드는 선택사항입니다. 이 필드 값을 지정하지 않으면 AlloyDB Omni에서 디스크에 남은 모든 공간을 사용합니다. 이는 컨테이너와 Kubernetes 클러스터의 AlloyDB Omni 모두에 적용됩니다.STORAGE_CLASS_NAME: 초고속 캐시 볼륨의storage class이름(예:local-storage)
- 매니페스트를 다시 적용합니다.
로컬 볼륨에서 디스크 캐시 사용 설정
로컬 볼륨을 사용하려면 영구 볼륨을 만들지 않아도 됩니다. 대신 다음 최적화를 사용할 수 있습니다.
예를 들어 GKE를 사용하고 영구 볼륨과 storageClass가 준비되지 않은 경우 로컬 볼륨에서 디스크 캐시를 사용 설정하기 전에 다음을 실행해야 합니다.
- 로컬 SSD 기반 스토리지로 클러스터를 만들었습니다.
- 로컬 볼륨 정적 프로비저닝 도구 실행의 1단계를 사용하여 볼륨을
ext4파일 시스템으로 포맷했습니다.
데이터베이스의 로컬 볼륨에서 디스크 캐시를 사용 설정하려면 다음을 수행하세요.
데이터베이스 클러스터 매니페스트를 수정하여
spec섹션의features섹션에ultraFastCache속성을 추가합니다.apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: CLUSTER_NAME spec: databaseVersion: "17.5.0" primarySpec: features: ultraFastCache: cacheSize: DISK_CACHE_SIZE localVolume: path: "LOCAL_VOLUME_PATH" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: "LABEL_KEY" operator: "OPERATOR_VALUE" values: - "LABEL_KEY_VALUE" ...
다음을 바꿉니다.
CLUSTER_NAME: 데이터베이스 클러스터의 이름. 이 이름은 데이터베이스 클러스터를 만들 때 선언한 데이터베이스 클러스터 이름과 동일합니다.DISK_CACHE_SIZE: 캐시 크기(예:100Gi).shared_buffers보다 커야 합니다. 이 필드는 선택사항입니다. 이 필드 값을 지정하지 않으면 AlloyDB Omni에서 디스크에 남은 모든 공간을 사용합니다. 이는 컨테이너와 Kubernetes 클러스터의 AlloyDB Omni 모두에 적용됩니다.STORAGE_CLASS_NAME: 스토리지 클래스의 이름입니다.LOCAL_VOLUME_PATH: 로컬 볼륨의 경로(예:/mnt/disks/raid/0)LABEL_KEY: 위치 표시기 역할을 하고 클러스터 전반에서 균일한 포드 분산을 용이하게 하는 키의 노드 라벨입니다. 예를 들면cloud.google.com/gke-local-nvme-ssd입니다.OPERATOR_VALUE: 키와 값 집합의 관계입니다(예:In). 파라미터를 다음 중 하나로 설정합니다.-
In: 값 배열은 비어 있지 않아야 합니다. -
NotIn: 값 배열은 비어 있지 않아야 합니다. -
Exists: 값 배열은 비어 있어야 합니다. -
DoesNotExist: 값 배열은 비어 있어야 합니다. -
Gt: 값 배열에는 정수로 해석되는 단일 요소가 있어야 합니다. -
Lt: 값 배열에는 정수로 해석되는 단일 요소가 있어야 합니다.
-
LABEL_KEY_VALUE: 라벨 키의 값입니다(예:true). 다음과 같이 파라미터를 문자열 값 배열로 설정합니다.- 연산자가
In또는NotIn인 경우 값 배열은 비어 있지 않아야 합니다. - 연산자가
Exists또는DoesNotExist인 경우 값 배열은 비어 있어야 합니다. - 연산자가
Gt또는Lt인 경우 값 배열에는 정수로 해석되는 단일 요소가 있어야 합니다.
- 연산자가
- 매니페스트를 다시 적용합니다.
임시 볼륨에서 디스크 캐시 사용 설정
emptyDir 볼륨을 사용하여 디스크 캐시를 사용 설정할 수 있습니다. 이 볼륨은 포드의 수명 주기에 직접 연결된 임시 스토리지를 제공합니다. 볼륨은 포드가 노드에 할당될 때 생성되며 포드가 해당 노드에서 실행되는 한 계속 존재합니다.
포드가 노드에서 삭제되면 emptyDir의 데이터가 영구적으로 삭제됩니다. 이 유형의 볼륨은 임시 고속 스토리지를 제공하므로 캐시에 적합합니다. 포드가 다시 예약되는 경우 캐시의 데이터를 유지할 필요가 없습니다.
데이터베이스의 임시 볼륨에서 디스크 캐시를 사용 설정하려면 다음 단계를 완료하세요.
데이터베이스 클러스터 매니페스트를 수정하여
spec섹션의features섹션에ultraFastCache속성을 추가하고emptyDirVolume를 지정합니다.apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: CLUSTER_NAME spec: databaseVersion: "17.5.0" primarySpec: features: ultraFastCache: cacheSize: DISK_CACHE_SIZE emptyDirVolume: {} ...
다음을 바꿉니다.
CLUSTER_NAME: 데이터베이스 클러스터의 이름. 이 이름은 데이터베이스 클러스터를 만들 때 선언한 데이터베이스 클러스터 이름과 동일합니다.DISK_CACHE_SIZE: 캐시 크기(예: 200Gi).
- 매니페스트를 다시 적용합니다.
디스크 캐시 구성 확인
AlloyDB Omni 디스크 캐시를 사용 설정한 후에는 iotop 또는 iostat과 같은 유틸리티를 사용하여 디스크의 읽기 및 쓰기 활동을 모니터링하여 디스크 캐시에 액세스되었는지 확인합니다.
또한 AlloyDB Omni 디스크 캐시가 열려 있는지 확인할 수도 있습니다.
AlloyDB Omni의 디스크 캐시 구성을 확인하려면 다음 명령어를 사용하세요.
kubectl exec -i $DATABASE_POD -c database -n $DBCLUSTER_NAMESPACE -- cat /obs/diagnostic/postgresql.log | grep "opened omni disk cache"디스크 캐시가 올바르게 구성되었다면 로그에 Successfully opened omni disk cache ... 메시지가 표시됩니다.