Todos os produtos
Search
Central de documentação

ApsaraDB RDS:SQL throttling (rds_ccl)

Última atualização: Aug 21, 2026

O recurso de limitação de SQL no ApsaraDB RDS for PostgreSQL ajuda a garantir a estabilidade do banco de dados durante períodos de alta concorrência ou ao processar instruções SQL que consomem muitos recursos. Ao limitar a concorrência de instruções SQL específicas, você evita ataques maliciosos e controla o uso de recursos para operações como backups e monitoramento. Esse recurso impede que instruções SQL individuais degradem o desempenho do banco de dados ou causem interrupções no service.

Pré-requisitos

  • Sua instância do ApsaraDB RDS for PostgreSQL deve atender aos seguintes requisitos:

    Versão principal do mecanismo

    Versão secundária do mecanismo

    PostgreSQL 16 e 17

    Todas as versões secundárias

    PostgreSQL 14 e 15

    20230330 ou posterior

    PostgreSQL 13

    20250430 ou posterior

    Nota

    Para mais informações, consulte Update the minor engine version.

  • Conclua a parameter configuration da seguinte forma:

    • Defina rds_enable_ccl como on.

    • Defina compute_query_id como auto ou on.

  • Crie uma privileged account.

Observações de uso

  • Após reiniciar a instância ou realizar um failover primário/secundário, load the SQL throttling rules manualmente.

  • Regras de limitação configuradas incorretamente, como definir um valor máximo de concorrência muito baixo, podem afetar suas cargas de trabalho. Avalie sua carga de trabalho antes de configurar as regras.

  • As regras de limitação são criadas na instância primária. Para aplicar uma regra a uma instância somente leitura, o parâmetro node_tag da regra deve incluir nós somente leitura. Além disso, load the SQL throttling rule separadamente na instância somente leitura.

  • Ao criar uma regra de limitação usando o recurso SQL Throttling do Database Autonomy Service (DAS), o plugin é instalado no information_schema do banco de dados alvo por padrão. Essa regra não pode ser invocada por comandos SQL e só pode ser usada com o recurso SQL Throttling do DAS.

Faturamento

Este recurso é gratuito.

Criar e excluir o plugin

Criar e excluir o plugin no console

  1. Acesse a página Instances. Na barra de navegação superior, selecione uma região. Em seguida, clique em no ID da instância alvo.

  2. No painel de navegação à esquerda, clique em Plug-ins.

  3. Na página Extension Marketplace, localize o plugin rds_ccl e clique em Install.

    image

    Alternativamente, acesse a página Extension Management, pesquise pelo plugin rds_ccl e clique em Install na coluna Actions.

  4. Na janela pop-up, selecione o banco de dados alvo e a conta privilegiada e clique em Install para instalar o plugin no banco de dados alvo.

    Quando o status da instância mudar de Maintaining Instance para Running, o plugin estará instalado.

Nota

Na página Extension Management, clique em na aba Installed Extensions. Localize o plugin alvo e clique em Uninstall na coluna Actions para desinstalar o plugin.

Criar e excluir a extensão usando comandos SQL

Importante

Use uma conta privilegiada para executar os seguintes comandos.

  • Crie a extensão.

    CREATE EXTENSION rds_ccl;
  • Exclua a extensão.

    DROP EXTENSION rds_ccl;

Exemplos de uso

Importante

Use uma conta privilegiada para executar os seguintes comandos.

Criar uma regra de limitação de SQL

Cenários

Chame esta função apenas na instância primária para criar uma regra de limitação de SQL.

Sintaxe

  • Sintaxe 1: Limite uma instrução SQL específica.

    SELECT rds_add_ccl_rule(
    	query_string varchar,
    	node_tag int,
    	max_concurrency int,
    	max_waiting int,
    	is_enabled boolean,
    	comment varchar,		-- Optional
    	search_path varchar		-- Optional
    );
  • Sintaxe 2: Limite com base em um query_id específico.

    SELECT rds_add_ccl_rule_with_query_id(
      query_id		bigint,
      node_tag		int,
      max_concurrency	int,
      max_waiting		int,
      is_enabled		boolean,
      query_string		varchar,	-- Optional
      comment		varchar,	-- Optional
      search_path           varchar		-- Optional (Supported in version 1.2 and later)
    );

