디스크 캐시를 사용하여 데이터베이스 성능 가속화

문서 버전을 선택합니다.

이 페이지에서는 AlloyDB Omni 설치의 성능을 높이기 위해 AlloyDB Omni에서 디스크 캐싱을 프로비저닝, 설정, 사용하는 방법을 설명합니다.

AlloyDB Omni 디스크 캐시는 표준 PostgreSQL 메모리 내 공유 버퍼 외에도 솔리드 스테이트 드라이브 (SSD)와 같은 빠른 스토리지에 버퍼를 저장할 수 있습니다. 디스크 캐싱은 느린 스토리지에 데이터 디렉터리가 있는 AlloyDB Omni 설치에서 데이터 검색을 가속화합니다.

PostgreSQL 공유 버퍼와 마찬가지로 AlloyDB Omni 디스크 캐시는 영구적이지 않으므로 다시 시작하면 캐시된 데이터가 손실됩니다.

기본적으로 AlloyDB Omni 디스크 캐시는 파일 시스템에서 보고한 모든 스토리지를 사용합니다. omni_disk_cache_file_size 파라미터를 사용하여 데이터 캐싱을 위해 예약된 스토리지의 양을 정의할 수 있습니다.

AlloyDB Omni 디스크 캐시 사용 설정

컨테이너에서 AlloyDB Omni의 디스크 캐시를 사용 설정하려면 다음 단계를 따르세요.

디스크 프로비저닝 및 파일 시스템 생성

AlloyDB Omni 디스크 캐시의 경우 디스크 또는 여러 디스크에 파일 시스템을 만들고 AlloyDB Omni가 있는 컨테이너 내에 마운트합니다. 또한 mdadm 또는 lvm와 같은 유틸리티를 사용하여 여러 디스크를 사용하여 용량을 풀링하고 파일 시스템을 사용할 수 있습니다.

다음 단계에서는 NVMe SSD를 사용하는 Ubuntu Compute Engine 인스턴스에서 lvmext4를 사용하는 방법을 보여줍니다.

  1. 사용 가능한 모든 실제 기기에서 볼륨 그룹을 만듭니다.

      nvme_prefix="STORAGE_PREFIX"
      nvme_list=$(ls "$nvme_prefix"*)
      sudo vgcreate VOLUME_GROUP ${nvme_list}

    다음을 바꿉니다.

    • STORAGE_PREFIX: 비휘발성 메모리 익스프레스 (NVMe) 인터페이스를 사용하여 가상 머신에 연결된 타겟 로컬 디스크 경로의 접두사입니다. 예를 들어 Google Cloud에서 NVMe 기기 경로는 항상 /dev/nvme0n로 시작합니다.
    • VOLUME_GROUP: SSD가 결합된 볼륨 그룹의 이름입니다(예: omni-disk-cache-volume).
  2. 이전 단계의 볼륨 그룹의 여유 용량에서 논리 볼륨을 만들려면 다음 명령어를 사용합니다.

      sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP

    LOGICAL_VOLUME을 LVM에서 파티션으로 취급하는 논리 볼륨의 이름으로 바꿉니다(예: omni_disk_cache_device).

  3. 논리 볼륨에 ext4 파일 시스템을 만듭니다. 필요한 경우 데이터 보안에 따라 다른 ext4 옵션을 지정할 수 있습니다.
      sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
  4. 호스트 머신에서 마운트 지점 역할을 하는 디렉터리를 만들고 파일 시스템을 마운트하려면 다음 명령어를 사용합니다.

      sudo mkdir /OMNI_DISK_CACHE_DIRECTORY
      sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_DISK_CACHE_DIRECTORY

    OMNI_DISK_CACHE_DIRECTORY을 마운트 지점으로 사용되는 디렉터리의 이름 또는 디렉터리 경로로 바꿉니다(예: omni_disk_cache_directory).

AlloyDB Omni 내에 캐시 디렉터리 마운트

컨테이너에서 실행되는 AlloyDB Omni의 디스크 캐시를 사용 설정하기 전에 AlloyDB Omni 내부에 캐시 디렉터리를 마운트해야 합니다.

Docker 이미지에서 AlloyDB Omni를 설치하고 이를 맞춤설정하는 방법에 관한 자세한 내용은 AlloyDB Omni 설치 맞춤설정을 참고하세요.

AlloyDB Omni를 실행하는 Docker 컨테이너 내에 OMNI_DISK_CACHE_DIRECTORY를 마운트하려면 다음 명령어를 사용하세요.

