Parametri del server in Azure Cosmos DB for PostgreSQL
SI APPLICA A: Azure Cosmos DB for PostgreSQL (con tecnologia basata su estensione di database Citus per PostgreSQL)
Esistono vari parametri del server che influiscono sul comportamento di Azure Cosmos DB per PostgreSQL, sia da PostgreSQL standard che specifici per Azure Cosmos DB per PostgreSQL. Questi parametri possono essere impostati nel portale di Azure per un cluster. Nella categoria Impostazioni scegliere i parametri del Nodo di lavoro o i parametri deli Nodo coordinatore. Queste pagine consentono di impostare i parametri per tutti i nodi di lavoro o solo per il nodo coordinatore.
Parametri di Azure Cosmos DB for PostgreSQL
Nota
I cluster che eseguono versioni precedenti dell'estensione Citus potrebbero non offrire tutti i parametri elencati di seguito.
General configuration
citus.use_secondary_nodes (enum)
Imposta i criteri da usare quando si scelgono i nodi per le query SELECT. Se è impostato su "sempre", il planner esegue una query solo sui nodi contrassegnati come "secondari" nel pg_dist_node.
I valori supportati per questa enumerazione sono:
- never: (impostazione predefinita) tutte le letture vengono eseguite nei nodi primari.
- always: le letture vengono eseguite sui nodi secondari e le istruzioni insert/update sono disabilitate.
citus.cluster_name (testo)
Indica al coordinatore node planner quale cluster coordina. Dopo aver impostato cluster_name, lo strumento di pianificazione esegue una query sui nodi di lavoro in tale cluster.
citus.enable_version_checks (booleano)
L'aggiornamento della versione di Azure Cosmos DB per PostgreSQL richiede un riavvio del server (per selezionare la nuova libreria condivisa), seguito dal comando ALTER EXTENSION UPDATE. L'errore di eseguire entrambi i passaggi potrebbe causare errori o arresti anomali. Azure Cosmos DB per PostgreSQL convalida quindi la versione del codice e quella dell'estensione corrispondente ed esegue l'errore in caso contrario.
Il valore predefinito è true ed è efficace per il coordinatore. In rari casi, i processi di aggiornamento complessi potrebbero richiedere l'impostazione di questo parametro su false, disabilitando così il controllo.
citus.log_distributed_deadlock_detection (boolean)
Indica se registrare l'elaborazione correlata al rilevamento dei deadlock distribuiti nel log del server. Il valore predefinito è false.
citus.distributed_deadlock_detection_factor (a virgola mobile)
Imposta il tempo di attesa prima di verificare la presenza di deadlock distribuiti. In particolare, il tempo di attesa è questo valore moltiplicato per l'impostazione deadlock_timeout di PostgreSQL. Il valore predefinito è 2
. Il valore -1
disabilita il rilevamento dei deadlock distribuiti.
citus.node_connection_timeout (integer)
La citus.node_connection_timeout
GUC imposta la durata massima,espressa in millisecondi, in attesa dell'istituzione della connessione. Azure Cosmos DB for PostgreSQL genera un errore se il timeout trascorre prima che venga stabilita almeno una connessione di lavoro. Questa GUC influisce sulle connessioni tra il coordinatore e i lavoratori e tra i lavoratori stessi.
- Impostazione predefinita: cinque secondi
- Minimo: 10 millisecondi
- Massimo: un'ora
-- set to 30 seconds
ALTER DATABASE foo
SET citus.node_connection_timeout = 30000;
citus.log_remote_commands (boolean)
Registrare tutti i comandi inviati dal coordinatore ai nodi del ruolo di lavoro. Ad esempio:
-- 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;
L'output rivela diverse query in esecuzione sui ruoli di lavoro a causa della singola count(*)
query sul coordinatore.
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 (testo)
Per impostazione predefinita, Azure Cosmos DB per PostgreSQL nasconde le partizioni dall'elenco delle tabelle che PostgreSQL fornisce ai client SQL. Ciò si verifica perché sono presenti più partizioni per ogni tabella distribuita e le partizioni possono distrarre al client SQL.
La citus.show_shards_for_app_name_prefixes
GUC consente di visualizzare le partizioni per i client selezionati che vogliono visualizzarli. Il valore predefinito è ''.
-- 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';
Il nascondere partizioni può essere disabilitato completamente usando citus.override_table_visibility.
citus.override_table_visibility (booleano)
Determina se citus.show_shards_for_app_name_prefixes è attivo. Il valore predefinito è 'true'. Se impostato su 'false', le partizioni sono visibili a tutte le applicazioni client.
citus.use_citus_managed_tables (booleano)
Consentire l'accesso alle nuove tabelle locali tramite query sui nodi di lavoro. Aggiunge tutte le tabelle appena create ai metadati Citus quando è abilitato. Il valore predefinito è 'false'.
citus.rebalancer_by_disk_size_base_cost (intero)
Usando la strategia di ribilanciamento by_disk_size ogni gruppo di partizioni ottiene questo costo in byte aggiunto alle dimensioni effettive del disco. Questo valore viene usato per evitare di creare un bilanciamento errato quando in alcune partizioni sono presenti pochi dati. Il presupposto è che anche le partizioni vuote hanno un costo, a causa del parallelismo e perché i gruppi di partizioni vuoti potrebbero crescere in futuro.
Il valore predefinito è 100MB
.
Statistiche sulle query
citus.stat_statements_purge_interval (intero)
Imposta la frequenza con cui il daemon di manutenzione rimuove i record da citus_stat_statements non corrispondenti in pg_stat_statements
. Questo valore di configurazione imposta l'intervallo di tempo tra ripuliture in secondi, con un valore predefinito pari a 10. Il valore 0 disabilita le eliminazioni.
SET citus.stat_statements_purge_interval TO 5;
Questo parametro è efficace per il coordinatore e può essere modificato in fase di esecuzione.
citus.stat_statements_max (integer)
Numero massimo di righe da archiviare in citus_stat_statements
. Il valore predefinito è 50000 e può essere modificato in qualsiasi valore compreso nell'intervallo da 1000 a 100000000. Ogni riga richiede 140 byte di spazio di archiviazione, quindi l'impostazione stat_statements_max
del valore massimo di 10M utilizzerebbe 1,4 GB di memoria.
La modifica di questa GUC non ha effetto fino al riavvio di PostgreSQL.
citus.stat_statements_track (enumerazione)
La registrazione delle statistiche per citus_stat_statements
richiede risorse cpu aggiuntive.
Quando si verifica il carico del database, l'amministratore può disabilitare il rilevamento delle istruzioni impostando citus.stat_statements_track
su none
.
- all: (impostazione predefinita) Tenere traccia di tutte le istruzioni.
- none: disabilita il rilevamento.
citus.stat_tenants_untracked_sample_rate
Frequenza di campionamento per i nuovi tenant in citus_stat_tenants
. La frequenza può essere compresa tra 0.0
e 1.0
. Il valore predefinito è 1.0
che il 100% delle query del tenant non rilevate viene campionato. Impostandolo su un valore inferiore significa che i tenant già rilevati dispongono di query campionate al 100%, ma i tenant attualmente non registrati vengono campionati solo alla velocità specificata.
Caricamento dati
citus.multi_shard_commit_protocol (enumerazione)
Imposta il protocollo di commit da utilizzare per l'esecuzione di COPY in una tabella con distribuzione hash. In ogni singola posizione di partizione, la funzione COPY viene eseguita in un blocco di transazioni per assicurarsi che non vengano inseriti dati se si verifica un errore durante la copia. Tuttavia, si verifica un caso di errore specifico in cui la copia ha esito positivo in tutti i posizionamenti, ma si verifica un errore (hardware) prima del commit di tutte le transazioni. Questo parametro può essere usato per evitare la perdita di dati in questo caso scegliendo tra i protocolli di commit seguenti:
- 2pc: (impostazione predefinita) Le transazioni in cui la copia viene eseguita sui posizionamenti delle partizioni vengono preparate per la prima volta usando il commit in due fasi di PostgreSQL e quindi viene eseguito il commit . I commit non riusciti possono essere recuperati manualmente o interrotti usando rispettivamente COMMIT PREPARED o ROLLBACK PREPARED. Quando si usa 2pc, max_prepared_transactions deve essere aumentato su tutti i lavoratori, in genere allo stesso valore di max_connections.
- 1pc: viene eseguito il commit delle transazioni in cui viene eseguito COPY nelle posizioni delle partizioni in un singolo round. I dati potrebbero essere persi se un commit ha esito negativo dopo l'esito positivo di COPY in tutti i posizionamenti (rari).
citus.shard_replication_factor (intero)
Imposta il fattore di replica per le partizioni, ovvero il numero di nodi in cui vengono posizionate le partizioni e il valore predefinito è 1. Questo parametro può essere impostato in fase di esecuzione ed è efficace nel coordinatore. Il valore ideale per questo parametro dipende dalle dimensioni del cluster e dalla frequenza di errore del nodo. Ad esempio, è possibile aumentare questo fattore di replica se si eseguono cluster di grandi dimensioni e si osservano gli errori dei nodi su base più frequente.
Configurazione di Planner
citus.local_table_join_policy (enumerazione)
Questa GUC determina il modo in cui Azure Cosmos DB per PostgreSQL sposta i dati durante l'esecuzione di un join tra tabelle locali e distribuite. La personalizzazione dei criteri di join consente di ridurre la quantità di dati inviati tra i nodi del ruolo di lavoro.
Azure Cosmos DB per PostgreSQL invia le tabelle locali o distribuite ai nodi in base alle esigenze per supportare il join. La copia dei dati della tabella viene definita "conversione". Se una tabella locale viene convertita, viene inviata a tutti i ruoli di lavoro che necessitano dei relativi dati per eseguire il join. Se una tabella distribuita viene convertita, viene raccolta nel coordinatore per supportare il join. Azure Cosmos DB per PostgreSQL Planner invia solo le righe necessarie che eseguono una conversione.
Sono disponibili quattro modalità per esprimere le preferenze di conversione:
- auto: (impostazione predefinita) Azure Cosmos DB per PostgreSQL converte tutte le tabelle locali o tutte le tabelle distribuite per supportare join di tabelle locali e distribuite. Azure Cosmos DB per PostgreSQL decide quale convertire usando un'euristica. Converte le tabelle distribuite se vengono unite in join usando un filtro costante per un indice univoco, ad esempio una chiave primaria. La conversione garantisce lo spostamento di meno dati tra i ruoli di lavoro.
- mai: Azure Cosmos DB per PostgreSQL non consente join tra tabelle locali e distribuite.
- prefer-local: Azure Cosmos DB per PostgreSQL preferisce convertire le tabelle locali per supportare join di tabelle locali e distribuite.
- distribuzione preferita: Azure Cosmos DB per PostgreSQL preferisce convertire le tabelle distribuite per supportare join di tabelle locali e distribuite. Se le tabelle distribuite sono enormi, l'uso di questa opzione potrebbe comportare lo spostamento di molti dati tra i ruoli di lavoro.
Si supponga citus_table
, ad esempio, che sia una tabella distribuita distribuita dalla colonna x
e che postgres_table
sia una tabella locale:
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 (intero)
Imposta il numero di righe da recuperare per ogni attività per l'ottimizzazione della clausola limite. In alcuni casi, selezionare query con clausole limite potrebbe dover recuperare tutte le righe da ogni attività per generare risultati. In questi casi e in cui un'approssimazione produce risultati significativi, questo valore di configurazione imposta il numero di righe da recuperare da ogni partizione. Le approssimazioni limite sono disabilitate per impostazione predefinita e questo parametro è impostato su -1. Questo valore può essere impostato in fase di esecuzione ed è efficace nel coordinatore.
citus.count_distinct_error_rate (a virgola mobile)
Azure Cosmos DB per PostgreSQL può calcolare le approssimazioni count(distinct) usando l'estensione postgresql-hll. Questa voce di configurazione imposta la frequenza di errore desiderata quando si calcola count(distinct). 0.0, ovvero l'impostazione predefinita, disabilita le approssimazioni per count(distinct); e 1.0 non fornisce alcuna garanzia sull'accuratezza dei risultati. Per ottenere risultati ottimali, è consigliabile impostare questo parametro su 0.005. Questo valore può essere impostato in fase di esecuzione ed è efficace nel coordinatore.
citus.task_assignment_policy (enumerazione)
Nota
Questa GUC è applicabile solo quando shard_replication_factor è maggiore di uno o per le query su reference_tables.
Imposta i criteri da usare per l'assegnazione di attività ai ruoli di lavoro. Il coordinatore assegna attività ai ruoli di lavoro in base alle posizioni delle partizioni. Questo valore di configurazione specifica i criteri da usare durante l'esecuzione di queste assegnazioni. Attualmente sono disponibili tre possibili criteri di assegnazione delle attività che è possibile usare.
- greedy: il criterio greedy è l'impostazione predefinita e mira a distribuire uniformemente le attività tra i lavoratori.
- round robin: il criterio round robin assegna attività ai ruoli di lavoro in modo round robin alternato tra repliche diverse. Questo criterio consente un migliore utilizzo del cluster quando il numero di partizioni per una tabella è basso rispetto al numero di ruoli di lavoro.
- first-replica: i criteri di prima replica assegnano attività in base all'ordine di inserimento delle posizioni (repliche) per le partizioni. In altre parole, la query di frammento per una partizione viene assegnata al ruolo di lavoro con la prima replica della partizione. Questo metodo consente di avere garanzie solide su quali partizioni vengono usate nei nodi , ovvero garanzie di residenza della memoria più avanzate.
Questo parametro può essere impostato in fase di esecuzione ed è efficace nel coordinatore.
citus.enable_non_colocated_router_query_pushdown (booleano)
Abilita router planner per le query che fanno riferimento a tabelle distribuite non con percorso condiviso.
Lo strumento di pianificazione router è abilitato solo per le query che fanno riferimento a tabelle distribuite con percorso condiviso perché in caso contrario le partizioni potrebbero non trovarsi nello stesso nodo. L'abilitazione di questo flag consente l'ottimizzazione per le query che fanno riferimento a tali tabelle, ma la query potrebbe non funzionare dopo il ribilanciamento delle partizioni o la modifica del numero di partizioni di tali tabelle.
Il valore predefinito è off
.
Trasferimento dati intermedio
citus.max_intermediate_result_size (integer)
Dimensioni massime in KB di risultati intermedi per le unità ATE che non possono essere spostate nei nodi di lavoro per l'esecuzione e per sottoquery complesse. Il valore predefinito è 1 GB e il valore -1 non indica alcun limite. Le query che superano il limite vengono annullate e generano un messaggio di errore.
DDL
citus.enable_schema_based_sharding
Con il parametro impostato su ON
, tutti gli schemi creati vengono distribuiti per impostazione predefinita. Gli schemi distribuiti vengono associati automaticamente a singoli gruppi di condivisione, in modo che le tabelle create in tali schemi vengano convertite in tabelle distribuite con percorso condiviso senza una chiave di partizione. Questa impostazione può essere modificata per singole sessioni.
Per un esempio di uso di questa GUC, vedere come progettare per microservizi.
Configurazione dell'executor
Generali
citus.all_modifications_commutative
Azure Cosmos DB per PostgreSQL applica regole di commutatività e acquisisce blocchi appropriati per le operazioni di modifica per garantire la correttezza del comportamento. Si supponga, ad esempio, che un'istruzione INSERT commuti con un'altra istruzione INSERT, ma non con un'istruzione UPDATE o DELETE. Analogamente, si presuppone che un'istruzione UPDATE o DELETE non commuti con un'altra istruzione UPDATE o DELETE. Questa precauzione significa che UPDATEs e DELETEs richiedono azure Cosmos DB per PostgreSQL per acquisire blocchi più potenti.
Se si dispone di istruzioni UPDATE commutative con gli INSERT o altri UPDATEs, è possibile ridurre questi presupposti di commutatività impostando questo parametro su true. Quando questo parametro è impostato su true, tutti i comandi vengono considerati commutativi e sostengono un blocco condiviso, che può migliorare la velocità effettiva complessiva. Questo parametro può essere impostato in fase di esecuzione ed è efficace nel coordinatore.
citus.remote_task_check_interval (intero)
Imposta la frequenza con cui Azure Cosmos DB per PostgreSQL controlla lo stato dei processi gestiti dall'executor dello strumento di rilevamento attività. Il valore predefinito è 10 ms. Il coordinatore assegna attività ai lavoratori e quindi controlla regolarmente con loro lo stato di avanzamento di ogni attività. Questo valore di configurazione imposta l'intervallo di tempo tra due controlli conseguenti. Questo parametro è efficace nel coordinatore e può essere impostato in fase di esecuzione.
citus.task_executor_type (enumerazione)
Azure Cosmos DB per PostgreSQL include tre tipi di executor per l'esecuzione di query SELECT distribuite. L'executor desiderato può essere selezionato impostando questo parametro di configurazione. I valori accettati per questo parametro sono:
- adaptive: impostazione predefinita. È ottimale per risposte rapide alle query che coinvolgono aggregazioni e join con colocat che si estendono su più partizioni.
- task-tracker: l'executor task-tracker è particolarmente adatto per query complesse a esecuzione prolungata che richiedono la spostamento casuale dei dati tra i nodi di lavoro e una gestione efficiente delle risorse.
- real-time: (deprecato) Serve uno scopo simile come l'executor adattivo, ma è meno flessibile e può causare una maggiore pressione di connessione sui nodi di lavoro.
Questo parametro può essere impostato in fase di esecuzione ed è efficace nel coordinatore.
citus.multi_task_query_log_level (enum) {#multi_task_logging}
Imposta un livello di log per qualsiasi query che genera più attività, ovvero che raggiunge più di una partizione. La registrazione è utile durante una migrazione di applicazioni multi-tenant, in quanto è possibile scegliere di eseguire un errore o avvisare per tali query, per trovarle e aggiungere un filtro tenant_id a tali query. Questo parametro può essere impostato in fase di esecuzione ed è efficace nel coordinatore. Il valore predefinito per questo parametro è 'off'.
I valori supportati per questa enumerazione sono:
- off: disattivare la registrazione di tutte le query che generano più attività( ovvero estendersi su più partizioni)
- debug: registra l'istruzione a livello di gravità DEBUG.
- log: registra l'istruzione a livello di gravità LOG. La riga di log include la query SQL eseguita.
- nota: registra l'istruzione a livello di gravità NOTICE.
- warning: registra l'istruzione a livello di gravità WARNING.
- error: registra l'istruzione a livello di gravità ERROR.
Può essere utile usare error
durante i test di sviluppo e un livello di log inferiore, ad log
esempio durante la distribuzione di produzione effettiva.
Se si sceglie log
, le query su più attività verranno visualizzate nei log del database con la query stessa visualizzata dopo "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 (enumerazione)
Determina quali comandi SET vengono propagati dal coordinatore ai ruoli di lavoro. Il valore predefinito per questo parametro è 'none'.
I valori supportati sono:
- none: non vengono propagati comandi SET.
- local: vengono propagati solo i comandi SET LOCAL.
citus.create_object_propagation (enumerazione)
Controlla il comportamento delle istruzioni CREATE nelle transazioni per gli oggetti supportati.
Quando gli oggetti vengono creati in un blocco di transazioni con più istruzioni, Azure Cosmos DB per PostgreSQL cambia la modalità sequenziale per garantire che gli oggetti creati siano visibili alle istruzioni successive nelle partizioni. Tuttavia, il passaggio alla modalità sequenziale non è sempre auspicabile. Eseguendo l'override di questo comportamento, l'utente può compromesso le prestazioni per garantire la coerenza transazionale completa nella creazione di nuovi oggetti.
Il valore predefinito per questo parametro è 'immediate'.
I valori supportati sono:
- immediate: genera un errore nelle transazioni in cui le operazioni parallele come create_distributed_table si verificano prima di un tentativo CREATE TYPE.
- automatic: posticipa la creazione di tipi quando si condivide una transazione con un'operazione parallela sulle tabelle distribuite. Potrebbe verificarsi un'incoerenza tra gli oggetti di database presenti in nodi diversi.
- posticipato: tornare al comportamento precedente alla 11.0, che è come automatico ma con altri casi angoli sottili. È consigliabile impostare l'impostazione automatica su posticipata, a meno che non sia necessaria una vera compatibilità con le versioni precedenti.
Per un esempio di questo GUC in azione, vedere propagazione dei tipi.
citus.enable_repartition_joins (booleano)
In genere, il tentativo di eseguire join di ripartizione con l'executor adattivo ha esito negativo con un messaggio di errore. Tuttavia, l'impostazione su citus.enable_repartition_joins
true consente ad Azure Cosmos DB per PostgreSQL di passare temporaneamente all'executor task-tracker per eseguire il join. Il valore predefinito è false.
citus.enable_repartitioned_insert_select (booleano)
Per impostazione predefinita, un'istruzione INSERT INTO ... Istruzione SELECT che non è possibile eseguire il push dei tentativi di ripartizione delle righe dall'istruzione SELECT e di trasferirle tra i ruoli di lavoro per l'inserimento. Tuttavia, se la tabella di destinazione ha troppe partizioni, il ripartizionamento probabilmente non avrà prestazioni buone. Il sovraccarico di elaborazione degli intervalli di partizione quando si determina come partizionare i risultati è troppo grande.
Il ripartizionamento può essere disabilitato manualmente impostando su citus.enable_repartitioned_insert_select
false.
citus.enable_binary_protocol (booleano)
L'impostazione di questo parametro su true indica al nodo coordinatore di usare il formato di serializzazione binaria di PostgreSQL (se applicabile) per trasferire i dati con i ruoli di lavoro. Alcuni tipi di colonna non supportano la serializzazione binaria.
L'abilitazione di questo parametro è particolarmente utile quando i ruoli di lavoro devono restituire grandi quantità di dati. Ad esempio, quando vengono richieste molte righe, le righe hanno molte colonne o usano tipi wide, ad hll
esempio dall'estensione postgresql-hll.
Il valore predefinito è true
. Se impostato su false
, tutti i risultati vengono codificati e trasferiti in formato testo.
citus.max_adaptive_executor_pool_size (integer)
Max_adaptive_executor_pool_size limita le connessioni di lavoro dalla sessione corrente. Questa GUC è utile per:
- Impedire a un singolo back-end di ottenere tutte le risorse di lavoro
- Gestione delle priorità: designare sessioni con priorità bassa con max_adaptive_executor_pool_size bassa e sessioni con priorità alta con valori più elevati
Il valore predefinito è 16.
citus.executor_slow_start_interval (intero)
Tempo di attesa in millisecondi tra l'apertura delle connessioni allo stesso nodo di lavoro.
Quando le singole attività di una query su più partizioni richiedono poco tempo, spesso possono essere completate su una singola connessione (spesso già memorizzata nella cache). Per evitare l'apertura ridondante di più connessioni, l'executor attende tra i tentativi di connessione il numero di millisecondi configurato. Al termine dell'intervallo, aumenta il numero di connessioni consentite per l'apertura successiva.
Per le query lunghe (che richiedono >500 ms), l'avvio lento potrebbe aggiungere latenza, ma per le query brevi è più veloce. Il valore predefinito è 10 ms.
citus.max_cached_conns_per_worker (integer)
Ogni back-end apre connessioni ai ruoli di lavoro per eseguire query sulle partizioni. Alla fine della transazione, il numero configurato di connessioni viene mantenuto aperto per velocizzare i comandi successivi. L'aumento di questo valore riduce la latenza delle query su più partizioni, ma aumenta anche il sovraccarico sui ruoli di lavoro.
Il valore predefinito è 1. Un valore maggiore, ad esempio 2, potrebbe essere utile per i cluster che usano un numero ridotto di sessioni simultanee, ma non è consigliabile andare molto oltre (ad esempio, 16 sarebbe troppo elevato).
citus.force_max_query_parallelization (booleano)
Simula l'executor deprecato e ora inesistente. Questo parametro viene usato per aprire il maggior numero possibile di connessioni per ottimizzare la parallelizzazione delle query.
Quando questa guC è abilitata, Azure Cosmos DB per PostgreSQL forza l'executor adattivo a usare il maggior numero possibile di connessioni durante l'esecuzione di una query distribuita parallela. Se non è abilitato, l'executor potrebbe scegliere di usare meno connessioni per ottimizzare la velocità effettiva complessiva dell'esecuzione delle query. Internamente, impostando questa opzione su true
si usa una connessione per ogni attività.
Una posizione in cui questo parametro è utile è in una transazione la cui prima query è leggera e richiede poche connessioni, mentre una query successiva trarrà vantaggio da più connessioni. Azure Cosmos DB per PostgreSQL determina il numero di connessioni da usare in una transazione in base alla prima istruzione, che può limitare le altre query a meno che non venga usata la GUC per fornire un suggerimento.
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;
Il valore predefinito è false.
Configurazione dell'executor dello strumento di rilevamento attività
citus.task_tracker_delay (intero)
Questo parametro imposta il tempo di sospensione dello strumento di rilevamento attività tra i round di gestione delle attività e il valore predefinito è 200 ms. Il processo di rilevamento attività si riattiva regolarmente, esamina tutte le attività assegnate e pianifica ed esegue queste attività. Quindi, lo strumento di rilevamento attività dorme per un periodo di tempo prima di camminare di nuovo su queste attività. Questo valore di configurazione determina la lunghezza del periodo di sospensione. Questo parametro è efficace per i ruoli di lavoro e deve essere modificato nel file postgresql.conf. Dopo aver modificato il file di configurazione, gli utenti possono inviare un segnale SIGHUP o riavviare il server per rendere effettiva la modifica.
Questo parametro può essere ridotto per ridurre il ritardo causato dall'executor dello strumento di rilevamento attività riducendo il divario di tempo tra i round di gestione. La riduzione del ritardo è utile nei casi in cui le query di partizione sono brevi e quindi ne aggiornano regolarmente lo stato.
citus.max_assign_task_batch_size (integer)
L'executor task tracker nel coordinatore assegna in modo sincrono le attività in batch al daemon nei ruoli di lavoro. Questo parametro imposta il numero massimo di attività da assegnare in un singolo batch. La scelta di una dimensione batch più grande consente un'assegnazione più rapida delle attività. Tuttavia, se il numero di ruoli di lavoro è elevato, potrebbe essere necessario più tempo per tutti i lavoratori per ottenere le attività. Questo parametro può essere impostato in fase di esecuzione ed è efficace nel coordinatore.
citus.max_running_tasks_per_node (integer)
Il processo di rilevamento attività pianifica ed esegue le attività assegnate a esso in base alle esigenze. Questo valore di configurazione imposta il numero massimo di attività da eseguire simultaneamente in un nodo in un determinato momento e il valore predefinito è 8.
Il limite garantisce che non siano presenti più attività che toccano il disco contemporaneamente e consente di evitare conflitti di I/O su disco. Se le query vengono gestite dalla memoria o dalle unità SSD, è possibile aumentare max_running_tasks_per_node senza problemi.
citus.partition_buffer_size (intero)
Imposta le dimensioni del buffer da utilizzare per le operazioni di partizione e il valore predefinito è 8 MB. Azure Cosmos DB per PostgreSQL consente di suddividere i dati delle tabelle in più file quando vengono unite due tabelle di grandi dimensioni. Dopo il riempimento di questo buffer di partizione, i dati ripartizionati vengono scaricati nei file su disco. Questa voce di configurazione può essere impostata in fase di esecuzione ed è efficace sui ruoli di lavoro.
Spiegare l'output
citus.explain_all_tasks (booleano)
Per impostazione predefinita, Azure Cosmos DB per PostgreSQL mostra l'output di una singola attività arbitraria durante l'esecuzione di EXPLAIN in una query distribuita. Nella maggior parte dei casi, l'output di spiegazione è simile tra le attività. In alcuni casi, alcune delle attività vengono pianificate in modo diverso o hanno tempi di esecuzione molto più elevati. In questi casi, può essere utile abilitare questo parametro, dopo il quale l'output EXPLAIN include tutte le attività. La spiegazione di tutte le attività potrebbe richiedere più tempo in EXPLAIN.
citus.explain_analyze_sort_method (enumerazione)
Determina il metodo di ordinamento delle attività nell'output di EXPLAIN ANALYZE. Il valore predefinito di citus.explain_analyze_sort_method
è execution-time
.
I valori supportati sono:
- tempo di esecuzione: ordinare in base al tempo di esecuzione.
- taskId: ordinare in base all'ID attività.
Parametri PgBouncer gestiti
I parametri PgBouncer gestiti seguenti possono essere configurati in un singolo nodo o in un coordinatore.
Nome parametro | Descrizione | Default |
---|---|---|
pgbouncer.default_pool_size | Impostare questo valore del parametro sul numero di connessioni per coppia utente/database. | 295 |
pgbouncer.ignore_startup_parameters | Elenco delimitato da virgole di parametri che PgBouncer può ignorare. Ad esempio, è possibile consentire a PgBouncer di ignorare extra_float_digits il parametro. Alcuni parametri sono consentiti, tutti gli altri generano un errore. Questa capacità è necessaria per tollerare JDBC eccessivamente entusiasta che vuole impostare in modo incondizionato 'extra_float_digits=2' nel pacchetto di avvio. Usare questa opzione se la raccolta in cui si usano errori di report, pq: unsupported startup parameter: extra_float_digits ad esempio . |
extra_float_digits, ssl_renegotiation_limit |
pgBouncer.max_client_conn | Impostare questo valore del parametro sul numero massimo di connessioni client a PgBouncer che si vuole supportare. | 2000 |
pgBouncer.min_pool_size | Aggiungere altre connessioni del server al pool se al di sotto di questo numero. | 0 (Disabled) |
pgBouncer.pool_mode | Impostare questo valore del parametro su TRANSACTION per il pool di transazioni (l'impostazione consigliata per la maggior parte dei carichi di lavoro). | TRANSACTION |
pgbouncer.query_wait_timeout | Tempo massimo (in secondi) per cui le query possono attendere l’esecuzione. Se la query non è assegnata a un server durante tale periodo, il client viene disconnesso. | 20 s |
pgbouncer.server_idle_timeout | Se una connessione server è rimasta inattiva più di questo numero di secondi, viene chiusa. Se 0, questo timeout è disabilitato. | 60 s |
Parametri postgreSQL
- DateStyle - Imposta il formato di visualizzazione per i valori di data e ora
- IntervalStyle - Imposta il formato di visualizzazione per i valori di intervallo
- Fuso orario : imposta il fuso orario per la visualizzazione e l'interpretazione dei timestamp
- application_name : imposta il nome dell'applicazione da segnalare nelle statistiche e nei log
- array_nulls - Abilita l'input di elementi NULL nelle matrici
- autovacuum : avvia il sottoprocesso autovacuum
- autovacuum_analyze_scale_factor - Numero di inserimenti, aggiornamenti o eliminazioni di tupla prima di analizzare come frazione di rimozioni
- autovacuum_analyze_threshold - Numero minimo di inserimenti, aggiornamenti o eliminazioni di tupla prima di analizzare
- autovacuum_naptime - Tempo di sospensione tra le esecuzioni di autovacuum
- autovacuum_vacuum_cost_delay - Ritardo dei costi vuoto in millisecondi per autovacuum
- autovacuum_vacuum_cost_limit - Importo costo vuoto disponibile prima del napping, per autovacuum
- autovacuum_vacuum_scale_factor - Numero di aggiornamenti o eliminazioni di tupla prima del vuoto come frazione di rimozioni
- autovacuum_vacuum_threshold - Numero minimo di aggiornamenti o eliminazioni di tupla prima del vuoto
- autovacuum_work_mem : imposta la memoria massima da usare per ogni processo di lavoro autovacuum
- backend_flush_after - Numero di pagine dopo le quali le scritture eseguite in precedenza vengono scaricate su disco
- backslash_quote : imposta se "'" è consentito nei valori letterali stringa
- bgwriter_delay - Tempo di sospensione dello scrittore in background tra round
- bgwriter_flush_after - Numero di pagine dopo le quali le scritture eseguite in precedenza vengono scaricate su disco
- bgwriter_lru_maxpages - Numero massimo di pagine LRU in background da scaricare per arrotondamento
- bgwriter_lru_multiplier - Più dell'utilizzo medio del buffer per liberare per round
- bytea_output : imposta il formato di output per bytea
- check_function_bodies - Controlla i corpi delle funzioni durante CREATE FUNCTION
- checkpoint_completion_target - Tempo impiegato per scaricare buffer dirty durante il checkpoint, come frazione dell'intervallo di checkpoint
- checkpoint_timeout : imposta il tempo massimo tra i checkpoint WAL automatici
- checkpoint_warning : abilita gli avvisi se i segmenti di checkpoint vengono riempiti più frequentemente rispetto a questo
- client_encoding : imposta la codifica del set di caratteri del client
- client_min_messages : imposta i livelli di messaggio inviati al client
- commit_delay : imposta il ritardo in microsecondi tra il commit della transazione e lo scaricamento di WAL su disco
- commit_siblings : imposta le transazioni aperte simultanee minime prima di eseguire commit_delay
- constraint_exclusion : consente all'utilità di pianificazione di usare vincoli per ottimizzare le query
- cpu_index_tuple_cost : imposta la stima del costo di elaborazione di ogni voce di indice durante un'analisi dell'indice
- cpu_operator_cost : imposta la stima del costo dell'elaborazione di ogni operatore o chiamata di funzione
- cpu_tuple_cost : imposta la stima del costo dell'elaborazione di ogni tupla (riga)
- cursor_tuple_fraction : imposta la stima della frazione delle righe di un cursore recuperate
- deadlock_timeout : imposta la quantità di tempo, espressa in millisecondi, per attendere un blocco prima di verificare la presenza di deadlock
- debug_pretty_print - Vengono visualizzati i rientri e la struttura ad albero del piano
- debug_print_parse : registra l'albero di analisi di ogni query
- debug_print_plan : registra il piano di esecuzione di ogni query
- debug_print_rewritten : registra l'albero di analisi riscritto di ogni query
- default_statistics_target : imposta la destinazione predefinita delle statistiche
- default_tablespace : imposta lo spazio di tabella predefinito per creare tabelle e indici in
- default_text_search_config - Imposta la configurazione di ricerca di testo predefinita
- default_transaction_deferrable : imposta lo stato rinviabile predefinito delle nuove transazioni
- default_transaction_isolation : imposta il livello di isolamento delle transazioni di ogni nuova transazione
- default_transaction_read_only : imposta lo stato di sola lettura predefinito delle nuove transazioni
- default_with_oids : crea nuove tabelle con URID per impostazione predefinita
- effective_cache_size : imposta il presupposto della pianificazione sulle dimensioni della cache del disco
- enable_bitmapscan : consente l'uso dei piani di analisi bitmap del planner
- enable_gathermerge : consente all'utilità di pianificazione di raccogliere piani di merge
- enable_hashagg : consente l'uso dei piani di aggregazione hash del pianificatore
- enable_hashjoin : consente all'utilità di pianificazione di usare piani hash join
- enable_indexonlyscan : consente l'uso dei piani di analisi solo indice
- enable_indexscan : consente l'uso dei piani di analisi degli indici
- enable_material : consente l'uso della materializzazione da parte del pianificatore
- enable_mergejoin : consente l'uso dei piani di join di merge del planner
- enable_nestloop : consente l'uso dei piani di join a cicli annidati di Planner
- enable_seqscan : consente all'utilità di pianificazione di usare piani di analisi sequenziale
- enable_sort : consente l'uso di passaggi di ordinamento espliciti del planner
- enable_tidscan : consente l'uso dei piani di analisi TID
- escape_string_warning - Segnala i caratteri di escape delle barre rovesciati in valori letterali stringa normali
- exit_on_error - Termina la sessione in caso di errore
- extra_float_digits : imposta il numero di cifre visualizzate per i valori a virgola mobile
- force_parallel_mode - Forza l'uso di funzionalità di query parallele
- from_collapse_limit : imposta le dimensioni dell'elenco FROM oltre le quali le sottoquery non vengono compresse
- geqo - Abilita l'ottimizzazione delle query genetiche
- geqo_effort - GEQO: viene usato per impostare il valore predefinito per altri parametri GEQO
- geqo_generations - GEQO: numero di iterazioni dell'algoritmo
- geqo_pool_size - GEQO: numero di individui nella popolazione
- geqo_seed - GEQO: valore di inizializzazione per la selezione del percorso casuale
- geqo_selection_bias - GEQO: pressione selettiva all'interno della popolazione
- geqo_threshold : imposta la soglia degli elementi FROM oltre il quale viene usato GEQO
- gin_fuzzy_search_limit - Imposta il risultato massimo consentito per la ricerca esatta da GIN
- gin_pending_list_limit : imposta le dimensioni massime dell'elenco in sospeso per l'indice GIN
- idle_in_transaction_session_timeout : imposta la durata massima consentita di qualsiasi transazione inattiva
- join_collapse_limit : imposta le dimensioni dell'elenco FROM oltre le quali i costrutti JOIN non vengono appiattiti
- lc_monetary : imposta le impostazioni locali per la formattazione degli importi monetari
- lc_numeric : imposta le impostazioni locali per la formattazione dei numeri
- lo_compat_privileges - Abilita la modalità di compatibilità con le versioni precedenti per i controlli dei privilegi su oggetti di grandi dimensioni
- lock_timeout: imposta la durata massima consentita (in millisecondi) di qualsiasi attesa per un blocco. 0 disattiva questa opzione
- log_autovacuum_min_duration : imposta il tempo di esecuzione minimo sopra il quale vengono registrate le azioni autovacuum
- log_connections : registra ogni connessione riuscita
- log_destination : imposta la destinazione per l'output del log del server
- log_disconnections : registra la fine di una sessione, inclusa la durata
- log_duration : registra la durata di ogni istruzione SQL completata
- log_error_verbosity : imposta il livello di dettaglio dei messaggi registrati
- log_lock_waits - Registra attese di blocco prolungate
- log_min_duration_statement: imposta il tempo di esecuzione minimo (in millisecondi) sopra il quale vengono registrate le istruzioni. -1 disabilita le durate delle istruzioni di registrazione
- log_min_error_statement : determina la registrazione di tutte le istruzioni che generano un errore al di sopra di questo livello
- log_min_messages : imposta i livelli di messaggio registrati
- log_replication_commands : registra ogni comando di replica
- log_statement : imposta il tipo di istruzioni registrate
- log_statement_stats : per ogni query, scrive statistiche sulle prestazioni cumulative nel log del server
- log_temp_files : registra l'uso di file temporanei maggiori di questo numero di kilobyte
- maintenance_work_mem : imposta la memoria massima da usare per le operazioni di manutenzione
- max_parallel_workers: imposta il numero massimo di ruoli di lavoro paralleli che possono essere attivi contemporaneamente
- max_parallel_workers_per_gather : imposta il numero massimo di processi paralleli per nodo executor
- max_pred_locks_per_page : imposta il numero massimo di tuple bloccate per predicato per pagina
- max_pred_locks_per_relation : imposta il numero massimo di pagine e tuple bloccate del predicato per relazione
- max_standby_archive_delay : imposta il ritardo massimo prima di annullare le query quando un server hot standby elabora i dati WAL archiviati
- max_standby_streaming_delay : imposta il ritardo massimo prima di annullare le query quando un server hot standby elabora i dati WAL trasmessi
- max_sync_workers_per_subscription - Numero massimo di ruoli di lavoro di sincronizzazione tabelle per sottoscrizione
- max_wal_size : imposta le dimensioni wal che attivano un checkpoint
- min_parallel_index_scan_size : imposta la quantità minima di dati dell'indice per un'analisi parallela
- min_wal_size : imposta le dimensioni minime per ridurre il valore wal su
- operator_precedence_warning : genera un avviso per i costrutti che hanno cambiato significato a partire da PostgreSQL 9.4
- parallel_setup_cost : imposta la stima del costo dell'avvio dei processi di lavoro per query parallele
- parallel_tuple_cost : imposta la stima del costo del passaggio di ogni tupla (riga) dal ruolo di lavoro al back-end principale
- pg_stat_statements.save - Salva le statistiche pg_stat_statements tra arresti del server
- pg_stat_statements.track : consente di selezionare le istruzioni rilevate da pg_stat_statements
- pg_stat_statements.track_utility : consente di selezionare se i comandi dell'utilità vengono rilevati da pg_stat_statements
- quote_all_identifiers : quando si generano frammenti SQL, vengono virgolette tutti gli identificatori
- random_page_cost : imposta la stima del costo di una pagina disco non recuperata in modo non sequenziale
- row_security - Abilita la sicurezza delle righe
- search_path : imposta l'ordine di ricerca dello schema per i nomi non qualificati dallo schema
- seq_page_cost : imposta la stima del costo di una pagina del disco recuperata in sequenza
- session_replication_role : imposta il comportamento della sessione per i trigger e le regole di riscrittura
- standard_conforming_strings - Causa '...' stringhe per trattare le barre rovesciata letteralmente
- statement_timeout: imposta la durata massima consentita (in millisecondi) di qualsiasi istruzione. 0 disattiva questa opzione
- synchronize_seqscans - Abilita le analisi sequenziali sincronizzate
- synchronous_commit : imposta il livello di sincronizzazione della transazione corrente
- tcp_keepalives_count - Numero massimo di ritrasmissioni di keepalive TCP
- tcp_keepalives_idle - Tempo tra i keep-end TCP emittente
- tcp_keepalives_interval - Tempo tra ritrasmissioni di keepalive TCP
- temp_buffers : imposta il numero massimo di buffer temporanei utilizzati da ogni sessione di database
- temp_tablespaces : imposta gli spazi tabella da usare per le tabelle temporanee e ordinare i file
- track_activities : raccoglie informazioni sull'esecuzione dei comandi
- track_counts - Raccoglie statistiche sull'attività del database
- track_functions - Raccoglie statistiche a livello di funzione sull'attività del database
- track_io_timing - Raccoglie le statistiche di intervallo per l'attività di I/O del database
- transform_null_equals : considera "expr=NULL" come "expr IS NULL"
- vacuum_cost_delay - Ritardo dei costi vuoto in millisecondi
- vacuum_cost_limit - Importo costi vuoto disponibile prima del napping
- vacuum_cost_page_dirty - Costo vuoto per una pagina sporsa dal vuoto
- vacuum_cost_page_hit - Costo vuoto per una pagina trovata nella cache del buffer
- vacuum_cost_page_miss - Costo vuoto per una pagina non trovata nella cache del buffer
- vacuum_defer_cleanup_age - Numero di transazioni in base alle quali è necessario rinviare la pulizia VACUUM e HOT, se disponibile
- vacuum_freeze_min_age - Età minima in cui VACUUM deve bloccare una riga di tabella
- vacuum_freeze_table_age - Età in cui VACUUM deve analizzare l'intera tabella per bloccare le tuple
- vacuum_multixact_freeze_min_age - Età minima in cui VACUUM deve bloccare un MultiXactId in una riga di tabella
- vacuum_multixact_freeze_table_age - Età multisattiva in cui VACUUM deve analizzare l'intera tabella per bloccare le tuple
- wal_receiver_status_interval : imposta l'intervallo massimo tra i rapporti sullo stato del ricevitore WAL sul database primario
- wal_writer_delay - Tempo tra gli scaricamenti WAL eseguiti nel writer WAL
- wal_writer_flush_after - Quantità di WAL scritta dal writer WAL che attiva uno scaricamento
- work_mem : imposta la quantità di memoria da utilizzare dalle operazioni di ordinamento interne e dalle tabelle hash prima di scrivere nei file temporanei del disco
- xmlbinary - Imposta la modalità di codifica dei valori binari in XML
- xmloption : imposta se i dati XML nelle operazioni di analisi e serializzazione implicite devono essere considerati come documenti o frammenti di contenuto
Passaggi successivi
- Un'altra forma di configurazione, oltre ai parametri del server, sono le opzioni di configurazione delle risorse in un cluster.
- La base di dati PostgreSQL sottostante include anche parametri di configurazione.