Parâmetros

Parameter

Type

Description

query_string

varchar

A instrução SQL a ser limitada.

Ao configurar este parâmetro, use $$ ou $<Any character>$ para envolver a instrução SQL. Para mais informações, consulte Dollar-Quoted String Constants.

Exemplos:

-- Use $$ to wrap the SQL statement.
    $$SELECT * FROM my_table;$$

    -- If the SQL statement already contains $$, use $ccl$ to wrap the SQL statement.
    $ccl$SELECT * FROM my_table WHERE my_column = $$hello$$;$ccl$

Esta função calcula o query_id com base no valor de query_string e corresponde a instruções SQL semelhantes com base no query_id para aplicar a limitação. Para mais informações sobre query_id, consulte Introduction to query_id.

query_id

bigint

O query_id da instrução SQL a ser limitada. Para mais informações, consulte Introduction to query_id.

node_tag

int

O nó a ser limitado.

  • 1: Limita apenas a instância primária.

  • 2: Limita apenas instâncias somente leitura.

  • 3: Limita tanto a instância primária quanto as instâncias somente leitura.

Nota

Na função para criar uma regra de limitação de SQL, este parâmetro especifica apenas o escopo onde a regra pode ser aplicada. A regra não entra em vigor automaticamente nas instâncias somente leitura. Se quiser que a regra entre em vigor em uma instância somente leitura, carregue-a manualmente. Para mais informações, consulte Load an SQL throttling rule.

max_concurrency

int

A concorrência máxima para este tipo de instrução SQL.

Valores válidos: 0 a 100.000

max_waiting

int

O número máximo de instruções SQL em espera para este tipo. Se esse limite for excedido, uma nova instrução SQL fará com que o kernel do PostgreSQL acione um ABORT para interromper e reverter a transação.

Valores válidos: 0 a 100.000

is_enabled

boolean

Especifica se a regra está ativada.

  • true: A regra entra em vigor imediatamente.

  • false: A regra não entra em vigor.

comment

varchar

A descrição da regra.

search_path

varchar

O caminho de busca de schema (search_path) no tempo de execução da instrução SQL alvo. Se definir este parâmetro como uma string vazia (''), o caminho de busca padrão será usado. Execute o comando SHOW search_path; para consultar o caminho de busca padrão.

Observações de uso

  • Na Sintaxe 1, caso não configure os parâmetros comment e search_path, defina-os como uma string vazia (''). Se defini-los como NULL, a função não realiza nenhuma operação e retorna imediatamente.

  • Na Sintaxe 2:

    • Se não configurar os parâmetros query_string e comment, defina-os como uma string vazia (''). Se defini-los como NULL, a função não realiza nenhuma operação e retorna imediatamente.

    • Caso configure tanto query_id quanto query_string, o kernel AliPG aplica a limitação de SQL com base em query_id.

  • Esta função retorna um ccl_id, que é o identificador exclusivo da regra de limitação no banco de dados atual.

Exemplos de SQL

Suponha que exista uma tabela chamada ccl_tbl no banco de dados ccl_test da instância primária. Crie uma regra de limitação de SQL que atenda aos seguintes requisitos:

  1. Limite todas as instruções SELECT * FROM ccl_tbl. Suponha que o query_id delas seja 1.

  2. Permita a execução simultânea de no máximo três instruções SQL desse tipo.

  3. Permita que no máximo duas instruções SQL desse tipo fiquem em espera.

  4. A regra deve entrar em vigor imediatamente após a criação.

  • Sintaxe 1:

    SELECT rds_add_ccl_rule(
      $$SELECT * FROM ccl_tbl;$$,		-- The SQL statement to be throttled, wrapped in $$.
      1,					-- Throttles the primary instance only.
      3,					-- Allows a maximum of 3 such SQL statements to execute concurrently.
      2,					-- Allows a maximum of 2 such SQL statements to wait.
      true,					-- The rule takes effect immediately.
      'limit constant select',		-- The rule description.
      ''					-- Uses the default search_path.
    );
  • Sintaxe 2:

    SELECT rds_add_ccl_rule_with_query_id(
      1,					-- The query_id of the SQL statement to be throttled.
      1,					-- Throttles the primary instance only.
      3,					-- Allows a maximum of 3 such SQL statements to execute concurrently.
      2,					-- Allows a maximum of 2 such SQL statements to wait.
      true,					-- The rule takes effect immediately.
      '',					-- The text of the SQL statement. This is not specified in this example.
      'limit constant select',		-- The rule description.
      'public'                              -- The search_path.
    );

