Diagnóstico em grandes transações
Grandes transações afetam a integridade e a estabilidade das instâncias de BD. Em cenários típicos, reversões longas de grandes transações prolongam o tempo de atualização e alteração de especificação. GaussDB(for MySQL) fornece diagnóstico em grandes transações. Quando há uma transação grande, um alarme é gerado para notificá-lo para enviar a transação em tempo hábil.
Pré-requisitos
- A versão do kernel é 2.0.39.230300 ou posterior.
- O parâmetro relacionado é configurado com base nas seguintes condições:
- Se a versão do kernel for anterior a 2.0.45.230900, defina o valor de log-bin como ON. Para exibir e modificar o valor do parâmetro, consulte Modificação de parâmetros de uma instância de banco de dados do GaussDB(for MySQL).
- Se a versão do kernel for 2.0.45.230900 ou posterior, defina o valor de rds_global_sql_log_bin para ON.
Uso
- Configure o parâmetro rds_warn_max_binlog_cache_size conforme necessário.
Tabela 1 Descrição do parâmetro Parâmetro
Nível
Descrição
rds_warn_max_binlog_cache_size
global
Controla o tamanho máximo do cache de binlog para uma transação. Se o tamanho em uma transação exceder o valor do parâmetro, uma mensagem WARNING será relatada.
Valor padrão: 18446744073709547520
Intervalo de valores: 4096 a 18446744073709547520
Para evitar que várias mensagens WARNING sejam enviadas ao cliente, uma mensagem WARNING pode ser enviada ao cliente uma vez para cada declaração em uma transação.
Neste exemplo, rds_warn_max_binlog_cache_size é definido como 40960 (40 KB).
mysql> CREATE TABLE t1 ( -> a longtext -> ) DEFAULT CHARSET=latin1; Query OK, 0 rows affected (0.12 sec) mysql> show variables like 'rds_warn_max_binlog_cache_size'; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | rds_warn_max_binlog_cache_size | 40960 | +--------------------------------+-------+ 1 row in set (0.01 sec) mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO t1 VALUES (REPEAT('a',20000)); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO t1 VALUES (REPEAT('a',20000)); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO t1 VALUES (REPEAT('a',20000)); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> show warnings; +---------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Warning | 4008 | Recommend you to INSERT/UPDATE/DELETE rows in batches by multiple transactions. The current transaction required more than 'rds_warn_max_binlog_cache_size' (40960) bytes of storage. Which shall cause replication latency. Please commit it. | +---------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 3 | +----------+ 1 row in set (0.01 sec) mysql> commit; Query OK, 0 rows affected (0.01 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 3 | +----------+ 1 row in set (0.01 sec) mysql> INSERT INTO t1 VALUES (REPEAT('a',50000)); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> show warnings; +---------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Warning | 4008 | Recommend you to INSERT/UPDATE/DELETE rows in batches by multiple transactions. The current transaction required more than 'rds_warn_max_binlog_cache_size' (40960) bytes of storage. Which shall cause replication latency. | +---------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
- Verifique o tamanho do cache de binlog das transações na conexão atual.
mysql> CREATE TABLE t1 ( -> a longtext -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Query OK, 0 rows affected (0.10 sec) mysql> SHOW STATUS LIKE 'Rds_binlog_trx_cache_size'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | Rds_binlog_trx_cache_size | 0 | +---------------------------+-------+ 1 row in set (0.04 sec) mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO t1 VALUES (REPEAT('a',20000)); Query OK, 1 row affected (0.01 sec) mysql> SHOW STATUS LIKE 'Rds_binlog_trx_cache_size'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | Rds_binlog_trx_cache_size | 20150 | +---------------------------+-------+ 1 row in set (0.05 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> SHOW STATUS LIKE 'Rds_binlog_trx_cache_size'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | Rds_binlog_trx_cache_size | 0 | +---------------------------+-------+ 1 row in set (0.09 sec)
- Verifique o tamanho do cache de binlog das transações em todas as conexões.
mysql> SHOW GLOBAL STATUS LIKE 'rds_binlog_trx_cache_size'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | Rds_binlog_trx_cache_size | 40300 | +---------------------------+-------+ 1 row in set (0.05 sec)