Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ TaurusDB/ Guia de usuário/ Funções do kernel/ Diagnóstico em grandes transações
Atualizado em 2024-09-29 GMT+08:00

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:

Uso

  1. 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)
  2. 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)
  3. 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)