Consultar regras de limitação de SQL

Cenários

Execute este comando em uma instância primária ou somente leitura para consultar as regras de limitação de SQL criadas.

Sintaxe

  • Para visualizar todas as regras de limitação de SQL em todos os bancos de dados da instância atual:

    SELECT * FROM rds_enabled_ccl_rule;
    Nota
    • No resultado da consulta deste comando, os valores de query_string e comment são truncados para 200 caracteres devido a limitações de exibição. Para visualizar as informações completas, execute o comando SELECT * FROM rds_show_current_db_ccl_rule();.

    • A versão 1.2 e posteriores do rds_ccl suportam o retorno de search_path.

  • Para consultar todas as regras de limitação de SQL no banco de dados atual:

    SELECT * FROM rds_show_current_db_ccl_rule();

Ativar uma regra de limitação de SQL

Cenários

Chame esta função apenas na instância primária. Ela se aplica aos seguintes cenários:

  • Se definiu o parâmetro is_enabled como false ao criar uma regra de limitação de SQL, use esta função para ativar a regra.

  • Também é possível usar esta função para ativar uma regra desativada anteriormente.

Sintaxe

SELECT rds_enable_ccl_rule(ccl_id int);

Parâmetros

Parameter

Type

Description

ccl_id

int

O ID da regra de limitação de SQL. Para mais informações sobre como consultar o ID, consulte Query SQL throttling rules.

Observações de uso

Nenhuma.

Exemplo de SQL

SELECT rds_enable_ccl_rule(1);

Carregar uma regra de limitação de SQL

Cenários

Chame esta função em uma instância primária ou somente leitura para carregar uma regra de limitação de SQL. Apenas regras carregadas podem ser usadas para limitação de SQL.

Esta função se aplica aos seguintes cenários:

  • Instância primária:

    • Ao criar uma regra de limitação de SQL, se is_enabled estiver definido como true, a regra é carregada automaticamente na instância primária. Nesse caso, não é necessário chamar esta função.

    • Ao criar uma regra de limitação de SQL, se is_enabled estiver definido como false, a regra é carregada automaticamente na instância primária quando você chama a função rds_enable_ccl_rule para ativá-la. Nesse caso, não é necessário chamar esta função.

    • Se a instância primária for reiniciada, chame esta função manualmente para carregar a regra.

  • Instância somente leitura:

    Se uma regra precisar entrar em vigor em uma instância somente leitura, crie a regra na instância primária e defina o parâmetro node_tag como 2 ou 3. Em seguida, chame esta função na instância somente leitura para carregar a regra manualmente.

Sintaxe

SELECT rds_load_ccl_rule(ccl_id int);

Parâmetros

Parameter

Type

Description

ccl_id

int

O ID da regra de limitação de SQL. Para mais informações sobre como consultar o ID, consulte Query SQL throttling rules.

Observações de uso

  • Carregue uma regra em uma instância somente leitura apenas depois que a regra de limitação de SQL for criada na instância primária chamando a função rds_add_ccl_rule com o parâmetro node_tag definido como 2 ou 3.

  • Regras desativadas não podem ser carregadas. Para carregar uma regra desativada em uma instância somente leitura, primeiro ative a regra na instância primária. Para mais informações, consulte Enable an SQL throttling rule.

Exemplo de SQL

SELECT rds_load_ccl_rule(1);

Modificar uma regra de limitação de SQL

Cenários

Chame esta função apenas na instância primária para alterar a concorrência máxima e a contagem máxima de espera em uma regra de limitação de SQL.

Sintaxe

