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.
Tópicos
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
. Ords_superuser
tem esse privilégio; portanto, o usuário principal também o tem. Ords_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 tousername
; -
É 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 |
---|---|
|
|
|
|
|
Este parâmetro determina como as divisões de fragmento iniciadas pelo sistema são finalizadas. O valor pode ser um dos seguintes:
Para obter mais informações, consulte Finalizar divisões de fragmentos. notaEste 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 campomessage
contém o ID da instância do novo fragmento. -
FAILED
: o trabalho de divisão de fragmentos falhou. O campomessage
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.