Docker

      sudo docker run --name CONTAINER_NAME 
-e POSTGRES_PASSWORD=PASSWORD
-e PGDATA=/var/lib/postgresql/data/pgdata
-v DATA_DIR:/var/lib/postgresql/data
-v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d google/alloydbomni

다음을 바꿉니다.

  • CONTAINER_NAME: 새 AlloyDB Omni 컨테이너에 할당할 이름입니다(예: my-omni).
  • PASSWORD: PostgreSQL 데이터베이스 루트 관리자의 비밀번호입니다.
  • DATA_DIR: AlloyDB Omni가 데이터 디렉터리에 사용할 파일 시스템 경로입니다.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: AlloyDB Omni 컨테이너 내의 캐시 디렉터리로, 호스트 머신의 마운트 지점에 매핑됩니다. 예를 들어 컨테이너 내의 캐시 디렉터리 값을 기반으로 /omni_disk_cache_directory(OMNI_DISK_CACHE_DIRECTORY와 유사) 또는 /disk/cache/inside/container입니다.

Podman

      podman run --name CONTAINER_NAME 
-e POSTGRES_PASSWORD=PASSWORD
-e PGDATA=/var/lib/postgresql/data/pgdata
-v DATA_DIR:/var/lib/postgresql/data
-v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d docker.io/google/alloydbomni

다음을 바꿉니다.

  • CONTAINER_NAME: 새 AlloyDB Omni 컨테이너에 할당할 이름입니다(예: my-omni).
  • PASSWORD: PostgreSQL 데이터베이스 루트 관리자의 비밀번호입니다.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: AlloyDB Omni 컨테이너 내의 캐시 디렉터리로, 호스트 머신의 마운트 지점에 매핑됩니다. 예를 들어 컨테이너 내의 캐시 디렉터리 값을 기반으로 /omni_disk_cache_directory(OMNI_DISK_CACHE_DIRECTORY와 유사) 또는 /disk/cache/inside/container입니다.

마운트된 OMNI_DISK_CACHE_DIRECTORY에 전체 액세스 권한을 부여하려면 다음 명령어를 사용하세요.

Docker

      sudo docker exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      sudo docker exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      

Podman

      sudo podman exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      sudo podman exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
      

AlloyDB Omni 디스크 캐시 사용 설정

데이터베이스에 AlloyDB Omni 디스크 캐시를 사용 설정하려면 마운트된 캐시 디렉터리에 Docker 컨테이너 내부에서 액세스할 수 있는지 확인한 후 적절한 Grand Unified Configuration (GUC) 매개변수를 설정하세요.

  1. 컨테이너화된 AlloyDB Omni 데이터베이스에 슈퍼 사용자로 연결하려면 다음 명령어를 사용하세요.

    Docker

          sudo docker exec -it CONTAINER_NAME psql -h localhost -U postgres
          

    Podman

          sudo podman exec -it CONTAINER_NAME psql -h localhost -U postgres
          
  2. 매개변수 값을 설정하려면 AlloyDB Omni 데이터베이스 내에서 다음 명령어를 사용하세요.

            alter system set omni_disk_cache_enabled=on;
            alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
          
  3. 기본적으로 AlloyDB Omni는 파일 시스템의 사용 가능한 모든 공간을 사용합니다. 필요한 경우 omni_disk_cache_file_size 매개변수를 사용하여 기본값을 재정의할 수 있습니다.

          alter system set omni_disk_cache_file_size=SIZE_IN_MB;
          
  4. 캐싱 구성 매개변수 변경사항을 적용하려면 AlloyDB Omni로 실행 중인 컨테이너를 다시 시작하세요.

    Docker

          sudo docker restart CONTAINER_NAME
          

    Podman

          sudo podman restart CONTAINER_NAME
          

디스크 캐시 구성 확인

AlloyDB Omni 디스크 캐시를 사용 설정한 후 iotop 또는 iostat와 같은 유틸리티를 사용하여 디스크에 대한 읽기 및 쓰기 활동을 모니터링하여 디스크 캐시에 액세스하는지 확인합니다.

또한 AlloyDB Omni 디스크 캐시가 열려 있는지 확인할 수 있습니다.

컨테이너에서 AlloyDB Omni의 디스크 캐시 구성을 확인하려면 다음 단계를 따르세요.

Docker

sudo docker logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"

Podman

sudo podman logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"

디스크 캐싱이 올바르게 구성되면 Successfully opened omni disk cache ... 메시지가 로그에 표시됩니다.

다음 단계