SELECT rds_update_ccl_rule(
	ccl_id int,
	new_max_concurrency int,
	new_max_waiting int
);

Parâmetros

Parameter

Type

Description

ccl_id

int

O ID da regra de limitação de SQL. Para mais informações sobre como consultar o ID, consulte Query SQL throttling rules.

new_max_concurrency

int

A nova concorrência máxima.

  • Se aumentar a concorrência máxima, as instruções SQL em espera serão executadas imediatamente.

  • Se diminuir a concorrência máxima, as instruções SQL em execução não serão afetadas. As instruções SQL em espera começarão a ser executadas somente após a concorrência atual cair abaixo da nova concorrência máxima.

new_max_waiting

int

A nova contagem máxima de espera.

  • Se aumentar a contagem máxima de espera, mais instruções SQL limitadas poderão aguardar.

  • Se diminuir a contagem máxima de espera, as instruções SQL atualmente em espera não serão afetadas. No entanto, se uma nova instrução SQL precisar esperar e fizer com que o número atual de instruções em espera exceda o novo máximo, o kernel do PostgreSQL acionará um ABORT para interromper e reverter a transação.

Observações de uso

  • As atualizações em uma regra de limitação de SQL entram em vigor imediatamente.

  • É possível alterar apenas a concorrência máxima e a contagem máxima de espera em uma regra de limitação de SQL.

Exemplo de SQL

SELECT rds_update_ccl_rule(
 2,     -- ccl_id
 4,     -- The new maximum concurrency is 4.
 5      -- The new maximum waiting count is 5.
);

Desativar uma regra de limitação de SQL

Cenários

Chame esta função apenas na instância primária para desativar uma regra de limitação de SQL. Após a desativação, a regra deixa de limitar instruções SQL.

Nota

Para reativar uma regra específica, consulte Enable an SQL throttling rule.

Sintaxe

  • Para desativar uma regra de limitação de SQL específica:

    SELECT rds_disable_ccl_rule(ccl_id int);
  • Para desativar todas as regras de limitação de SQL no banco de dados atual:

    SELECT rds_disable_all();

Parâmetros

Parameter

Type

Description

ccl_id

int

O ID da regra de limitação de SQL. Para mais informações sobre como consultar o ID, consulte Query SQL throttling rules.

Observações de uso

  • Regras desativadas não podem ser carregadas. Para carregar uma regra desativada em uma instância somente leitura, primeiro ative a regra na instância primária. Para mais informações, consulte Enable an SQL throttling rule.

  • Ao desativar uma regra de limitação de SQL, ela é descarregada automaticamente da instância primária e deixa de limitar instruções SQL.

Exemplo de SQL

SELECT rds_disable_ccl_rule(1);

Descarregar uma regra de limitação de SQL

Cenários

Chame esta função em uma instância primária ou somente leitura para descarregar uma regra de limitação de SQL. Uma regra descarregada deixa de limitar instruções SQL.

Esta função se aplica aos seguintes cenários:

  • Instância primária:

    • Se chamar a função rds_disable_ccl_rule ou rds_disable_all na instância primária para desativar uma regra, ela será descarregada automaticamente da instância primária. Nesse caso, não é necessário chamar esta função.

    • Se chamar a função rds_del_ccl_rule na instância primária para excluir uma regra, ela será descarregada automaticamente da instância primária. Nesse caso, não é necessário chamar esta função.

    • Também é possível chamar esta função para descarregar manualmente a regra da instância primária.

  • Instância somente leitura:

    Se não quiser que uma regra limite instruções SQL em uma instância somente leitura, chame esta função para descarregá-la manualmente da instância somente leitura.

Sintaxe

SELECT rds_unload_ccl_rule(ccl_id int, db_name varchar default '');

Parâmetros

Parameter

Type

Description

ccl_id

int

O ID da regra de limitação de SQL. Para mais informações sobre como consultar o ID, consulte Query SQL throttling rules.

db_name

varchar

O valor padrão é uma string vazia, que indica o banco de dados atual. Você também pode especificar outro banco de dados para descarregar regras de limitação de SQL dele.

Observações de uso

