Dividir um fragmento em um grupo de fragmentos de banco de dados - Amazon Aurora

Dividir um fragmento em um grupo de fragmentos de banco de dados

Você pode dividir manualmente um fragmento em um grupo de fragmentos de banco de dados em dois fragmentos menores. Isso é chamado de divisão de fragmentos iniciada pelo usuário.

O Aurora PostgreSQL Limitless Database também pode dividir fragmentos quando eles têm grandes quantidades de dados ou um uso muito alto. Isso é chamado de divisão de fragmentos iniciada pelo sistema.

Pré-requisitos

As divisões de fragmento iniciadas pelo usuário têm os seguintes pré-requisitos:

  • É necessário ter um grupo de fragmentos de banco de dados.

  • O grupo de fragmentos de banco de dados não pode estar vazio: ele deve conter pelo menos uma tabela fragmentada.

  • Um usuário deve ter o privilégio rds_aurora_limitless_cluster_admin. O rds_superuser tem esse privilégio; portanto, o usuário principal também o tem. O rds_superuser pode conceder o privilégio a outros usuários:

    /* Logged in as the master user or a user with rds_superuser privileges */ CREATE USER username; GRANT rds_aurora_limitless_cluster_admin to username;
  • É necessário saber o ID do subcluster (nó) do fragmento que deseja dividir. É possível obter o ID usando a seguinte consulta:

    SELECT * FROM rds_aurora.limitless_subclusters; subcluster_id | subcluster_type ---------------+----------------- 1 | router 2 | router 3 | shard 4 | shard 5 | shard 6 | shard

Para habilitar divisões de fragmento iniciadas pelo sistema, defina os seguintes parâmetros de cluster de banco de dados em um grupo de parâmetros de cluster de banco de dados personalizado associado ao seu cluster de banco de dados:

Parameter Valor

rds_aurora.limitless_enable_auto_scale

on

rds_aurora.limitless_auto_scale_options

split_shard ou add_router,split_shard

rds_aurora.limitless_finalize_split_shard_mode

Este parâmetro determina como as divisões de fragmento iniciadas pelo sistema são finalizadas. O valor pode ser um dos seguintes:

  • user_initiated: você decide quando finalizar a divisão do fragmento. Este é o valor padrão.

  • immediate: as divisões de fragmentos são finalizadas imediatamente.

Para obter mais informações, consulte Finalizar divisões de fragmentos.

nota

Este parâmetro se aplica apenas a divisões de fragmento iniciadas pelo sistema.

Para obter mais informações, consulte Grupos de parâmetros do cluster de banco de dados para clusters de banco de dados do Amazon Aurora.

Dividir um fragmento

Para dividir um fragmento em um grupo de fragmentos de banco de dados, use a função rds_aurora.limitless_split_shard. Essa função inicia um trabalho de divisão de fragmentos que é executado de forma assíncrona.

SELECT rds_aurora.limitless_split_shard('subcluster_id');

Aguarde o retorno de um ID de trabalho após o envio bem-sucedido do trabalho, por exemplo:

SELECT rds_aurora.limitless_split_shard('3'); job_id --------------- 1691300000000 (1 row)
nota

Operações simultâneas de divisão de fragmentos não são aceitas. Execute todas as operações sequencialmente e conclua cada uma antes de iniciar outra operação de adição.

Rastrear divisões de fragmentos

É possível usar o ID do trabalho para rastrear um trabalho de divisão de fragmentos. Para descrever um trabalho específico e obter mais detalhes sobre ele, execute a seguinte consulta:

SELECT * FROM rds_aurora.limitless_list_shard_scale_jobs(job_id);

Por exemplo:

SELECT * FROM rds_aurora.limitless_list_shard_scale_jobs(1691300000000); job_id | action | job_details | status | submission_time | message ---------------+-------------+-----------------------+---------+------------------------+------------------------------------------- 1691300000000 | SPLIT_SHARD | Split Shard 3 by User | SUCCESS | 2023-08-06 05:33:20+00 | Scaling job succeeded. + | | | | | New shard instance with ID 7 was created. (1 row)

