

# División de una partición en un grupo de particiones de base de datos
<a name="limitless-shard-split"></a>

Puede dividir manualmente una partición de un grupo de particiones de base de datos en dos particiones más pequeñas. Esto se denomina división de particiones *iniciada por el usuario*.

Base de datos ilimitada de Aurora PostgreSQL también puede dividir las particiones si contienen grandes cantidades de datos o se usan con mucha frecuencia. Esto se denomina división de particiones *iniciada por el sistema*.

**Topics**
+ [Requisitos previos](#limitless-shard-split.prereqs)
+ [División de una partición](#limitless-shard-split.proc)
+ [Seguimiento de divisiones de particiones](#limitless-shard-split.track)
+ [Finalización de las divisiones de particiones](#limitless-shard-split.finalize)
+ [Cancelación de la división de particiones](#limitless-shard-split.cancel)

## Requisitos previos
<a name="limitless-shard-split.prereqs"></a>

Las divisiones de particiones iniciadas por el usuario tienen los siguientes requisitos previos:
+ Debe tener un grupo de particiones de base de datos.
+ El grupo de particiones de base de datos no puede estar vacío: debe contener al menos una tabla particionada.
+ Un usuario debe tener el privilegio `rds_aurora_limitless_cluster_admin`. El `rds_superuser` tiene este privilegio; por lo tanto, el usuario maestro también lo tiene. El `rds_superuser` puede conceder el privilegio a otros usuarios:

  ```
  /* Logged in as the master user or a user with rds_superuser privileges */
  CREATE USER username;
  GRANT rds_aurora_limitless_cluster_admin to username;
  ```
+ Debe conocer el ID del subclúster (nodo) de la partición que desea dividir. Puede obtener el ID realizando la siguiente 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 la división de particiones iniciada por el sistema, debe establecer los siguientes parámetros de clúster de base de datos en un grupo de parámetros de clúster de base de datos personalizado asociado a su clúster de base de datos:


| Parámetro | Valor | 
| --- | --- | 
|  `rds_aurora.limitless_enable_auto_scale`  |  `on`  | 
|  `rds_aurora.limitless_auto_scale_options`  |  Indique `split_shard` o `add_router,split_shard`  | 
|  `rds_aurora.limitless_finalize_split_shard_mode`  |  Esta parámetro determina cómo finalizan las divisiones de particiones *iniciadas por el sistema*. El valor puede ser uno de los siguientes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/AuroraUserGuide/limitless-shard-split.html) Para obtener más información, consulte [Finalización de las divisiones de particiones](#limitless-shard-split.finalize).  Este parámetro solo se aplica a divisiones de particiones iniciadas por el sistema.   | 

Para obtener más información, consulte [Grupos de parámetros de clústeres de base de datos para clústeres de base de datos en Amazon Aurora](USER_WorkingWithDBClusterParamGroups.md).

## División de una partición
<a name="limitless-shard-split.proc"></a>

Para dividir una partición en un grupo de particiones de base de datos, utilice la función `rds_aurora.limitless_split_shard`. Esta función inicia un trabajo de división de particiones que se ejecuta de forma asíncrona.

```
SELECT rds_aurora.limitless_split_shard('subcluster_id');
```

Espere a que se devuelva el ID del trabajo cuando el trabajo se haya enviado correctamente, por ejemplo:

```
SELECT rds_aurora.limitless_split_shard('3');

    job_id
---------------
 1691300000000
(1 row)
```

**nota**  
No se admiten las operaciones concurrentes de división de particiones. Ejecute cada operación secuencialmente y complete cada operación antes de iniciar otra operación de agregación.

## Seguimiento de divisiones de particiones
<a name="limitless-shard-split.track"></a>

Puede usar el ID del trabajo para realizar el seguimiento de un trabajo de división de particiones. Para describir un trabajo en particular y obtener más detalles sobre él, ejecute la siguiente consulta:

```
SELECT * FROM rds_aurora.limitless_list_shard_scale_jobs(job_id);
```

Por ejemplo:

```
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)
```

La consulta devuelve un error cuando se pasa un trabajo inexistente como entrada.

```
SELECT * from rds_aurora.limitless_list_shard_scale_jobs(1691300000001);

ERROR:  no job found with the job ID provided
```

Puede realizar un seguimiento del estado de todos los trabajos de división de particiones con la misma consulta sin un ID de trabajo, por ejemplo:

```
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)
```

El estado del trabajo puede ser uno de los siguientes:
+ `IN_PROGRESS`: el trabajo de división de particiones se ha enviado y está en curso. Solo puede tener un trabajo en curso a la vez.
+ `PENDING`: el trabajo de división de particiones está esperando a que lo finalice. Para obtener más información, consulte [Finalización de las divisiones de particiones](#limitless-shard-split.finalize).
+ `CANCELLATION_IN_PROGRESS`: el usuario está cancelando el trabajo de división de particiones.
+ `CANCELED`: el usuario o el sistema han cancelado correctamente el trabajo de división de particiones.
+ `SUCCESS`: el trabajo de división de particiones se ha completado correctamente. El campo `message` contiene el ID de instancia de la nueva partición.
+ `FAILED`: el trabajo de división de particiones ha fallado. El campo `message` contiene los detalles del error y cualquier acción que se pueda tomar como seguimiento del trabajo fallido.

## Finalización de las divisiones de particiones
<a name="limitless-shard-split.finalize"></a>

La finalización es el último paso del proceso de división de particiones. Esta tarea provoca algunos tiempos de inactividad. Si inicia un trabajo de división de particiones, la finalización se produce inmediatamente después de que el trabajo se complete correctamente.

A veces, el sistema divide las particiones en función de la carga de trabajo, cuando activa las divisiones de particiones iniciadas por el sistema con el parámetro `rds_aurora.limitless_enable_auto_scale`.

En este caso, puede elegir si quiere que la finalización se produzca inmediatamente o en el momento que desee. Utilice el parámetro de clúster de bases de datos `rds_aurora.limitless_finalize_split_shard_mode` para elegir cuándo ocurrirá:
+ Si establece el valor en `immediate`, ocurrirá inmediatamente.
+ Si establece el valor en `user_initiated`, tendrá que finalizar el trabajo de división de particiones manualmente.

  Se le envía un evento de RDS y el estado del trabajo de división de particiones se establece en `PENDING`.

Cuando se establece en `user_initiated`, utiliza la función `rds_aurora.limitless_finalize_split_shard` para finalizar el trabajo de división de particiones:

```
SELECT * FROM rds_aurora.limitless_finalize_split_shard(job_id);
```

**nota**  
Esta función solo se aplica a las divisiones de particiones iniciadas por el sistema, no por usted.

## Cancelación de la división de particiones
<a name="limitless-shard-split.cancel"></a>

Puede cancelar una división de particiones iniciada por el usuario o por el sistema, es decir, `IN_PROGRESS` o `PENDING`. Para cancelarlo, necesita el ID del trabajo.

```
SELECT * from rds_aurora.limitless_cancel_shard_scale_jobs(job_id);
```

No se devuelve ningún resultado a menos que haya un error. Puede hacer un seguimiento de la cancelación mediante una consulta de seguimiento del trabajo.