

# Como usar o encaminhamento de gravação em um banco de dados global do Aurora MySQL
<a name="aurora-global-database-write-forwarding-ams"></a>

**Topics**
+ [Disponibilidade de região e versão do encaminhamento de gravação no Aurora MySQL](#aurora-global-database-write-forwarding-regions-versions-ams)
+ [Ativar o encaminhamento de gravação no Aurora MySQL](#aurora-global-database-write-forwarding-enabling-ams)
+ [Verificar se um cluster secundário está com o encaminhamento de gravação ativado no Aurora MySQL](#aurora-global-database-write-forwarding-describing-ams)
+ [Compatibilidade do SQL e de aplicações com o encaminhamento de gravação no Aurora MySQL](#aurora-global-database-write-forwarding-compatibility-ams)
+ [Isolamento e consistência para o encaminhamento de gravação no Aurora MySQL](#aurora-global-database-write-forwarding-isolation-ams)
+ [Executar instruções de várias partes com o encaminhamento de gravação no Aurora MySQL](#aurora-global-database-write-forwarding-multipart-ams)
+ [Transações com o encaminhamento de gravação no Aurora MySQL](#aurora-global-database-write-forwarding-txns-ams)
+ [Parâmetros de configuração para o encaminhamento de gravação no Aurora MySQL](#aurora-global-database-write-forwarding-params-ams)
+ [Métricas do Amazon CloudWatch para o encaminhamento de gravação no Aurora MySQL](#aurora-global-database-write-forwarding-cloudwatch-ams)
+ [Variáveis de status do Aurora MySQL para encaminhamento de gravação](#aurora-global-database-write-forwarding-status-ams)

## Disponibilidade de região e versão do encaminhamento de gravação no Aurora MySQL
<a name="aurora-global-database-write-forwarding-regions-versions-ams"></a>

O encaminhamento de gravação é compatível com o Aurora MySQL 2.08.1 e versões posteriores, em todas as regiões em que bancos de dados globais baseados no Aurora MySQL estão disponíveis.

Para ter informações sobre a disponibilidade de versões e regiões dos bancos de dados globais do Aurora, consulte [Bancos de dados globais do Aurora com o Aurora MySQL](Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.md#Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.amy).

## Ativar o encaminhamento de gravação no Aurora MySQL
<a name="aurora-global-database-write-forwarding-enabling-ams"></a>

Por padrão, o encaminhamento de gravação não está habilitado quando você adiciona um cluster secundário a um banco de dados global Aurora.

Para habilitar o encaminhamento de gravação usando o Console de gerenciamento da AWS, marque a caixa de seleção **Ativar o encaminhamento de gravação global** em **Encaminhamento de gravação de réplica de leitura** ao adicionar uma região para um banco de dados global. Quanto a um cluster secundário existente, modifique o cluster para **Ativar o encaminhamento de gravação global**. Para desativar o encaminhamento de gravação, desmarque a caixa de seleção **Ativar o encaminhamento de gravação global** ao adicionar a região ou modificar o cluster secundário.

 Para habilitar o encaminhamento de gravação usando a AWS CLI, use a opção `--enable-global-write-forwarding`. Essa opção funciona quando você cria um cluster secundário usando o comando `create-db-cluster`. Ela também funciona quando você modifica um cluster secundário existente usando o comando `modify-db-cluster`. Para isso, é necessário que o banco de dados global use uma versão do Aurora que ofereça suporte ao encaminhamento de gravação. É possível desabilitar o encaminhamento de gravação usando a opção `--no-enable-global-write-forwarding` com esses mesmos comandos da CLI. 

 Para habilitar o encaminhamento de gravação usando a API do Amazon RDS, defina o parâmetro `EnableGlobalWriteForwarding` como `true`. Esse parâmetro funciona quando você cria um cluster secundário usando a operação `CreateDBCluster`. Ele também funciona quando você modifica um cluster secundário existente usando a operação `ModifyDBCluster`. Para isso, é necessário que o banco de dados global use uma versão do Aurora que ofereça suporte ao encaminhamento de gravação. É possível desativar o encaminhamento de gravação definindo o parâmetro `EnableGlobalWriteForwarding` como `false`. 

**nota**  
Para que uma sessão de banco de dados use o encaminhamento de gravação, especifique uma configuração para o parâmetro de configuração `aurora_replica_read_consistency`. Faça isso em todas as sessões que usam o recurso de encaminhamento de gravação. Para obter informações sobre esse parâmetro, consulte [Isolamento e consistência para o encaminhamento de gravação no Aurora MySQL](#aurora-global-database-write-forwarding-isolation-ams).   
O recurso RDS Proxy não é compatível com o valor `SESSION` da variável `aurora_replica_read_consistency`. Definir esse valor pode causar um comportamento inesperado.

Os exemplos de CLI a seguir mostram como é possível configurar um banco de dados global Aurora com o encaminhamento de gravação habilitado ou desabilitado. Os itens destacados representam os comandos e as opções que são importantes especificar e manter consistentes ao configurar a infraestrutura para um banco de dados global Aurora. 

 O exemplo a seguir cria um banco de dados global Aurora, um cluster primário e um cluster secundário com o encaminhamento de gravação habilitado. Faça as substituições necessárias usando suas próprias opções de nome de usuário, senha e regiões principais e secundárias da AWS. 

```
# Create overall global database.
aws rds create-global-cluster --global-cluster-identifier write-forwarding-test \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region {{us-east-1}}

# Create primary cluster, in the same AWS Region as the global database.
aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \
  --db-cluster-identifier write-forwarding-test-cluster-1 \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --master-username {{user_name}} --master-user-password {{password}} \
  --region {{us-east-1}}

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \
  --db-instance-identifier write-forwarding-test-cluster-1-instance-1 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region {{us-east-1}}

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \
  --db-instance-identifier write-forwarding-test-cluster-1-instance-2 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region {{us-east-1}}

# Create secondary cluster, in a different AWS Region than the global database,
# with write forwarding enabled.
aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \
  --db-cluster-identifier write-forwarding-test-cluster-2 \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region {{us-east-2}} \
  --enable-global-write-forwarding

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region {{us-east-2}}

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region {{us-east-2}}
```

 O exemplo a seguir continua a partir do anterior. Ele cria um cluster secundário sem o encaminhamento de gravação habilitado e, depois, habilita o esse recurso. Após a conclusão desse exemplo, todos os clusters secundários no banco de dados global estarão com o encaminhamento de gravação habilitado.

```
# Create secondary cluster, in a different AWS Region than the global database,
# without write forwarding enabled.
aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \
  --db-cluster-identifier write-forwarding-test-cluster-2 \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region {{us-west-1}}

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region {{us-west-1}}

aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \
  --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \
  --db-instance-class db.r5.large \
  --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \
  --region {{us-west-1}}

aws rds modify-db-cluster --db-cluster-identifier write-forwarding-test-cluster-2 \
  --region {{us-east-2}} \
  --enable-global-write-forwarding
```

## Verificar se um cluster secundário está com o encaminhamento de gravação ativado no Aurora MySQL
<a name="aurora-global-database-write-forwarding-describing-ams"></a>

 Para determinar se é possível usar o encaminhamento de gravação em um cluster secundário, verifique se esse cluster tem o atributo `"GlobalWriteForwardingStatus": "enabled"`. 

No Console de gerenciamento da AWS, na guia **Configuração** da página de detalhes do cluster, você vê o status **Habilitado** para **Encaminhamento de gravação de réplica de leitura global**.

Para ver o status da configuração de encaminhamento de gravação global para todos os clusters, execute o seguinte comando da AWS CLI.

Um cluster secundário mostra o valor `"enabled"` ou `"disabled"` para indicar se o encaminhamento de gravação está ativado ou desativado. Um valor de `null` indica que o encaminhamento de gravação não está disponível para esse cluster. Nesse caso, o cluster não faz parte de um banco de dados global ou é o cluster primário em vez de um cluster secundário. O valor também poderá ser `"enabling"` ou `"disabling"` se o encaminhamento de gravação estiver no processo de ser ativado ou desativado.

**Example**  

```
aws rds describe-db-clusters \
--query '*[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus}'

[
    {
        "GlobalWriteForwardingStatus": "enabled",
        "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1"
    },
    {
        "GlobalWriteForwardingStatus": "disabled",
        "DBClusterIdentifier": "aurora-write-forwarding-test-replica-2"
    },
    {
        "GlobalWriteForwardingStatus": null,
        "DBClusterIdentifier": "non-global-cluster"
    }
]
```

 Para localizar apenas os clusters secundários que têm o encaminhamento de gravação global habilitado, execute o comando a seguir. Este comando também retorna o endpoint do leitor do cluster. Use o endpoint do leitor do cluster secundário ao usar o encaminhamento de gravação do secundário para o primário no banco de dados global Aurora. 

**Example**  

```
aws rds describe-db-clusters --query 'DBClusters[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus,ReaderEndpoint:ReaderEndpoint} | [?GlobalWriteForwardingStatus == `enabled`]'
[
    {
        "GlobalWriteForwardingStatus": "enabled",
        "ReaderEndpoint": "aurora-write-forwarding-test-replica-1.cluster-ro-cnpexample.us-west-2.rds.amazonaws.com",
        "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1"
    }
]
```

## Compatibilidade do SQL e de aplicações com o encaminhamento de gravação no Aurora MySQL
<a name="aurora-global-database-write-forwarding-compatibility-ams"></a>

É possível usar os seguintes tipos de instruções SQL com o encaminhamento de gravação:
+ Instruções de linguagem de manipulação de dados (DML), como `INSERT`, `DELETE` e `UPDATE`. Existem algumas restrições com relação às propriedades dessas instruções que podem ser usadas com o encaminhamento de gravação, conforme descrito a seguir.
+ Instruções `SELECT ... LOCK IN SHARE MODE` e `SELECT FOR UPDATE`.
+ Instruções `PREPARE` e `EXECUTE`.

 Certas instruções não são permitidas ou podem gerar resultados obsoletos ao serem usadas em um banco de dados global com o encaminhamento de gravação. Assim, a configuração `EnableGlobalWriteForwarding` é desativada por padrão para clusters secundários. Antes de ativá-la, verifique se o código do aplicativo não é afetado por nenhuma dessas restrições. 

 As restrições a seguir se aplicam às instruções SQL usadas com o encaminhamento de gravação. Em alguns casos, é possível usar as instruções em clusters secundários com o encaminhamento de gravação habilitado no nível do cluster. Essa abordagem funcionará se o encaminhamento de gravação não estiver ativado na sessão pelo parâmetro de configuração `aurora_replica_read_consistency`. Tentar usar uma instrução quando não é permitido devido ao encaminhamento de gravação exibe uma mensagem de erro com o seguinte formato. 

```
ERROR 1235 (42000): This version of MySQL doesn't yet support '{{operation}} with write forwarding'.
```

**Linguagem de definição de dados (DDL)**  
 Conecte-se ao cluster primário para executar essas instruções. Não é possível executá-las em instâncias de banco de dados do leitor.

**Atualizar uma tabela permanente usando dados de uma tabela temporária**  
 Você pode usar tabelas temporárias em clusters secundários com o encaminhamento de gravação habilitado. No entanto, não é possível usar uma instrução DML para modificar uma tabela permanente se a instrução se referir a uma tabela temporária. Por exemplo, não é possível usar uma instrução `INSERT ... SELECT` que usa os dados de uma tabela temporária. A tabela temporária existe no cluster secundário e não está disponível quando a instrução é executada no cluster primário. 

**Transações XA**  
 Não é possível usar as instruções a seguir em um cluster secundário quando o encaminhamento de gravação está ativado na sessão. Essas instruções podem ser usadas em clusters secundários que não têm o encaminhamento de gravação habilitado ou em sessões em que a configuração `aurora_replica_read_consistency` está vazia. Antes de ativar o encaminhamento de gravação em uma sessão, verifique se o código usa essas instruções.   

```
XA {START|BEGIN} xid [JOIN|RESUME]
XA END xid [SUSPEND [FOR MIGRATE]]
XA PREPARE xid
XA COMMIT xid [ONE PHASE]
XA ROLLBACK xid
XA RECOVER [CONVERT XID]
```

**Instruções LOAD para tabelas permanentes**  
 Não é possível usar as instruções a seguir em um cluster secundário com o encaminhamento de gravação habilitado.   

```
LOAD DATA INFILE 'data.txt' INTO TABLE t1;
        LOAD XML LOCAL INFILE 'test.xml' INTO TABLE t1;
```
 Você pode carregar dados em uma tabela temporária em um cluster secundário. No entanto, execute toda as instruções `LOAD` que se referem a tabelas permanentes apenas no cluster primário. 

**Instruções de plugin**  
 Não é possível usar as instruções a seguir em um cluster secundário com o encaminhamento de gravação habilitado.   

```
INSTALL PLUGIN example SONAME 'ha_example.so';
UNINSTALL PLUGIN example;
```

**Instruções SAVEPOINT**  
 Não é possível usar as instruções a seguir em um cluster secundário quando o encaminhamento de gravação está ativado na sessão. Você pode usar essas instruções em clusters secundários que não têm o encaminhamento de gravação habilitado ou em sessões em que a configuração `aurora_replica_read_consistency` está em branco. Verifique se o código usa essas instruções antes de ativar o encaminhamento de gravação em uma sessão.   

```
SAVEPOINT t1_save;
ROLLBACK TO SAVEPOINT t1_save;
RELEASE SAVEPOINT t1_save;
```

## Isolamento e consistência para o encaminhamento de gravação no Aurora MySQL
<a name="aurora-global-database-write-forwarding-isolation-ams"></a>

 Em sessões que usam o encaminhamento de gravação, só é possível usar o nível de isolamento `REPEATABLE READ`. Embora também seja possível usar o nível de isolamento `READ COMMITTED` com clusters somente leitura em regiões secundárias da AWS, esse nível de isolamento não funciona com o encaminhamento de gravação. Para obter informações sobre os níveis de isolamento `REPEATABLE READ` e `READ COMMITTED`, consulte [Níveis de isolamento do Aurora MySQL](AuroraMySQL.Reference.IsolationLevels.md). 

 É possível controlar o grau de consistência de leitura em um cluster secundário. O nível de consistência de leitura determina quanto o cluster secundário espera antes de cada operação de leitura para garantir que algumas ou todas as alterações sejam replicadas do cluster primário. Você pode ajustar o nível de consistência de leitura para garantir que todas as operações de gravação encaminhadas da sessão estejam visíveis no cluster secundário antes de qualquer consulta subsequente. Você também pode usar essa configuração para garantir que as consultas no cluster secundário sempre vejam as atualizações mais atuais do cluster primário. Isso acontece mesmo para aquelas submetidas por outras sessões ou outros clusters. Para especificar esse tipo de comportamento para o aplicativo, escolha um valor para o parâmetro de nível de sessão `aurora_replica_read_consistency`. 

**Importante**  
Sempre defina o parâmetro `aurora_replica_read_consistency` para qualquer sessão para a qual você deseja encaminhar gravações. Caso contrário, o Aurora não habilita o encaminhamento de gravação para essa sessão. Esse parâmetro tem um valor vazio por padrão, então escolha um valor específico quando você usar esse parâmetro. O parâmetro `aurora_replica_read_consistency` tem efeito somente em clusters secundários nos quais o encaminhamento de gravação está habilitado.  
Para o Aurora MySQL versão 2 e versão 3 anterior à 3.04, use `aurora_replica_read_consistency` como uma variável de sessão. Para o Aurora MySQL versão 3.04 e posterior, você pode usar `aurora_replica_read_consistency` como uma variável de sessão ou como um parâmetro de cluster de banco de dados.

 Para o parâmetro `aurora_replica_read_consistency`, é possível especificar os valores `EVENTUAL`, `SESSION` e `GLOBAL`. 

 À medida que você aumenta o nível de consistência, a aplicação passa mais tempo aguardando as alterações serem propagadas entre regiões da AWS. Você pode escolher o equilíbrio entre o tempo de resposta rápido e a garantia de que as alterações feitas em outros locais estejam totalmente disponíveis antes da execução das consultas. 

 Com a consistência de leitura definida como `EVENTUAL`, as consultas em uma região secundária da AWS que usa o encaminhamento de gravação podem ver dados ligeiramente obsoletos devido ao atraso de replicação. Os resultados das operações de gravação na mesma sessão não ficam visíveis até que a operação de gravação seja executada na região primária e replicada para a região atual. A consulta não espera que os resultados atualizados estejam disponíveis. Assim, ela pode recuperar os dados mais antigos ou os dados atualizados, dependendo do tempo das declarações e da quantidade de atraso da replicação. 

 Com a consistência de leitura definida como `SESSION`, todas as consultas em uma região secundária da AWS que usa o encaminhamento de gravação veem os resultados de todas as alterações feitas nessa sessão. As alterações são visíveis independentemente de a transação ser confirmada. Se necessário, a consulta aguardará que os resultados das operações de gravação encaminhadas sejam replicados para a região atual. Ele não aguarda resultados atualizados de operações de gravação realizadas em outras regiões ou em outras sessões da região atual. 

 Com a consistência de leitura definida como `GLOBAL`, uma sessão em uma região secundária da AWS vê as alterações feitas por essa sessão. Também vê todas as alterações confirmadas da região principais da AWS e das outras regiões secundárias da AWS. Cada consulta pode aguardar por um período que varia de acordo com a quantidade de atraso da sessão. A consulta prossegue quando o cluster secundário está atualizado com todos os dados confirmados do cluster primário, a partir do momento em que a consulta foi iniciada. 

 Para obter mais informações sobre todos os parâmetros envolvidos no encaminhamento de gravação, consulte [Parâmetros de configuração para o encaminhamento de gravação no Aurora MySQL](#aurora-global-database-write-forwarding-params-ams). 

### Exemplos de uso do encaminhamento de gravação
<a name="aurora-global-database-write-forwarding-examples-ams"></a>

Esses exemplos usam `aurora_replica_read_consistency` como uma variável de sessão. Para o Aurora MySQL versão 3.04 e posterior, você pode usar `aurora_replica_read_consistency` como uma variável de sessão ou como um parâmetro de cluster de banco de dados.

No exemplo a seguir, o cluster primário está na Região da US East (N. Virginia). O cluster secundário está na região da Leste dos EUA (Ohio). O exemplo mostra os efeitos da execução de instruções `INSERT` seguidas por instruções `SELECT`. Dependendo do valor da configuração `aurora_replica_read_consistency`, os resultados podem diferir dependendo do tempo das instruções. Para obter maior consistência, você pode esperar brevemente antes de emitir a instrução `SELECT`. Ou Aurora pode esperar automaticamente até que os resultados terminem a replicação antes de prosseguir `SELECT`.

Neste exemplo, há uma configuração de consistência de leitura de `eventual`. Executar uma instrução `INSERT` imediatamente seguida por uma instrução `SELECT` ainda retorna o valor de `COUNT(*)`. Esse valor reflete o número de linhas antes que a nova linha seja inserida. Executar `SELECT` novamente, pouco tempo depois, retornará a contagem de linhas atualizada. As declarações `SELECT` não aguardam.

```
mysql> set aurora_replica_read_consistency = 'eventual';
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)
mysql> insert into t1 values (6); select count(*) from t1;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)
```

Com uma configuração de consistência de leitura de `session`, uma declaração `SELECT` imediatamente após `INSERT` aguarda até que as alterações da declaração `INSERT` sejam visíveis. Declarações `SELECT` subsequentes não aguardam.

```
mysql> set aurora_replica_read_consistency = 'session';
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.01 sec)
mysql> insert into t1 values (6); select count(*) from t1; select count(*) from t1;
Query OK, 1 row affected (0.08 sec)
+----------+
| count(*) |
+----------+
|        7 |
+----------+
1 row in set (0.37 sec)
+----------+
| count(*) |
+----------+
|        7 |
+----------+
1 row in set (0.00 sec)
```

 Com a configuração de consistência de leitura ainda definida como `session`, a introdução de uma breve espera após a execução de uma instrução `INSERT` torna a contagem de linhas atualizada disponível no momento em que a próxima instrução `SELECT` é executada. 

```
mysql> insert into t1 values (6); select sleep(2); select count(*) from t1;
Query OK, 1 row affected (0.07 sec)
+----------+
| sleep(2) |
+----------+
|        0 |
+----------+
1 row in set (2.01 sec)
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.00 sec)
```

 Com uma configuração de consistência de leitura de `global`, cada instrução `SELECT` aguarda para garantir que todas as alterações de dados a partir da hora de início da instrução estejam visíveis antes de executar a consulta. A quantidade de espera por cada instrução `SELECT` varia de acordo com a quantidade de atraso de replicação entre os clusters primário e secundário. 

```
mysql> set aurora_replica_read_consistency = 'global';
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.75 sec)
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.37 sec)
mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.66 sec)
```

## Executar instruções de várias partes com o encaminhamento de gravação no Aurora MySQL
<a name="aurora-global-database-write-forwarding-multipart-ams"></a>

 Uma instrução DML pode consistir em várias partes, como uma instrução `INSERT ... SELECT` ou uma instrução `DELETE ... WHERE`. Nesse caso, a instrução inteira é encaminhada para o cluster primário e executada nele.

## Transações com o encaminhamento de gravação no Aurora MySQL
<a name="aurora-global-database-write-forwarding-txns-ams"></a>

 Se a transação é encaminhada para o cluster primário depende do modo de acesso da transação. É possível especificar o modo de acesso da transação usando a instrução `SET TRANSACTION` ou a instrução `START TRANSACTION`. Você também pode especificar o modo de acesso da transação alterando o valor da sessão [transaction\_read\_only](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_transaction_read_only). Você só pode alterar esse valor de sessão enquanto estiver conectado a um cluster de banco de dados que tenha o encaminhamento de gravação habilitado.

 Se uma transação de longa duração não emitir nenhuma instrução por um período substancial, ela poderá exceder o tempo limite ocioso. Este período tem um padrão de um minuto. Você pode aumentá-lo para até um dia. Uma transação que excede o tempo limite ocioso é cancelada pelo cluster primário. A instrução subsequente enviada recebe um erro de tempo limite. Depois, o Aurora reverte a transação. 

 Esse tipo de erro pode ocorrer em outros casos quando o encaminhamento de gravação fica indisponível. Por exemplo, o Aurora cancelará todas as transações que usam o encaminhamento de gravação se você reiniciar o cluster primário ou se desativar a configuração de encaminhamento de gravação. 

## Parâmetros de configuração para o encaminhamento de gravação no Aurora MySQL
<a name="aurora-global-database-write-forwarding-params-ams"></a>

 Os parameter groups de cluster do Aurora incluem configurações para o recurso de encaminhamento de gravação. Como são parâmetros de cluster, todas as instâncias de banco de dados em cada cluster têm os mesmos valores para essas variáveis. Detalhes sobre esses parâmetros são resumidos na tabela a seguir, com notas de uso após a tabela.


| Nome | Escopo | Type | Valor padrão | Valores válidos | 
| --- | --- | --- | --- | --- | 
| aurora\_fwd\_master\_idle\_timeout (Aurora MySQL versão 2) | Global  | inteiro não assinado | 60 | 1–86.400 | 
| aurora\_fwd\_master\_max\_connections\_pct (Aurora MySQL versão 2) | Global | inteiro longo não assinado | 10 | 0–90 | 
| aurora\_fwd\_writer\_idle\_timeout (Aurora MySQL versão 3) | Global | inteiro não assinado | 60 | 1–86.400 | 
| aurora\_fwd\_writer\_max\_connections\_pct (Aurora MySQL versão 3) | Global | inteiro longo não assinado | 10 | 0–90 | 
| aurora\_replica\_read\_consistency | Sessão para versão 2 e versão 3 inferior a 3.04, Global para versão 3.04 e posterior | Enum | '' (null) | EVENTUAL, SESSION, GLOBAL | 

Para controlar as solicitações de gravação recebidas de clusters secundários, use estas configurações no cluster primário: 
+  `aurora_fwd_master_idle_timeout`, `aurora_fwd_writer_idle_timeout`: o número de segundos que o cluster primário aguarda atividades em uma conexão encaminhada de um cluster secundário antes de a encerrar. Se a sessão permanecer ociosa além desse período, o Aurora cancelará a sessão. 
+  `aurora_fwd_master_max_connections_pct`, `aurora_fwd_writer_max_connections_pct`: o limite máximo em conexões de banco de dados que podem ser utilizadas em uma instância de banco de dados de gravador para lidar com consultas encaminhadas de leitores. Ele é expresso como uma porcentagem da configuração `max_connections` para a instância de banco de dados de gravador no cluster primário. Por exemplo, se `max_connections` for 800 e `aurora_fwd_master_max_connections_pct` ou `aurora_fwd_writer_max_connections_pct` for 10, o gravador permitirá um máximo de 80 sessões encaminhadas simultâneas. Essas conexões vêm do mesmo grupo de conexões gerenciado pela configuração `max_connections`. 

   Essa configuração se aplica somente ao cluster primário, quando um ou mais clusters secundários têm o encaminhamento de gravação habilitado. Se você diminuir o valor, as conexões existentes não serão afetadas. O Aurora leva o novo valor da configuração em conta ao tentar criar uma nova conexão a partir de um cluster secundário. O valor padrão é 10, representando 10% do valor `max_connections`. Se você habilitar o encaminhamento de consulta em qualquer um dos clusters secundários, essa configuração deverá ter um valor diferente de zero para que as operações de gravação de clusters secundários sejam bem-sucedidas. Se o valor for zero, as operações de gravação receberão o código de erro `ER_CON_COUNT_ERROR` com a mensagem `Not enough connections on writer to handle your request`. 

O parâmetro `aurora_replica_read_consistency` habilita o encaminhamento de gravação. Você o usa em cada sessão. Você pode especificar `EVENTUAL`, `SESSION` ou `GLOBAL` no nível de consistência de leitura. Para saber mais sobre os níveis de consistência, consulte [Isolamento e consistência para o encaminhamento de gravação no Aurora MySQL](#aurora-global-database-write-forwarding-isolation-ams). As seguintes regras se aplicam a esse parâmetro:
+  O valor padrão é " (vazio). 
+ O encaminhamento de gravação só estará disponível em uma sessão se `aurora_replica_read_consistency` estiver definido como `EVENTUAL`, `SESSION` ou `GLOBAL`. Esse parâmetro é relevante somente em instâncias de leitor de clusters secundários que têm o encaminhamento de gravação habilitado e que estão em um banco de dados global Aurora. 
+  Você não pode definir essa variável (quando vazia) ou não definida (quando já estiver definida) dentro de uma transação de várias instruções. No entanto, você pode alterá-lo de um valor válido (`EVENTUAL`,`SESSION` ou `GLOBAL`) para outro valor válido (`EVENTUAL`, `SESSION` ou `GLOBAL`) durante essa transação. 
+  A variável não pode ser `SET` quando o encaminhamento de gravação não está habilitado no cluster secundário.

## Métricas do Amazon CloudWatch para o encaminhamento de gravação no Aurora MySQL
<a name="aurora-global-database-write-forwarding-cloudwatch-ams"></a>

 As métricas do Amazon CloudWatch a seguir se aplicam ao cluster primário quando você usa o encaminhamento de gravação em um ou mais clusters secundários. Essas métricas são todas medidas na instância de banco de dados de gravador no cluster primário. 


| Métrica do CloudWatch | Unidade | Descrição | 
| --- | --- | --- | 
| `AuroraDMLRejectedMasterFull` | Contagem | O número de consultas encaminhadas que são rejeitadas porque a sessão está cheia na instância de banco de dados do gravador.<br />Para o Aurora MySQL versão 2. | 
| `AuroraDMLRejectedWriterFull` | Contagem | O número de consultas encaminhadas que são rejeitadas porque a sessão está cheia na instância de banco de dados do gravador.<br />Para o Aurora MySQL versão 3. | 
| `ForwardingMasterDMLLatency` | Milissegundos | Tempo médio para processar cada declaração DML encaminhada na instância de banco de dados de gravador.<br />Não inclui o tempo para o cluster secundário encaminhar a solicitação de gravação nem o tempo para replicar as alterações de volta no cluster secundário.<br />Para o Aurora MySQL versão 2. | 
| `ForwardingMasterDMLThroughput` | Contagem por segundo | Número de instruções DML encaminhadas processadas a cada segundo por essa instância de banco de dados de gravador.<br />Para o Aurora MySQL versão 2. | 
| `ForwardingMasterOpenSessions` | Contagem | Número de sessões encaminhadas na instância de banco de dados de gravador.<br />Para o Aurora MySQL versão 2. | 
| `ForwardingWriterDMLLatency` | Milissegundos | Tempo médio para processar cada declaração DML encaminhada na instância de banco de dados de gravador.<br />Não inclui o tempo para o cluster secundário encaminhar a solicitação de gravação nem o tempo para replicar as alterações de volta no cluster secundário.<br />Para o Aurora MySQL versão 3. | 
| `ForwardingWriterDMLThroughput` | Contagem por segundo | Número de instruções DML encaminhadas processadas a cada segundo por essa instância de banco de dados de gravador.Para o Aurora MySQL versão 3. | 
| `ForwardingWriterOpenSessions` | Contagem | Número de sessões encaminhadas na instância de banco de dados de gravador.Para o Aurora MySQL versão 3. | 

 As métricas do CloudWatch a seguir se aplicam a cada cluster secundário. Essas métricas são medidas em cada instância de banco de dados de leitor em um cluster secundário com o encaminhamento de gravação habilitado. 


| Métrica do CloudWatch | Unidade | Descrição | 
| --- | --- | --- | 
| `ForwardingReplicaDMLLatency` | Milissegundos | Tempo médio de resposta de DMLs encaminhadas na réplica. | 
| `ForwardingReplicaDMLThroughput` | Contagem por segundo | Número de instruções DML encaminhadas processadas por segundo. | 
| `ForwardingReplicaOpenSessions` | Contagem | O número de sessões que estão usando o encaminhamento de gravação em uma instância de banco de dados do leitor. | 
| `ForwardingReplicaReadWaitLatency` | Milissegundos | Tempo médio de espera que uma declaração `SELECT` em uma instância de banco de dados do leitor aguarda para alcançar o cluster primário.<br />O grau em que a instância de banco de dados de leitor aguarda antes de processar uma consulta depende da configuração `aurora_replica_read_consistency`. | 
| `ForwardingReplicaReadWaitThroughput` | Contagem por segundo | Número total de instruções SELECT processadas a cada segundo em todas as sessões que estão encaminhando gravações. | 
|  `ForwardingReplicaSelectLatency` | Milissegundos | Encaminhamento de latência de SELECT, média sobre todas as instruções SELECT encaminhadas dentro do período de monitoramento. | 
|  `ForwardingReplicaSelectThroughput` | Contagem por segundo | Encaminhamento de throughput de SELECT por média de segundos no período de monitoramento. | 

## Variáveis de status do Aurora MySQL para encaminhamento de gravação
<a name="aurora-global-database-write-forwarding-status-ams"></a>

 As variáveis de status do Aurora MySQL a seguir se aplicam ao cluster primário quando você usa o encaminhamento de gravação em um ou mais clusters secundários. Essas métricas são todas medidas na instância de banco de dados de gravador no cluster primário. 


| Variável de status do Aurora MySQL | Unidade | Descrição | 
| --- | --- | --- | 
| Aurora\_fwd\_master\_dml\_stmt\_count | Contagem | Número total de instruções DML encaminhadas para essa instância de banco de dados de gravador.Para o Aurora MySQL versão 2. | 
| Aurora\_fwd\_master\_dml\_stmt\_duration | Microssegundos | Duração total das instruções DML encaminhadas para essa instância de banco de dados de gravador.<br />Para o Aurora MySQL versão 2. | 
| Aurora\_fwd\_master\_open\_sessions | Contagem | Número de sessões encaminhadas na instância de banco de dados de gravador.<br />Para o Aurora MySQL versão 2. | 
| Aurora\_fwd\_master\_select\_stmt\_count | Contagem | Número total de instruções `SELECT` encaminhadas para essa instância de banco de dados de gravador.<br />Para o Aurora MySQL versão 2. | 
| Aurora\_fwd\_master\_select\_stmt\_duration | Microssegundos | Duração total das instruções `SELECT` encaminhadas para essa instância de banco de dados de gravador.<br />Para o Aurora MySQL versão 2. | 
| Aurora\_fwd\_writer\_dml\_stmt\_count | Contagem | Número total de instruções DML encaminhadas para essa instância de banco de dados de gravador.Para o Aurora MySQL versão 3. | 
| Aurora\_fwd\_writer\_dml\_stmt\_duration | Microssegundos | Duração total das instruções DML encaminhadas para essa instância de banco de dados de gravador. | 
| Aurora\_fwd\_writer\_open\_sessions | Contagem | Número de sessões encaminhadas na instância de banco de dados de gravador.Para o Aurora MySQL versão 3. | 
| Aurora\_fwd\_writer\_select\_stmt\_count | Contagem | Número total de instruções `SELECT` encaminhadas para essa instância de banco de dados de gravador.Para o Aurora MySQL versão 3. | 
| Aurora\_fwd\_writer\_select\_stmt\_duration | Microssegundos | Duração total das instruções `SELECT` encaminhadas para essa instância de banco de dados de gravador.<br />Para o Aurora MySQL versão 3. | 

 As variáveis de status do Aurora MySQL a seguir se aplicam a cada cluster secundário. Essas métricas são medidas em cada instância de banco de dados de leitor em um cluster secundário com o encaminhamento de gravação habilitado. 


| Variável de status do Aurora MySQL | Unidade | Descrição | 
| --- | --- | --- | 
| Aurora\_fwd\_replica\_dml\_stmt\_count | Contagem | Número total de instruções DML encaminhadas dessa instância de banco de dados de leitor. | 
| Aurora\_fwd\_replica\_dml\_stmt\_duration | Microssegundos | Duração total de todas as instruções DML encaminhadas dessa instância de banco de dados de leitor. | 
| Aurora\_fwd\_replica\_errors\_session\_limit | Contagem | Número de sessões rejeitadas pelo cluster primário devido a uma das seguintes condições de erro:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-write-forwarding-ams.html) | 
| Aurora\_fwd\_replica\_open\_sessions | Contagem | O número de sessões que estão usando o encaminhamento de gravação em uma instância de banco de dados do leitor. | 
| Aurora\_fwd\_replica\_read\_wait\_count | Contagem | Número total de esperas de leitura-após-gravação nessa instância de banco de dados de leitor.  | 
| Aurora\_fwd\_replica\_read\_wait\_duration | Microssegundos | Duração total das esperas devido à configuração de consistência de leitura nessa instância de banco de dados de leitor. | 
| Aurora\_fwd\_replica\_select\_stmt\_count | Contagem | Número total de instruções SELECT encaminhadas dessa instância de banco de dados de leitor. | 
| Aurora\_fwd\_replica\_select\_stmt\_duration | Microssegundos | Duração total das instruções SELECT encaminhadas dessa instância de banco de dados de leitor.  | 