A consulta retorna um erro quando você passa um trabalho inexistente como entrada.

SELECT * from rds_aurora.limitless_list_shard_scale_jobs(1691300000001); ERROR: no job found with the job ID provided

É possível acompanhar o status de todos os trabalhos de divisão de fragmentos usando a mesma consulta sem um ID de trabalho, por exemplo:

SELECT * FROM rds_aurora.limitless_list_shard_scale_jobs(); job_id | action | job_details | status | submission_time | message ---------------+-------------+-----------------------+-------------+------------------------+-------------------------------------------------------------- 1691200000000 | SPLIT_SHARD | Split Shard 3 by User | IN_PROGRESS | 2023-08-05 01:46:40+00 | 1691300000000 | SPLIT_SHARD | Split Shard 4 by User | SUCCESS | 2023-08-06 05:33:20+00 | Scaling job succeeded. + | | | | | New shard instance with ID 7 was created. 1691400000000 | SPLIT_SHARD | Split Shard 5 by User | FAILED | 2023-08-07 09:20:00+00 | Error occurred for the add shard job 1691400000000. | | | | | Retry the command. If the issue persists, contact AWS Support. 1691500000000 | SPLIT_SHARD | Split Shard 5 by User | CANCELED | 2023-08-07 09:20:00+00 | Scaling job was cancelled. (4 rows)

O status de trabalho pode ser um dos seguintes:

  • IN_PROGRESS: o trabalho de divisão de fragmentos foi enviado e está em andamento. É possível ter apenas um trabalho em andamento por vez.

  • PENDING: o trabalho de divisão de fragmentos está aguardando sua finalização. Para obter mais informações, consulte Finalizar divisões de fragmentos.

  • CANCELLATION_IN_PROGRESS: o trabalho de divisão de fragmentos está sendo cancelado pelo usuário.

  • CANCELED: o trabalho de divisão de fragmentos foi cancelado com sucesso pelo usuário ou pelo sistema.

  • SUCCESS: o trabalho de divisão de fragmentos foi concluído com sucesso. O campo message contém o ID da instância do novo fragmento.

  • FAILED: o trabalho de divisão de fragmentos falhou. O campo message contém os detalhes da falha e todas as ações que podem ser tomadas como acompanhamento do trabalho que falhou.

Finalizar divisões de fragmentos

A finalização é a última etapa do processo de divisão de fragmentos. Isso causa algum tempo de inatividade. Se você iniciar um trabalho de divisão de fragmentos, a finalização ocorrerá imediatamente após a conclusão bem-sucedida do trabalho.

Às vezes, o sistema divide fragmentos com base na workload, quando você habilita as divisões de fragmentos iniciadas pelo sistema usando o parâmetro rds_aurora.limitless_enable_auto_scale.

Nesse caso, é possível escolher se a finalização acontece imediatamente ou em um horário que você escolher. Você usa o parâmetro de cluster de banco de dados rds_aurora.limitless_finalize_split_shard_mode para escolher quando isso acontece:

  • Se você definir o valor como immediate, isso acontecerá imediatamente.

  • Se você definir o valor como user_initiated, você precisará finalizar o trabalho de divisão de fragmentos manualmente.

    Um evento do RDS é enviado para você e o status do trabalho de divisão de fragmentos é definido como PENDING.

Quando definido como user_initiated, você usa a função rds_aurora.limitless_finalize_split_shard para finalizar o trabalho de divisão de fragmentos:

SELECT * FROM rds_aurora.limitless_finalize_split_shard(job_id);
nota

Essa função se aplica somente às divisões de fragmentos iniciadas pelo sistema, não por você.

Cancelar uma divisão de fragmentos

Você pode cancelar uma divisão de fragmentos iniciada pelo usuário ou pelo sistema que tenha o status IN_PROGRESS ou PENDING. Você precisa do ID do trabalho para cancelá-lo.

SELECT * from rds_aurora.limitless_cancel_shard_scale_jobs(job_id);

Nenhuma saída é retornada, a menos que haja um erro. É possível acompanhar o cancelamento usando uma consulta de rastreamento de trabalho.