Após o descarregamento, a regra deixa de limitar instruções SQL. Para usar a regra novamente, recarregue-a. Para mais informações, consulte Load an SQL throttling rule.

Exemplo de SQL

SELECT rds_unload_ccl_rule(1,'');

Excluir uma regra de limitação de SQL

Cenários

Chame esta função apenas na instância primária para excluir uma regra de limitação de SQL. Quando uma regra é excluída, ela é descarregada automaticamente da instância primária.

Sintaxe

SELECT rds_del_ccl_rule(ccl_id int);

Parâmetros

Parameter

Type

Description

ccl_id

int

O ID da regra de limitação de SQL. Para mais informações sobre como consultar o ID, consulte Query SQL throttling rules.

Observações de uso

Nenhuma.

Exemplo de SQL

SELECT rds_del_ccl_rule(1);

Resultado de exemplo:

   rds_del_ccl_rule   
----------------------
 -7851264404688445170
(1 row)
Nota
  • O resultado é o query_id.

  • Um erro será retornado se a regra não existir.

Apêndice

Introdução ao query_id

  • Um query_id é um identificador especial para instruções SQL no PostgreSQL. Instruções SQL semelhantes compartilham o mesmo query_id.

    Exemplo:

    -- The following two SQL statements have the same query_id.
    SELECT * FROM tbl WHERE a = 1;
    SELECT * FROM tbl WHERE a = 2;
  • Um query_id contém informações sobre os objetos em uma instrução SQL, baseadas no identificador de objeto (oid). Tabelas com o mesmo nome são consideradas objetos diferentes se estiverem em bancos de dados ou schemas diferentes. Portanto, instruções SQL idênticas têm valores de query_id diferentes se referenciarem objetos diferentes.

  • Se o objeto acessado em uma instrução SQL for uma tabela global ou uma função global, o query_id será o mesmo independentemente do banco de dados em que a instrução for executada.

    • Exemplo 1: pg_database é uma tabela global. O query_id é o mesmo quando esta tabela é consultada a partir de bancos de dados diferentes.

      • Execute a seguinte instrução no banco de dados ccl_test:

        SELECT rds_get_query_id($$SELECT * FROM pg_database;$$);

        Resultado de exemplo:

           rds_get_query_id   
        ----------------------
         -8733244708994363681
        (1 row)
      • Execute a seguinte instrução no banco de dados ccl_test2:

        SELECT rds_get_query_id($$SELECT * FROM pg_database;$$);

        Resultado de exemplo:

           rds_get_query_id   
        ----------------------
         -8733244708994363681
        (1 row)
    • Exemplo 2: pg_sleep é uma função global. O query_id é o mesmo quando esta função é chamada a partir de bancos de dados diferentes.

      • Execute a seguinte instrução no banco de dados ccl_test:

        SELECT rds_get_query_id($$SELECT pg_sleep(1);$$);

        Resultado de exemplo:

          rds_get_query_id  
        --------------------
         440101247839410938
        (1 row)
      • Execute a seguinte instrução no banco de dados ccl_test2:

        SELECT rds_get_query_id($$SELECT pg_sleep(1);$$);

        Resultado de exemplo:

          rds_get_query_id  
        --------------------
         440101247839410938
        (1 row)
  • Ao chamar uma função, o query_id muda se o tipo de parâmetro mudar ou se uma cláusula FROM for adicionada ou removida.

    Por exemplo, ao chamar a função pg_sleep, o query_id retornado difere com base no contexto.

    • Sem uma cláusula FROM:

      SELECT rds_get_query_id($$SELECT pg_sleep(1);$$);

      Resultado de exemplo:

        rds_get_query_id  
      --------------------
       440101247839410938
      (1 row)
    • Com uma cláusula FROM:

      SELECT rds_get_query_id($$SELECT * FROM pg_sleep(1);$$);

      Resultado de exemplo:

         rds_get_query_id   
      ----------------------
       -3404018605099167039
      (1 row)
    • Se o tipo de parâmetro mudar:

      select rds_get_query_id($$SELECT * FROM pg_sleep(1.0);$$);

      Resultado de exemplo:

        rds_get_query_id   
      ---------------------
       3073869725037049158
      (1 row)