Parâmetros do servidor Azure Cosmos DB for PostgreSQL
APLICA-SE AO: Azure Cosmos DB for PostgreSQL (da plataforma da extensão de dados Citus para PostgreSQL)
Há vários parâmetros de servidor que afetam o comportamento do Azure Cosmos DB for PostgreSQL, a partir do PostgreSQL padrão e específicos para o Azure Cosmos DB for PostgreSQL. Esses parâmetros podem ser definidos no portal do Azure para um cluster. Na categoria Configurações, escolha Parâmetros de nó de trabalho ou Parâmetros de nó coordenador. Essas páginas permitem definir parâmetros para todos os nós de trabalho ou apenas para o nó coordenador.
Parâmetros do Azure Cosmos DB for PostgreSQL
Observação
Os clusters que executam as versões mais antigas da extensão Citus podem não oferecer todos os parâmetros listados abaixo.
Configuração geral
citus.use_secondary_nodes (enum)
Define a política a ser usada ao escolher nós para consultas SELECT. Se for definido como ''always'', o planejador consultará apenas os nós marcados como noderole ''secundary'' em pg_dist_node.
Os valores suportados para esta enumeração são:
- never: (padrão) todas as leituras acontecem em nós primários.
- always: em vez disso, as leituras são executadas em nós secundários e as instruções insert/update são desabilitadas.
citus.cluster_name (text)
Informa ao planejador do nó coordenador qual grupo ele coordena. Depois que cluster_name é configurado, o planejador consultará os nós de trabalho apenas nesse cluster.
citus.enable_version_checks (boolean)
Atualizar a versão do Azure Cosmos DB for PostgreSQL requer uma reinicialização do servidor (para selecionar a nova biblioteca compartilhada), seguida pelo comando ALTER EXTENSION UPDATE. A falha na execução de ambas as etapas pode causar erros ou falhas. Portanto, o Azure Cosmos DB for PostgreSQL valida se há correspondência entre a versão do código e da extensão, e gera erros se não corresponderem.
Esse valor é válido para o coordenador e o padrão é true. Em casos raros, processos complexos de atualização podem exigir a definição desse parâmetro como false, desabilitando assim a verificação.
citus.log_distributed_deadlock_detection (booleano)
Se é preciso registrar o processamento relacionado à detecção de deadlock distribuído no registro do servidor. O padrão é false.
citus.distributed_deadlock_detection_factor (ponto flutuante)
Define o tempo de espera antes de verificar se há deadlocks distribuídos. Especificamente, o tempo de espera é esse valor multiplicado pela configuração deadlock_timeout do PostgreSQL. O valor padrão é 2
. Um valor -1
desabilita a detecção de deadlock distribuído.
citus.node_connection_timeout (inteiro)
A citus.node_connection_timeout
GUC define a duração máxima (em milissegundos) de espera para o estabelecimento da conexão. O Azure Cosmos DB for PostgreSQL gerará um erro se o tempo limite expirar antes de, no mínimo, uma conexão de trabalho ser estabelecida. Essa GUC afeta as conexões do coordenador para os trabalhos — e entre eles.
- Padrão: cinco segundos
- Mínimo: 10 milissegundos
- Máximo: uma hora
-- set to 30 seconds
ALTER DATABASE foo
SET citus.node_connection_timeout = 30000;
citus.log_remote_commands (booliano)
Registre todos os comandos que o coordenador envia aos nós de trabalho. Por exemplo:
-- reveal the per-shard queries behind the scenes
SET citus.log_remote_commands TO on;
-- run a query on distributed table "github_users"
SELECT count(*) FROM github_users;
A saída revela várias consultas em execução nos trabalhos devido à consulta única count(*)
no coordenador.
NOTICE: issuing SELECT count(*) AS count FROM public.github_events_102040 github_events WHERE true
DETAIL: on server citus@private-c.demo.postgres.database.azure.com:5432 connectionId: 1
NOTICE: issuing SELECT count(*) AS count FROM public.github_events_102041 github_events WHERE true
DETAIL: on server citus@private-c.demo.postgres.database.azure.com:5432 connectionId: 1
NOTICE: issuing SELECT count(*) AS count FROM public.github_events_102042 github_events WHERE true
DETAIL: on server citus@private-c.demo.postgres.database.azure.com:5432 connectionId: 1
... etc, one for each of the 32 shards
citus.show_shards_for_app_name_prefixes (texto)
Por padrão, o Azure Cosmos DB for PostgreSQL oculta fragmentos da lista de tabelas que o PostgreSQL fornece aos clientes SQL. Ele faz isso porque há vários fragmentos por tabela distribuída e os fragmentos podem estar distraindo o cliente SQL.
O GUC citus.show_shards_for_app_name_prefixes
permite que os fragmentos sejam exibidos para clientes selecionados que desejam vê-los. O valor padrão é ''.
-- show shards to psql only (hide in other clients, like pgAdmin)
SET citus.show_shards_for_app_name_prefixes TO 'psql';
-- also accepts a comma separated list
SET citus.show_shards_for_app_name_prefixes TO 'psql,pg_dump';
O ocultamento de fragmentos pode ser totalmente desabilitado usando citus.override_table_visibility.
citus.override_table_visibility (booleano)
Determina se citus.show_shards_for_app_name_prefixes está ativo. O valor padrão é 'true'. Quando definido como 'false', os fragmentos ficam visíveis para todos os aplicativos cliente.
citus.use_citus_managed_tables (booleano)
Permitir que novas tabelas locais sejam acessadas por consultas em nós de trabalho. Adiciona todas as tabelas recém-criadas aos metadados do Citus quando habilitados. O valor padrão é 'false'.
citus.rebalancer_by_disk_size_base_cost (inteiro)
Usando a estratégia de reequilíbrio by_disk_size, cada grupo de fragmentos obtém esse custo em bytes adicionados ao tamanho real do disco. Esse valor é usado para evitar a criação de um saldo incorreto quando há poucos dados em alguns dos fragmentos. Presume-se que até mesmo os fragmentos vazios têm determinado custo, devido ao paralelismo e porque grupos de fragmentos vazios provavelmente aumentarão no futuro.
O valor padrão é 100MB
.
Estatísticas de Consulta
citus.stat_statements_purge_interval (inteiro)
Define a frequência na qual o maintenance daemon remove os registros de citus_stat_statements que não correspondem no pg_stat_statements
. Esse valor de configuração define o intervalo de tempo entre as limpezas em segundos, com um valor padrão de 10. Um valor de 0 desabilita as limpezas.
SET citus.stat_statements_purge_interval TO 5;
Esse parâmetro é válido para o coordenador e pode ser alterado no tempo de execução.
citus.stat_statements_max (inteiro)
O número máximo de linhas para armazenar no citus_stat_statements
. O padrão é 50 mil e pode ser alterado para qualquer valor no intervalo de mil a dez milhões. Cada linha requer 140 bytes de armazenamento, portanto, a configuração de stat_statements_max
para o valor máximo de 10 milhões consumiria 1,4 GB de memória.
A alteração desse GUC não terá efeito até que o PostgreSQL seja reiniciado.
citus.stat_statements_track (enumeração)
A gravação de estatísticas para citus_stat_statements
requer recursos adicionais de CPU.
Quando o banco de dados está apresentando carga, o administrador pode desabilitar o rastreamento de instrução definindo citus.stat_statements_track
como none
.
- all: (padrão) rastrear todas as instruções.
- none: desabilitar o rastreamento.
citus.stat_tenants_untracked_sample_rate
Taxa de amostragem para novos locatários em citus_stat_tenants
. A taxa pode ser de intervalo entre 0.0
e 1.0
. O padrão é 1.0
, o que significa que 100% das consultas de locatário não rastreadas são amostradas. Defini-lo como um valor mais baixo significa que os locatários já acompanhados têm 100% de consultas amostradas, mas os locatários que atualmente não são rastreados são amostrados apenas na taxa fornecida.
Carregamento de dados
citus.multi_shard_commit_protocol (enumeração)
Define o protocolo de confirmação a ser usado ao executar COPY em uma tabela distribuída por hash. Em cada posicionamento de fragmento individual, o comando COPY é executado em um bloco de transação para garantir que nenhum dado seja ingerido se ocorrer um erro durante o COPY. No entanto, há um caso de falha específico em que o COPY é realizado com êxito em todos os posicionamentos, mas ocorre uma falha (de hardware) antes que todas as transações sejam confirmadas. Nesse caso, o parâmetro pode ser usado para prevenir a perda de dados, optando entre os seguintes protocolos de confirmação:
- 2PC: (padrão) as transações nas quais o COPY é executado nos posicionamentos de fragmentos são preparadas primeiro usando o protocolo 2PC do PostgreSQL e, em seguida, confirmadas. As confirmações com falha podem ser recuperadas ou anuladas manualmente usando COMMIT PREPARED ou ROLLBACK PREPARED, respectivamente. Ao usar 2pc, as transações_máximas_preparadas devem ser aumentadas em todos os trabalhos, normalmente para o mesmo valor que as conexões_máximas.
- 1pc: as transações em que o COPY é executado nos posicionamentos de fragmentos são confirmadas em uma única vez. Os dados poderão ser perdidos se ocorrer uma falha na confirmação depois que o COPY for realizado com êxito em todos os posicionamentos (raro).
citus.shard_replication_factor (inteiro)
Define o fator de replicação para estilhaços, ou seja, o número de nós nos quais os fragmentos são colocados e o padrão é 1. Esse parâmetro é válido para o coordenador e pode ser definido no tempo de execução. O valor ideal para esse parâmetro depende do tamanho do grupo e da taxa de falha do nó. Por exemplo, você pode aumentar esse fator de replicação se executar clusters grandes e observar falhas de nó com mais frequência.
Configuração do planejador
citus.local_table_join_policy (enumeração)
Este GUC determina como o Azure Cosmos DB for PostgreSQL move os dados ao fazer uma junção entre tabelas locais e distribuídas. Personalizar a política de junção pode ajudar a reduzir o volume de dados enviados entre nós de trabalho.
O Azure Cosmos DB for PostgreSQL envia as tabelas locais ou distribuídas para os nós conforme necessário para dar suporte à junção. A cópia dos dados de tabela é conhecida como "conversão". Se uma tabela local for convertida, ela será enviada a todos os trabalhos que precisam de seus dados para realizar a junção. Se uma tabela distribuída for convertida, ela será coletada no coordenador para dar suporte a junção. O planejador do Azure Cosmos DB for PostgreSQL envia apenas as linhas necessárias fazendo uma conversão.
Há quatro modos disponíveis para expressar a preferência de conversão:
- auto: (padrão) o Azure Cosmos DB for PostgreSQL converte todas as tabelas locais ou todas as tabelas distribuídas para dar suporte a junções de tabelas locais e distribuídas. O Azure Cosmos DB for PostgreSQL decide qual deve ser convertida usando uma heurística. Ele converte tabelas distribuídas se elas forem unidas usando um filtro constante em um índice exclusivo (como uma chave primária). A conversão garante que menos dados sejam movidos entre os trabalhos.
- never: o Azure Cosmos DB for PostgreSQL não permite junções entre tabelas locais e distribuídas.
- prefere-local: o Azure Cosmos DB for PostgreSQL prefere a conversão de tabelas locais para dar suporte a junções de tabelas locais e distribuídas.
- prefere-distributed: Azure Cosmos DB for PostgreSQL prefere converter tabelas distribuídas para dar suporte a junções de tabelas locais e distribuídas. Se as tabelas distribuídas forem enormes, usar essa opção poderá resultar na movimentação de muitos dados entre os trabalhos.
Por exemplo, suponha citus_table
que seja uma tabela distribuída pela coluna x
e que postgres_table
seja uma tabela local:
CREATE TABLE citus_table(x int primary key, y int);
SELECT create_distributed_table('citus_table', 'x');
CREATE TABLE postgres_table(x int, y int);
-- even though the join is on primary key, there isn't a constant filter
-- hence postgres_table will be sent to worker nodes to support the join
SELECT * FROM citus_table JOIN postgres_table USING (x);
-- there is a constant filter on a primary key, hence the filtered row
-- from the distributed table will be pulled to coordinator to support the join
SELECT * FROM citus_table JOIN postgres_table USING (x) WHERE citus_table.x = 10;
SET citus.local_table_join_policy to 'prefer-distributed';
-- since we prefer distributed tables, citus_table will be pulled to coordinator
-- to support the join. Note that citus_table can be huge.
SELECT * FROM citus_table JOIN postgres_table USING (x);
SET citus.local_table_join_policy to 'prefer-local';
-- even though there is a constant filter on primary key for citus_table
-- postgres_table will be sent to necessary workers because we are using 'prefer-local'.
SELECT * FROM citus_table JOIN postgres_table USING (x) WHERE citus_table.x = 10;
citus.limit_clause_row_fetch_count (inteiro)
Define o número de linhas a serem buscadas por tarefa para uma otimização da cláusula de limite. Em alguns casos, as consultas selecionadas com cláusulas de limite podem precisar buscar em todas as linhas de cada tarefa para gerar resultados. Nesses cenários, e onde uma aproximação produziria resultados significativos, esse valor de configuração define o número de linhas a serem buscadas de cada fragmento. Por padrão, as aproximações de limite são desabilitadas e esse parâmetro é definido como 1. Esse parâmetro é válido para o coordenador e pode ser definido no tempo de execução.
citus.count_distinct_error_rate (ponto flutuante)
O Azure Cosmos DB for PostgreSQL pode calcular aproximações de count(distinct) usando a extensão postgresql-hll. Essa entrada de configuração define a taxa de erro desejada ao calcular a count(distinct). O padrão 0,0 desabilita as aproximações da count(distinct); e 1,0 não fornece nenhuma garantia sobre a precisão dos resultados. É recomendável definir esse parâmetro como 0,005 para obter melhores resultados. Esse parâmetro é válido para o coordenador e pode ser definido no tempo de execução.
citus.task_assignment_policy (enumeração)
Observação
Esse GUC é aplicável somente quando o shard_replication_factor for maior que um, ou para consultas nas reference_tables.
Define a política a ser usada ao atribuir tarefas aos trabalhos. O coordenador atribui tarefas aos trabalhos com base nos locais do fragmento. Esse valor de configuração especifica a política a ser usada ao fazer essas atribuições. Atualmente, há três políticas de atribuição de tarefas possíveis que podem ser usadas.
- greedy: a política de greedy é o padrão e visa distribuir uniformemente as tarefas entre os trabalhos.
- round-robin: a política de round-robin atribui tarefas aos trabalhos em rodízio, alternando entre réplicas diferentes. Essa política permite uma melhor utilização do grupo quando a contagem de fragmentos de uma tabela for baixa, comparada ao número de trabalhos.
- first-replica: a política de first-replica atribui tarefas com base na ordem de inserção dos posicionamentos (réplicas) para os fragmentos. Em outras palavras, a consulta de um fragmento é atribuída ao trabalho que tem a primeira réplica desse fragmento. Esse método permite que você tenha garantias consistentes sobre quais fragmentos são usados em quais nós (ou seja, garantias de residência de memória mais eficientes).
Esse parâmetro é válido para o coordenador e pode ser definido no tempo de execução.
citus.enable_non_colocated_router_query_pushdown (booleano)
Habilita o planejador de roteador para as consultas que fazem referência a tabelas distribuídas não colocadas.
O planejador de roteadores só está habilitado para consultas que fazem referência a tabelas distribuídas colocadas porque, caso contrário, os fragmentos podem não estar no mesmo nó. Habilitar esse sinalizador permite a otimização das consultas que fazem referência a essas tabelas, mas a consulta pode não funcionar depois de reequilibrar os fragmentos ou alterar a contagem de fragmentos dessas tabelas.
O padrão é off
.
Transferência de dados intermediários
citus.max_intermediate_result_size (inteiro)
O tamanho máximo em KB dos resultados intermediários para CTEs que não podem ser enviados para nós de trabalho para execução e para subconsultas complexas. O padrão é 1 GB. Um valor de 1 significa sem limite. As consultas que excedem o limite são canceladas e geram uma mensagem de erro.
DDL
citus.enable_schema_based_sharding
Com o parâmetro definido como ON
, todos os esquemas criados são distribuídos por padrão. Os esquemas distribuídos são automaticamente associados a grupos de colocação individuais, de modo que as tabelas criadas nesses esquemas são convertidas em tabelas distribuídas colocadas sem uma chave de fragmento. Essa configuração pode ser modificada para sessões individuais.
Para obter um exemplo de como usar esse GUC, confira como projetar para microsserviço.
Configuração do executor
Geral
citus.all_modifications_commutative
O Azure Cosmos DB for PostgreSQL impõe regras de comutatividade e obtém bloqueios apropriados para modificar operações, a fim de garantir a correção de comportamento. Por exemplo, ela pressupõe que uma instrução INSERT faz comutação com outra instrução INSERT, mas não com uma instrução UPDATE ou DELETE. Da mesma forma, ela pressupõe que uma instrução UPDATE ou DELETE não faça comutação com outra instrução UPDATE ou DELETE. Essa precaução significa que UPDATEs e DELETEs exigem que o Azure Cosmos DB for PostgreSQL adquira bloqueios mais fortes.
Se você tiver instruções UPDATE que estejam comutadas com instruções INSERT ou outras UPDATE, defina esse parâmetro como true. Quando esse parâmetro for definido como true, todos os comandos serão considerados comutativos e exigirão um bloqueio compartilhado, o que pode melhorar a produtividade geral. Esse parâmetro é válido para o coordenador e pode ser definido no tempo de execução.
citus.remote_task_check_interval (inteiro)
Define a frequência na qual o Azure Cosmos DB for PostgreSQL verifica os status dos trabalhos gerenciados pelo executor do rastreador de tarefas. O padrão é 10 ms. O coordenador atribui tarefas aos trabalhos e, em seguida, verifica regularmente com eles sobre o progresso de cada tarefa. Esse valor de configuração define o intervalo de tempo entre duas verificações subsequentes. Esse parâmetro é válido para o coordenador e pode ser definido no tempo de execução.
citus.task_executor_type (enumeração)
O Azure Cosmos DB for PostgreSQL tem três tipos de executor para realizar consultas SELECT distribuídas. O executor desejado pode ser selecionado, definindo este parâmetro de configuração. Os valores aceitáveis para esse parâmetro são:
- adaptativo: o padrão. É ideal para respostas rápidas a consultas que envolvem agregações e uniões com localização compartilhada que contêm vários fragmentos.
- rastreador de tarefas: o executor do rastreador de tarefas é adequado para consultas complexas e execução prolongada, que exigem embaralhamento de dados entre os nós de trabalho e gerenciamento eficiente de recursos.
- tempo real: (obsoleto) tem uma finalidade semelhante à do executor adaptável, mas é menos flexível e pode causar mais pressão de conexão nos nós de trabalho.
Esse parâmetro é válido para o coordenador e pode ser definido no tempo de execução.
citus.multi_task_query_log_level (enumeração) {#multi_task_logging}
Define um nível de registro para qualquer consulta que gere mais de uma tarefa (ou seja, que atinge mais de um fragmento). O registro em log é útil durante uma migração de aplicativo multilocatário, pois você pode escolher um erro ou aviso para essas consultas para encontrá-las e adicionar um filtro de ID_locatário nelas. Esse parâmetro é válido para o coordenador e pode ser definido no tempo de execução. O valor padrão para este parâmetro é 'off'.
Os valores suportados para esta enumeração são:
- desativar: desative o registro de log de todas as consultas que geram várias tarefas (ou seja, contêm vários fragmentos)
- depurar: registra a instrução no nível de gravidade DEBUG.
- registrar: registra a instrução no nível de gravidade LOG. A linha de log inclui a consulta SQL que foi executada.
- aviso: registra a instrução no nível de gravidade NOTICE.
- aviso: registra a instrução no nível de gravidade WARNING.
- erro: registra a instrução no nível de gravidade ERROR.
Pode ser útil usar error
durante o teste de desenvolvimento e um nível de registro inferior, como log
, durante a implantação de produção real.
Escolher log
fará com que as consultas de várias tarefas apareçam nos registros do banco de dados com a própria consulta mostrada após "STATEMENT."
LOG: multi-task query about to be executed
HINT: Queries are split to multiple tasks if they have to be split into several queries on the workers.
STATEMENT: select * from foo;
citus.propagate_set_commands (enumeração)
Determina quais comandos SET serão propagados do coordenador para os trabalhos. O valor padrão para este parâmetro é 'none'.
Os valores com suporte são:
- none: nenhum comando SET será propagado.
- local: somente os comandos SET LOCAL serão propagados.
citus.create_object_propagation (enumeração)
Controla o comportamento de instruções CREATE em transações para objetos com suporte.
Quando os objetos são criados em um bloco de transação de várias instruções, o Azure Cosmos DB for PostgreSQL alterna o modo sequencial para garantir que os objetos criados fiquem visíveis para instruções posteriores em fragmentos. No entanto, a mudança para o modo sequencial nem sempre é desejável. Ao substituir esse comportamento, o usuário pode trocar o desempenho por consistência transacional completa na criação de novos objetos.
O valor padrão para este parâmetro é 'immediate'.
Os valores com suporte são:
- immediate: gera um erro em transações em que operações paralelas como create_distributed_table ocorrem antes de uma tentativa de CREATE TYPE.
- automático: adiar a criação de tipos ao compartilhar uma transação com uma operação paralela em tabelas distribuídas. Pode haver alguma inconsistência entre quais objetos de banco de dados existem em nós diferentes.
- adiado: retorne ao comportamento pré-11.0, que é como automático, mas com outros casos sutis de canto. Recomendamos a configuração automática à adiada, a menos que você exija compatibilidade verdadeira com versões anteriores.
Para obter um exemplo desse GUC em ação, consulte propagação de tipo.
citus.enable_repartition_joins (booleano)
Normalmente, a tentativa de executar junções de repartição com o executor adaptativo falha com uma mensagem de erro. No entanto, definir citus.enable_repartition_joins
como true permite que o Azure Cosmos DB for PostgreSQL alterne temporariamente para o executor do rastreador de tarefas para executar a união. O valor padrão é false.
citus.enable_repartitioned_insert_select (booliano)
Por padrão, uma INSERT INTO... A instrução SELECT que não pode ser enviada tenta reparticionar as linhas da instrução SELECT e transferi-las entre os trabalhos para inserção. No entanto, se a tabela de destino tiver muitos fragmentos, o reparticionamento provavelmente não terá um bom desempenho. A sobrecarga de processar os intervalos de fragmentos ao determinar como particionar os resultados é muito grande.
O reparticionamento pode ser desabilitado manualmente definindo citus.enable_repartitioned_insert_select
como false.
citus.enable_binary_protocol (booliano)
Definir esse parâmetro como true instrui o nó coordenador a usar o formato de serialização binária do PostgreSQL (quando aplicável) para transferir dados com trabalhos. Alguns tipos de coluna não dão suporte à serialização binária.
Habilitar esse parâmetro é útil principalmente quando os trabalhos devem retornar grandes volumes de dados. Os exemplos são quando muitas linhas são solicitadas, as linhas têm muitas colunas ou usam tipos amplos, como hll
na extensão postgresql-hll.
O valor padrão é true
. Quando definido como false
, todos os resultados são codificados e transferidos no formato de texto.
citus.max_adaptive_executor_pool_size (inteiro)
Max_adaptive_executor_pool_size limita as conexões de trabalho na sessão atual. Esse GUC é útil para:
- Impedir que um único back-end obtenha todos os recursos de trabalho
- Fornecer gerenciamento de prioridade: designar sessões de baixa prioridade com sessões de baixa prioridade max_adaptive_executor_pool_size e sessões de alta prioridade com valores mais altos
O valor padrão é 16.
citus.executor_slow_start_interval (inteiro)
Tempo de espera em milissegundos entre as conexões de abertura para o mesmo nó de trabalho.
Quando as tarefas individuais de uma consulta de vários fragmentos levam pouco tempo, elas geralmente podem ser concluídas em uma única conexão (normalmente já armazenada em cache). Para evitar a abertura redundante de mais conexões, o executor aguarda entre as tentativas de conexão pelo número configurado de milissegundos. No final do intervalo, ele aumenta o número de conexões que ele pode abrir na próxima vez.
Para consultas longas (que levam >500 ms), o início lento pode adicionar latência, mas para consultas curtas, é mais rápido. O valor padrão é 10 ms.
citus.max_cached_conns_per_worker (inteiro)
Cada back-end abre conexões com os trabalhos para consultar os fragmentos. No final da transação, o número de conexões configurado é mantido em aberto para acelerar os comandos subsequentes. Aumentar esse valor reduz a latência de consultas de vários fragmentos, mas também aumenta a sobrecarga nos trabalhos.
O valor padrão é 1. Um valor maior, como 2, pode ser útil para clusters que usam um pequeno número de sessões simultâneas, mas não é recomendável exceder muito (por exemplo, 16 seria muito alto).
citus.force_max_query_parallelization (booliano)
Simula o executor em tempo real preterido e agora inexistente. Esse parâmetro é utilizado para abrir o máximo de conexões possível, a fim de maximizar a paralelização de consultas.
Quando esse GUC está habilitado, o Azure Cosmos DB for PostgreSQL força o executor adaptativo a usar o máximo de conexões possível durante a execução de uma consulta distribuída paralela. Se não estiver habilitado, o executor poderá optar por usar menos conexões para otimizar a taxa de transferência de execução de consulta geral. Internamente, configurar esse true
acaba usando uma conexão por tarefa.
Um lugar onde esse parâmetro é útil é em uma transação cuja primeira consulta é leve e requer poucas conexões, enquanto uma consulta subsequente se beneficiaria de mais conexões. O Azure Cosmos DB for PostgreSQL decide quantas conexões usar em uma transação com base na primeira instrução, que pode limitar outras consultas, a menos que use o GUC para fornecer uma dica.
BEGIN;
-- add this hint
SET citus.force_max_query_parallelization TO ON;
-- a lightweight query that doesn't require many connections
SELECT count(*) FROM table WHERE filter = x;
-- a query that benefits from more connections, and can obtain
-- them since we forced max parallelization above
SELECT ... very .. complex .. SQL;
COMMIT;
O valor padrão é false.
Configuração do executor do rastreador de tarefas
citus.task_tracker_delay (inteiro)
Esse parâmetro define o tempo de suspensão do rastreador de tarefas entre os ciclos do gerenciamento de tarefas. O padrão é 200 ms. O processo do rastreador de tarefas é ativado regularmente, percorre todas as tarefas atribuídas a ele e agenda e executa essas tarefas. Em seguida, o rastreador de tarefas é suspenso por um período antes de percorrer essas tarefas novamente. Esse valor de configuração determina a duração desse período de suspensão. Esse parâmetro é válido para os trabalhos e precisa ser alterado no arquivo postgresql.conf. Depois de editar o arquivo de configuração, os usuários podem enviar um sinal SIGHUP ou reiniciar o servidor para que a alteração entre em vigor.
Esse parâmetro pode ser diminuído para cortar o atraso causado pelo executor do rastreador de tarefas, reduzindo o tempo entre os ciclos de gerenciamento. A diminuição do atraso é útil em casos em que as consultas de fragmento são curtas e, portanto, atualizam seu status regularmente.
citus.max_assign_task_batch_size (inteiro)
O executor do rastreador de tarefas no coordenador atribui de maneira síncrona as tarefas em lotes ao daemon nos trabalhos. Esse parâmetro define o número máximo de tarefas a serem atribuídas em um único lote. Escolher um tamanho de lote maior permite uma atribuição de tarefa mais rápida. No entanto, se o número de trabalhos for grande, poderá levar mais tempo para que todos os trabalhos obtenham tarefas. Esse parâmetro é válido para o coordenador e pode ser definido no tempo de execução.
citus.max_running_tasks_per_node (inteiro)
O processo do rastreador de tarefas agenda e executa as tarefas atribuídas a ele, conforme apropriado. Esse valor de configuração define o número máximo de tarefas a serem executadas simultaneamente em um nó em um tempo específico. O padrão é 8.
O limite garante que você não tenha muitas tarefas ocorrendo no disco ao mesmo tempo e ajuda a evitar a contenção de E/S do disco. Se as consultas forem alimentadas por meio da memória ou de SSDs, você poderá aumentar o máximo_tarefas_execução_por_nó sem muitos problemas.
citus.partition_buffer_size (inteiro)
Define o tamanho do buffer a ser usado para operações de partição. O padrão é 8 MB. O Azure Cosmos DB for PostgreSQL permite que os dados da tabela sejam reparticionados em vários arquivos ao unir duas tabelas grandes. Depois que esse buffer de partição for preenchido, os dados reparticionados serão liberados para arquivos no disco. Essa entrada de configuração é válida para os trabalhos e pode ser definida no tempo de execução.
Saída EXPLAIN
citus.explain_all_tasks (booleano)
Por padrão, o Azure Cosmos DB for PostgreSQL mostra a saída de uma única tarefa arbitrária ao executar EXPLAIN em uma consulta distribuída. Na maioria dos casos, a saída de explicação é semelhante entre as tarefas. Ocasionalmente, algumas das tarefas são planejadas de forma diferente ou têm tempos de execução muito maiores. Nesses casos, pode ser útil habilitar esse parâmetro, após o qual a saída EXPLAIN inclui todas as tarefas. A explicação de todas as tarefas pode fazer com que o EXPLAIN demore mais.
citus.explain_analyze_sort_method (enumeração)
Determina o método de classificação das tarefas na saída de EXPLAIN ANALYZE. O valor padrão de citus.explain_analyze_sort_method
é execution-time
.
Os valores com suporte são:
- execution-time: classificar por tempo de execução.
- taskId: classificar por ID da tarefa.
Parâmetros PgBouncer gerenciados
Os seguintes parâmetros PgBouncer gerenciados podem ser configurados em um único nó ou coordenador.
Nome do Parâmetro | Descrição | Padrão |
---|---|---|
pgbouncer.default_pool_size | Defina esse valor de parâmetro para o número de conexões por par usuário/banco de dados. | 295 |
pgbouncer.ignore_startup_parameters | Lista separada por vírgulas de parâmetros que o PgBouncer pode ignorar. Por exemplo, você pode permitir que o PgBouncer ignore o parâmetro extra_float_digits . Alguns parâmetros são permitidos, todos os outros geram erro. Essa capacidade é necessária para tolerar o excesso de entusiasmo do JDBC em querer definir incondicionalmente 'extra_float_digits=2' no pacote de inicialização. Use essa opção se a biblioteca que você usa reportar erros como pq: unsupported startup parameter: extra_float_digits . |
extra_float_digits, ssl_renegotiation_limit |
pgBouncer.max_client_conn | Definir esse valor de parâmetro como o número mais alto de conexões de cliente para PgBouncer que você deseja dar suporte. | 2000 |
pgBouncer.min_pool_size | Adicione mais conexões de servidor ao pool se estiver abaixo desse número. | 0 (desabilitado) |
pgBouncer.pool_mode | Definir esse valor de parâmetro como TRANSACTION para pooling de transações (que é a configuração recomendada para a maioria das cargas de trabalho). | TRANSACTION |
pgbouncer.query_wait_timeout | Tempo máximo (em segundos) que as consultas podem levar aguardando a execução. Se a consulta não for atribuída a um servidor durante esse período, o cliente será desconectado. | 20s |
pgbouncer.server_idle_timeout | Se uma conexão de servidor estiver ociosa por mais de alguns segundos, ela será fechada. Se for 0, esse tempo limite será desabilitado. | 60s |
Parâmetros PostgreSQL
- DateStyle - Define o formato de exibição dos valores de data e hora.
- IntervalStyle - Define o formato de exibição para valores de intervalo.
- TimeZone - Define o fuso horário para exibir e interpretar carimbos de hora.
- application_name - Define o nome do aplicativo a ser informado nas estatísticas e registros.
- array_nulls - Ativa a entrada de elementos NULL em matrizes.
- autovacuum - Inicia o subprocesso autovacuum.
- autovacuum_analyze_scale_factor - Número de inserções, atualizações ou exclusões de tupla antes de analisar como uma fração de reltuples.
- autovacuum_analyze_threshold - Número mínimo de inserções, atualizações ou exclusões de tupla antes da análise.
- autovacuum_naptime - Tempo de suspensão entre as execuções de autovacuum.
- autovacuum_vacuum_cost_delay - Atraso do custo do vacuum em milissegundos para autovacuum.
- autovacuum_vacuum_cost_limit - Valor de custo do vacuum disponível antes da suspensão para autovacuum.
- autovacuum_vacuum_scale_factor - Número de atualizações ou exclusões de tupla antes do vacuum como uma fração de reltuples.
- autovacuum_vacuum_threshold - Número mínimo de atualizações ou exclusões de tupla antes do vacuum.
- autovacuum_work_mem - Define a memória máxima a ser usada por cada processo de trabalho de autovacuum.
- backend_flush_after - Número de páginas após as quais as gravações executadas anteriormente são liberadas para o disco.
- backslash_quote - Define se "'" é permitido em literais de cadeia de caracteres.
- bgwriter_delay - Tempo de suspensão da gravação em segundo plano entre os ciclos.
- bgwriter_flush_after - Número de páginas após as quais as gravações executadas anteriormente são liberadas para o disco.
- bgwriter_lru_maxpages - Número máximo de páginas de LRU do gravador em segundo plano a serem liberadas por ciclo.
- bgwriter_lru_multiplier - Múltiplo do uso médio do buffer a ser liberado por ciclo.
- bytea_output - Define o formato de saída para bytes.
- check_function_bodies - Verifica os corpos da função durante CREATE FUNCTION.
- checkpoint_completion_target - Tempo gasto na limpeza de buffers sujos durante o ponto de verificação, como uma fração do intervalo do ponto de verificação.
- checkpoint_timeout - Define o tempo máximo entre os pontos de verificação de WAL automáticos.
- checkpoint_warning - Ativa os avisos se os segmentos do ponto de verificação forem preenchidos com mais frequência do que isso.
- client_encoding - Define a codificação do conjunto de caracteres do cliente.
- client_min_messages - Define os níveis de mensagem que são enviados ao cliente.
- commit_delay - Define o atraso em microssegundos entre a confirmação da transação e a liberação do WAL para o disco.
- commit_siblings - Define o mínimo de transações abertas simultâneas antes de executar commit_delay.
- constraint_exclusion - Permite que o planejador use restrições para otimizar as consultas.
- cpu_index_tuple_cost - Define a estimativa do planejador para o custo de processamento de cada entrada do índice durante uma verificação de índice.
- cpu_operator_cost - Define a estimativa do planejador para o custo de processamento de cada operador ou chamada de função.
- cpu_tuple_cost - Define a estimativa do planejador para o custo de processamento de cada tupla (linha).
- cursor_tuple_fraction - Define a estimativa do planejador da fração das linhas de um cursor que são recuperadas
- deadlock_timeout - Define o tempo, em milissegundos, para aguardar um bloqueio antes de verificar se há deadlock.
- debug_pretty_print - Os recuos analisam e planejam as exibições de árvore.
- debug_print_parse - Registra a árvore de análise de cada consulta.
- debug_print_plan - Registra o plano de execução de cada consulta.
- debug_print_rewritten - Registra a árvore de análise reescrita de cada consulta.
- default_statistics_target - Define o destino das estatísticas padrão.
- default_tablespace - Define o espaço de tabela padrão nos quais criar tabelas e índices.
- default_text_search_config - Define a configuração de pesquisa de texto padrão.
- default_transaction_deferrable - Define o status padrão adiável de novas transações.
- default_transaction_isolation - Define o nível de isolamento da transação de cada nova transação.
- default_transaction_read_only - Define o status somente leitura padrão de novas transações.
- default_with_oids - Cria, por padrão, novas tabelas com OIDs.
- effective_cache_size - Define a suposição do planejador sobre o tamanho do cache de disco.
- enable_bitmapscan - Permite o uso do planejador de planos de verificação de bitmap.
- enable_gathermerge - Permite o uso do planejador de planos de mesclagem de coletas.
- enable_hashagg - Permite o uso do planejador de planos de agregação em hash.
- enable_hashjoin - Permite o uso do planejador de planos de união por hash.
- enable_indexonlyscan - Permite o uso do planejador de planos de verificação somente de índice.
- enable_indexscan - Permite o uso do planejador de planos de verificação de índice.
- enable_material - Permite o uso do planejador para materialização.
- enable_mergejoin - Permite o uso do planejador de planos de união de mesclagens.
- enable_nestloop - Permite o uso do planejador de planos de união de loops aninhados.
- enable_seqscan - Permite o uso do planejador de planos de verificações sequenciais.
- enable_sort - Permite o uso do planejador de etapas de classificação explícitas.
- enable_tidscan - Permite o uso do planejador de planos de verificação de TID.
- escape_string_warning - Avisa sobre os escapes de barra invertida em literais de cadeia de caracteres comuns.
- exit_on_error - Encerra a sessão quando ocorre qualquer erro.
- extra_float_digits - Define o número de dígitos exibidos para valores de ponto flutuante.
- force_parallel_mode - Força o uso de recursos de consulta paralela.
- from_collapse_limit – Define o tamanho de FROM-list, acima dele, as subconsultas não serão recolhidas
- geqo - Ativa a otimização de consulta herdada.
- geqo_effort - GEQO: esforço é usado para definir o padrão para outros parâmetros GEQO.
- geqo_generations - GEQO: número de iterações do algoritmo.
- geqo_pool_size - GEQO: número de indivíduos na população.
- geqo_seed - GEQO: semente para seleção de caminho aleatório.
- geqo_selection_bias - GEQO: pressão seletiva na população.
- geqo_threshold - Define o limite de itens FROM, acima dele, o GEQO será usado.
- gin_fuzzy_search_limit - Define o resultado máximo permitido para a pesquisa exata por GIN.
- gin_pending_list_limit - Define o tamanho máximo da lista pendente para o índice GIN.
- idle_in_transaction_session_timeout - Define a duração máxima permitida de qualquer transação inativa.
- join_collapse_limit – Define o tamanho de FROM-list, acima dele, os constructos JOIN não serão niveladas
- lc_monetary - Define o local para formatar os valores monetários.
- lc_numeric - Define o local para formatar os números.
- lo_compat_privileges - Habilita o modo de compatibilidade com versões anteriores para verificações de privilégios em objetos grandes.
- lock_timeout - Define a duração máxima permitida (em milissegundos) de qualquer espera por um bloqueio. 0 desativa essa opção.
- log_autovacuum_min_duration - Define o tempo mínimo de execução acima do qual as ações de autovacuum são registradas
- log_connections - Registra cada conexão bem-sucedida.
- log_destination - Define o destino para a saída de registro do servidor.
- log_disconnections - Registra o final de uma sessão, incluindo a duração.
- log_duration - Registra a duração de cada instrução SQL concluída.
- log_error_verbosity - Define o detalhamento das mensagens registradas.
- log_lock_waits - Registra longas esperas de bloqueio.
- log_min_duration_statement - Define o tempo mínimo de execução (em milissegundos) acima do qual as instruções são registradas. -1 desabilita as durações da instrução de registro em log.
- log_min_error_statement - Faz com que todas as instruções que geram erros neste nível ou acima sejam registradas.
- log_min_messages - Define os níveis de mensagem que são registrados.
- log_replication_commands - Registra cada comando de replicação.
- log_statement - Define o tipo de instruções registradas.
- log_statement_stats - Para cada consulta, grava as estatísticas de desempenho acumuladas no registro do servidor.
- log_temp_files - Registra o uso de arquivos temporários maiores do que este número de kilobytes.
- maintenance_work_mem - Define a memória máxima a ser usada para operações de manutenção.
- max_parallel_workers – Define o número máximo de trabalhos paralelos que podem estar ativos ao mesmo tempo
- max_parallel_workers_per_gather - Define o número máximo de processos paralelos por nó executor.
- max_pred_locks_per_page - Define o número máximo de tuplas bloqueadas por predicado, por página.
- max_pred_locks_per_relation - Define o número máximo de páginas e tuplas, bloqueadas por predicado, por relação.
- max_standby_archive_delay - Define o atraso máximo antes de cancelar consultas, quando um servidor de espera ativa estiver processando dados de WAL arquivados.
- max_standby_streaming_delay - Define o atraso máximo antes de cancelar consultas, quando um servidor de espera ativa estiver processando dados de WAL transmitidos.
- max_sync_workers_per_subscription - Número máximo de trabalhos de sincronização de tabela por assinatura.
- max_wal_size - Define o tamanho do WAL que aciona um ponto de verificação.
- min_parallel_index_scan_size - Define a quantidade mínima de dados de índice para uma verificação paralela.
- min_wal_size - Define o tamanho mínimo para reduzir o WAL.
- operator_precedence_warning - Emite um aviso para construções que mudaram de significado desde o PostgreSQL 9.4.
- parallel_setup_cost - Define a estimativa do planejador para o custo de inicialização de processos de trabalho para uma consulta paralela.
- parallel_tuple_cost – Define a estimativa do planejador para o custo de encaminhamento de cada tupla (linha) do trabalho para o back-end principal
- pg_stat_statements.save - Salva estatísticas depg_stat_statements em desligamentos do servidor.
- pg_stat_statements.track - Seleciona quais instruções são rastreadas por pg_stat_statements.
- pg_stat_statements.track_utility - Seleciona se os comandos do utilitário serão rastreados por pg_stat_statements.
- quote_all_identifiers - Coloca entre aspas todos os identificadores ao gerar fragmentos de SQL.
- random_page_cost - Define a estimativa do planejador para o custo de uma página de disco buscada não sequencialmente.
- row_security - Habilita a segurança da linha.
- search_path – Define a ordem de pesquisa do esquema para nomes que não são qualificados pelo esquema
- seq_page_cost - Define a estimativa do planejador para o custo de uma página de disco buscada sequencialmente.
- session_replication_role - Define o comportamento da sessão para gatilhos e regras de regravação.
- standard_conforming_strings - Faz com que as cadeias de caracteres '...' tratem literalmente as barras invertidas.
- statement_timeout - Define a duração máxima permitida (em milissegundos) de qualquer instrução. 0 desativa essa opção.
- synchronize_seqscans - Habilita verificações sequenciais sincronizadas.
- synchronous_commit - Define o nível de sincronização da transação atual.
- tcp_keepalives_count - Número máximo de retransmissões de keepalive do TCP.
- tcp_keepalives_idle - Tempo entre a emissão de keepalive do TCP.
- tcp_keepalives_interval - Tempo entre as retransmissões de manutenção do protocolo TCP.
- temp_buffers - Define o número máximo de buffers temporários usados por cada sessão do banco de dados.
- temp_tablespaces - Define os espaços de tabela a serem usados para tabelas temporárias e arquivos de classificação.
- track_activities - Coleta informações sobre a execução de comandos.
- track_counts - Coleta estatísticas sobre a atividade do banco de dados.
- track_functions - Coleta estatísticas de nível de função sobre a atividade do banco de dados.
- track_io_timing - Coleta estatísticas de tempo para a atividade de E/S do banco de dados.
- transform_null_equals - Trata "expr=NULL" como "expr IS NULL".
- vacuum_cost_delay - Atraso no custo de vacuum em milissegundos.
- vacuum_cost_limit - Valor do custo de vacuum disponível antes da suspensão.
- vacuum_cost_page_dirty - Custo de vacuum para uma página corrompida por vacuum.
- vacuum_cost_page_hit - Custo de vacuum para uma página encontrada no cache do buffer.
- vacuum_cost_page_miss - Custo de vacuum para uma página não encontrada no cache do buffer.
- vacuum_defer_cleanup_age - Número de transações em que a limpeza de VACUUM e HOT deve ser adiada, se houver.
- vacuum_freeze_min_age - Tempo mínimo em que o VACUUM deve congelar uma linha da tabela.
- vacuum_freeze_table_age - Tempo em que o VACUUM deve verificar a tabela inteira para congelar as tuplas.
- vacuum_multixact_freeze_min_age - Tempo mínimo em que o VACUUM deve congelar um MultiXactId em uma linha da tabela.
- vacuum_multixact_freeze_table_age - Tempo de multixact em que o VACUUM deve verificar a tabela inteira para congelar as tuplas.
- wal_receiver_status_interval - Define o intervalo máximo para o status do receptor WAL informar o primário.
- wal_writer_delay - Tempo entre as liberações de WAL realizadas no gravador WAL.
- wal_writer_flush_after - Quantidade de WAL registrado pelo gravador WAL que aciona uma liberação.
- work_mem - Define a quantidade de memória a ser usada por operações de classificação interna e tabelas de hash antes de gravar em arquivos de disco temporários.
- xmlbinary - Define como os valores binários devem ser codificados em XML.
- xmloption - Define se os dados XML em operações de análise e serialização implícitas devem ser considerados como documentos ou fragmentos de conteúdo.
Próximas etapas
- Outra forma de configuração, além dos parâmetros do servidor, são as opções de configuração do recurso em um cluster.
- O banco de dados do PostgreSQL subjacente também tem parâmetros de configuração.