Esta página descreve como provisionar, configurar e usar o armazenamento em cache em disco no AlloyDB Omni para aumentar o desempenho da instalação.
Além dos buffers compartilhados em memória padrão do PostgreSQL, o cache de disco do AlloyDB Omni permite armazenar buffers em armazenamentos rápidos, como unidades de estado sólido (SSDs). O cache em disco acelera a recuperação de dados em instalações do AlloyDB Omni com diretórios de dados localizados em armazenamento mais lento.
Assim como os buffers compartilhados do PostgreSQL, o cache de disco do AlloyDB Omni não é persistente, o que significa que os dados em cache são perdidos na reinicialização.
Por padrão, o cache de disco do AlloyDB Omni usa todo o armazenamento informado pelo sistema de arquivos. É possível definir a quantidade de armazenamento reservada para armazenar dados em cache usando o parâmetro omni_disk_cache_file_size
.
Ativar o cache de disco do AlloyDB Omni
As etapas usadas para ativar o cache de disco do AlloyDB Omni dependem se você executa o AlloyDB Omni em um contêiner ou em um cluster do Kubernetes.
Servidor único
Provisionar discos e criar um sistema de arquivos
Para o cache de disco do AlloyDB Omni, você cria um sistema de arquivos em um disco ou em vários discos e o monta em um contêiner com o AlloyDB Omni. Além disso, é possível usar utilitários como mdadm
ou lvm
para agrupar a capacidade usando vários discos e qualquer sistema de arquivos.
As etapas a seguir demonstram o uso de lvm
e ext4
em uma instância do Ubuntu Compute Engine usando SSDs NVMe.
Crie um grupo de volumes com todos os dispositivos físicos disponíveis:
nvme_prefix="STORAGE_PREFIX" nvme_list=$(ls "$nvme_prefix"*) sudo vgcreate VOLUME_GROUP ${nvme_list}
Substitua:
STORAGE_PREFIX
: o prefixo do caminho dos discos locais de destino que são anexados a uma máquina virtual usando a interface NVMe (memória não volátil express). Por exemplo, em Google Cloud, os caminhos do dispositivo NVMe sempre começam com/dev/nvme0n
.VOLUME_GROUP
: o nome de um grupo de volumes em que os SSDs são combinados, por exemplo,omni-disk-cache-volume
.
-
Para criar um volume lógico com a capacidade livre do grupo de volumes da etapa anterior, use o seguinte comando:
sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP
Substitua
LOGICAL_VOLUME
pelo nome de um volume lógico que é tratado como uma partição pelo LVM, por exemplo,omni_disk_cache_device
. - Crie o sistema de arquivos
ext4
no volume lógico. Se necessário, você pode especificar outras opções deext4
sujeitas à segurança de dados.sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
Para criar um diretório que sirva como ponto de montagem na máquina host e montar o sistema de arquivos, use o seguinte comando:
sudo mkdir /OMNI_DISK_CACHE_DIRECTORY sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_DISK_CACHE_DIRECTORY
Substitua
OMNI_DISK_CACHE_DIRECTORY
pelo nome do diretório ou um caminho para o diretório que serve como ponto de montagem, por exemplo,omni_disk_cache_directory
.
Montar o diretório de cache no AlloyDB Omni
Antes de ativar o cache do disco para o AlloyDB Omni em execução em um contêiner, monte o diretório de cache no AlloyDB Omni.
Para saber como instalar e personalizar o AlloyDB Omni usando uma imagem do Docker, consulte Personalizar a instalação do AlloyDB Omni.
Para montar o OMNI_DISK_CACHE_DIRECTORY
no contêiner do Docker que executa o AlloyDB Omni, use o seguinte comando:
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
Substitua:
CONTAINER_NAME
: o nome para atribuir o novo contêiner do AlloyDB Omni, por exemplo,my-omni
.PASSWORD
: a senha do administrador raiz do banco de dados do PostgreSQL.DATA_DIR
: o caminho do sistema de arquivos que você quer que o AlloyDB Omni use para o diretório de dados.CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
: o diretório de cache dentro do contêiner do AlloyDB Omni que é associado ao ponto de montagem na máquina host. Por exemplo, com base no valor do diretório de cache dentro do contêiner,/omni_disk_cache_directory
, semelhante aOMNI_DISK_CACHE_DIRECTORY
ou/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
Substitua:
CONTAINER_NAME
: o nome para atribuir o novo contêiner do AlloyDB Omni, por exemplo,my-omni
.PASSWORD
: a senha do administrador raiz do banco de dados do PostgreSQL.CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
: o diretório de cache dentro do contêiner do AlloyDB Omni que é associado ao ponto de montagem na máquina host. Por exemplo, com base no valor do diretório de cache dentro do contêiner,/omni_disk_cache_directory
, semelhante aOMNI_DISK_CACHE_DIRECTORY
ou/disk/cache/inside/container
.
Para conceder permissões de acesso total ao OMNI_DISK_CACHE_DIRECTORY
montado, use os seguintes comandos:
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
Ativar o cache de disco do AlloyDB Omni para o AlloyDB Omni em execução em um contêiner
Para ativar o cache de disco do AlloyDB Omni no seu banco de dados, defina os parâmetros de configuração unificada (GUC, na sigla em inglês) apropriados depois de garantir que o diretório de cache montado seja acessível dentro do contêiner do Docker.
-
Para se conectar ao banco de dados AlloyDB Omni contêinerizado como superusuário, use o seguinte comando:
Docker
sudo docker exec -it CONTAINER_NAME psql -h localhost -U postgres
Podman
sudo podman exec -it CONTAINER_NAME psql -h localhost -U postgres
-
Para definir o valor dos parâmetros, use os seguintes comandos no banco de dados AlloyDB Omni:
alter system set omni_disk_cache_enabled=on; alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
-
Por padrão, o AlloyDB Omni usa todo o espaço disponível no sistema de arquivos. É possível substituir o valor padrão usando o parâmetro
omni_disk_cache_file_size
, se necessário.alter system set omni_disk_cache_file_size=SIZE_IN_MB;
-
Para que a mudança nos parâmetros de configuração do cache entre em vigor, reinicie o contêiner em execução com o AlloyDB Omni:
Docker
sudo docker restart CONTAINER_NAME
Podman
sudo podman restart CONTAINER_NAME
Kubernetes
Ativar o cache de disco em um volume genérico
É possível ativar o cache em disco usando um volume genérico.
Para ativar o cache de disco em um volume genérico no operador AlloyDB Omni Kubernetes, você precisa de um volume persistente pronto com antecedência e um storageClass
.
Por exemplo, se você usa o GKE e não tem o volume persistente e o storageClass
prontos, verifique se fez o seguinte antes de ativar o cache de disco em um volume genérico:
- Crie um cluster com armazenamento local baseado em SSD.
- Formatar o volume para o sistema de arquivos ext4 usando a etapa 1 de Executar o provisionador estático do volume local.
- Crie manualmente um volume permanente para cada SSD no cluster com o
storageClass
que define o armazenamento permanente em um dispositivo de armazenamento.
Para ativar o cache de disco em um volume genérico para seu banco de dados, siga estas etapas:
Modifique o manifesto do cluster do banco de dados para adicionar o atributo
ultraFastCache
à seçãofeatures
da seçãospec
:apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: CLUSTER_NAME spec: databaseVersion: "15.7.0" primarySpec: features: ultraFastCache: cacheSize: DISK_CACHE_SIZE genericVolume: storageClass: "STORAGE_CLASS_NAME" ...
Substitua:
DB_CLUSTER_NAME
: o nome do cluster do banco de dados. É o mesmo nome do cluster de banco de dados que você declarou ao criar.DISK_CACHE_SIZE
: o tamanho do cache, por exemplo,100Gi
. Deve ser maior do queshared_buffers
. Este campo é opcional. Se você não especificar o valor desse campo, o AlloyDB Omni vai usar todo o espaço disponível no disco, o que se aplica ao AlloyDB Omni em um contêiner e em um cluster do Kubernetes.STORAGE_CLASS_NAME
: o nome dostorage class
do volume de cache ultrarrápido. Por exemplo,local-storage
.
- Reaplique o manifesto.
Ativar o cache de disco em um volume local
Se você quiser usar um volume local, não é necessário criar um volume permanente. Use a otimização abaixo.
Por exemplo, se você usa o GKE e não tem o volume persistente e o storageClass
prontos, verifique se fez o seguinte antes de ativar o cache de disco em um volume local:
- Criou um cluster com armazenamento local baseado em SSD.
- Formatar o volume para o sistema de arquivos ext4 usando a etapa 1 de Executar o provisionador estático do volume local.
Para ativar o cache de disco em um volume local para seu banco de dados, faça o seguinte:
Modifique o manifesto do cluster do banco de dados para adicionar o atributo
ultraFastCache
à seçãofeatures
da seçãospec
:apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: CLUSTER_NAME spec: databaseVersion: "15.7.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" ...
Substitua:
CLUSTER_NAME
: o nome do cluster do banco de dados. É o mesmo nome do cluster de banco de dados que você declarou ao criar.DISK_CACHE_SIZE
: o tamanho do cache, por exemplo,100Gi
. Deve ser maior do queshared_buffers
. Este campo é opcional. Se você não especificar o valor desse campo, o AlloyDB Omni vai usar todo o espaço disponível no disco, o que se aplica ao AlloyDB Omni em um contêiner e em um cluster do Kubernetes.STORAGE_CLASS_NAME
: o nome da classe de armazenamento.LOCAL_VOLUME_PATH
: o caminho para o volume local, por exemplo,/mnt/disks/raid/0
.LABEL_KEY
: o rótulo do nó para a chave que serve como um indicador de local e facilita a distribuição uniforme de pods no cluster, por exemplo,cloud.google.com/gke-local-nvme-ssd
.OPERATOR_VALUE
: a relação da chave com um conjunto de valores, por exemplo,In
. Defina o parâmetro como um dos seguintes:-
In
: o array de valores não pode estar vazio. -
NotIn
: o array de valores não pode estar vazio. -
Exists
: a matriz de valores precisa estar vazia. -
DoesNotExist
: a matriz de valores precisa estar vazia. -
Gt
: a matriz de valores precisa ter um único elemento, que é interpretado como um número inteiro. -
Lt
: a matriz de valores precisa ter um único elemento, que é interpretado como um número inteiro.
-
LABEL_KEY_VALUE
: o valor da chave do rótulo, por exemplo,true
. Defina o parâmetro como uma matriz de valores de string da seguinte maneira:- Se o operador for
In
ouNotIn
, a matriz de valores precisa estar preenchida. - Se o operador for
Exists
ouDoesNotExist
, a matriz de valores precisa estar vazia. - Se o operador for
Gt
ouLt
, a matriz de valores precisará ter um único elemento, que será interpretado como um número inteiro.
- Se o operador for
- Reaplique o manifesto.
Verificar a configuração do cache do disco
Depois de ativar o cache de disco do AlloyDB Omni, verifique se ele é acessado monitorando a atividade de leitura e gravação nos discos usando os utilitários disponíveis, como iotop
ou iostat
.
Além disso, é possível verificar se o cache de disco do AlloyDB Omni está aberto.
As etapas usadas para verificar a configuração do cache em disco do AlloyDB Omni dependem se você executa o AlloyDB Omni em um contêiner ou em um cluster do Kubernetes.
Servidor único
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"
Kubernetes
kubectl exec -i $DATABASE_POD -c database -n $DBCLUSTER_NAMESPACE -- cat /obs/diagnostic/postgresql.log | grep "opened omni disk cache"
Se o armazenamento em cache do disco estiver configurado corretamente, a mensagem Successfully opened omni disk cache ...
vai aparecer nos registros.
A seguir
- Sobre o gerenciamento automático de memória
- Sobre discos SSD locais
- Como criar e iniciar uma instância de VM