Parametry serveru ve službě Azure Cosmos DB for PostgreSQL
PLATÍ PRO: Azure Cosmos DB for PostgreSQL (využívající rozšíření databáze Citus do PostgreSQL)
Existují různé parametry serveru, které ovlivňují chování služby Azure Cosmos DB for PostgreSQL, a to jak ze standardu PostgreSQL, tak specifické pro Službu Azure Cosmos DB for PostgreSQL. Tyto parametry je možné pro cluster nastavit na webu Azure Portal. V kategorii Nastavení vyberte parametry pracovního uzlu nebo parametry koordinačního uzlu. Na těchto stránkách můžete nastavit parametry pro všechny pracovní uzly nebo pouze pro koordinační uzel.
Parametry služby Azure Cosmos DB for PostgreSQL
Poznámka:
Clustery se staršími verzemi rozšíření Citus nemusí nabízet všechny níže uvedené parametry.
Obecná konfigurace
citus.use_secondary_nodes (výčet)
Nastaví zásadu, která se má použít při výběru uzlů pro dotazy SELECT. Pokud je nastavená na hodnotu always, plánovač se dotazuje pouze na uzly, které jsou v pg_dist_node označené jako "sekundární" uzly.
Podporované hodnoty tohoto výčtu:
- never (Nikdy): (výchozí hodnota) Veškeré čtení se provádí na primárních uzlech.
- always (Vždy): Čtení se provádí na sekundárních uzlech a příkazy pro vložení a aktualizaci jsou zakázané.
citus.cluster_name (text)
Informuje plánovač koordinačního uzlu, který cluster koordinuje. Po nastavení cluster_name plánovač dotazuje pracovní uzly v daném clusteru sám.
citus.enable_version_checks (logická hodnota)
Upgrade verze Služby Azure Cosmos DB for PostgreSQL vyžaduje restartování serveru (pro vyzvednutí nové sdílené knihovny) následované příkazem ALTER EXTENSION UPDATE. Selhání provedení obou kroků může potenciálně způsobit chyby nebo chybové ukončení. Azure Cosmos DB for PostgreSQL proto ověřuje verzi kódu a shodu rozšíření a chyby, pokud ne.
Tato hodnota je výchozí hodnota true a je platná pro koordinátora. Ve výjimečných případech můžou složité procesy upgradu vyžadovat nastavení tohoto parametru na false, a tím zakázat kontrolu.
citus.log_distributed_deadlock_detection (logická hodnota)
Zda se má protokolovat distribuované zpracování související s detekcí zablokování v protokolu serveru. Výchozí hodnota je false.
citus.distributed_deadlock_detection_factor (plovoucí desetiná čárka)
Nastaví dobu čekání před kontrolou distribuovaných zablokování. Konkrétně je doba čekání tato hodnota vynásobená nastavením deadlock_timeout PostgreSQL. Výchozí hodnota je 2
. Hodnota -1
zakázání distribuované detekce vzájemného zablokování.
citus.node_connection_timeout (celé číslo)
GuC citus.node_connection_timeout
nastaví maximální dobu trvání (v milisekundách) na čekání na navázání připojení. Pokud dojde k vypršení tohoto časového limitu před navázáním alespoň jednoho připojení k pracovnímu uzlu, Azure Cosmos DB for PostgreSQL vyvolá chybu. Tato konfigurace GUC má vliv na připojení z koordinačního uzlu k pracovním uzlům a mezi pracovními uzly.
- Výchozí hodnota: 5 sekund
- Minimální hodnota: 10 milisekund
- Maximální hodnota: 1 hodina
-- set to 30 seconds
ALTER DATABASE foo
SET citus.node_connection_timeout = 30000;
citus.log_remote_commands (logická hodnota)
Protokolujte všechny příkazy, které koordinátor odesílá do pracovních uzlů. Například:
-- 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;
Výstup odhalí několik dotazů spuštěných u pracovních procesů z důvodu jednoho count(*)
dotazu koordinátora.
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 (text)
Azure Cosmos DB for PostgreSQL ve výchozím nastavení skryje horizontální oddíly ze seznamu tabulek PostgreSQL klientům SQL. Dělá to proto, že na distribuovanou tabulku existuje více horizontálních oddílů a horizontální oddíly můžou být rušivé pro klienta SQL.
GuC citus.show_shards_for_app_name_prefixes
umožňuje zobrazení horizontálních oddílů pro vybrané klienty, kteří je chtějí zobrazit. Výchozí hodnota je ''.
-- 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';
Skrytí horizontálních oddílů je možné úplně zakázat pomocí citus.override_table_visibility.
citus.override_table_visibility (logická hodnota)
Určuje, zda je citus.show_shards_for_app_name_prefixes aktivní. Výchozí hodnota je true. Pokud je nastavená hodnota false, jsou horizontální oddíly viditelné pro všechny klientské aplikace.
citus.use_citus_managed_tables (logická hodnota)
Povolte přístup k novým místním tabulkám pomocí dotazů na pracovních uzlech. Při povolení přidá všechny nově vytvořené tabulky do metadat Citus. Výchozí hodnota je false.
citus.rebalancer_by_disk_size_base_cost (celé číslo)
Když použijete strategii by_disk_size znovu vybalit, získá každá skupina horizontálních oddílů tyto náklady v bajtech přidaných do skutečné velikosti disku. Tato hodnota se používá k tomu, aby se zabránilo vytvoření špatného zůstatku, když v některých horizontálních oddílech jsou malá data. Předpokládá se, že i prázdné horizontální oddíly mají určité náklady, protože paralelismus a protože prázdné skupiny horizontálních oddílů budou pravděpodobně v budoucnu růst.
Výchozí hodnota je 100MB
.
Statistika dotazů
citus.stat_statements_purge_interval (celé číslo)
Nastaví frekvenci, s jakou démon údržby odebere záznamy z citus_stat_statements , které nejsou v záznamech pg_stat_statements
. Tato konfigurační hodnota nastaví časový interval mezi vyprázdněním v sekundách s výchozí hodnotou 10. Hodnota 0 zakáže vyprázdnění.
SET citus.stat_statements_purge_interval TO 5;
Tento parametr je účinný pro koordinátora a lze ho změnit za běhu.
citus.stat_statements_max (celé číslo)
Určuje maximální počet řádků, které je možné uložit v tabulce citus_stat_statements
. Výchozí hodnota je 5 0000 a lze ji změnit na libovolnou hodnotu v rozsahu 1000 až 10000000. Každý řádek vyžaduje 140 bajtů úložiště, takže nastavení stat_statements_max
maximální hodnoty 10M spotřebuje 1,4 GB paměti.
Změna tohoto GUC se projeví až po restartování PostgreSQL.
citus.stat_statements_track (výčet)
Zaznamenávání statistik pro citus_stat_statements
další prostředky procesoru.
Pokud dochází k načtení databáze, může správce zakázat sledování příkazů nastavením na none
.citus.stat_statements_track
- all: (default) Track all statements.
- none: Zakažte sledování.
citus.stat_tenants_untracked_sample_rate
Vzorkovací frekvence pro nové tenanty v citus_stat_tenants
. Sazba může být v rozsahu mezi 0.0
a 1.0
. Výchozí hodnota znamená 1.0
, že se vzorkuje 100 % nesledovaných dotazů tenanta. Nastavení na nižší hodnotu znamená, že již sledované tenanty mají vzorky 100 % dotazů, ale tenanti, kteří jsou aktuálně nesledované, se vzorkují pouze zadanou rychlostí.
Načítání dat
citus.multi_shard_commit_protocol (výčet)
Nastaví protokol potvrzení, který se má použít při provádění příkazu COPY v distribuované tabulce hash. Při každém umístění horizontálního oddílu se kopírování provádí v bloku transakce, aby se zajistilo, že se během kopírování neingestují žádná data. Existuje však konkrétní případ selhání, kdy kopírování proběhne úspěšně ve všech umístěních, ale dojde k selhání (hardwaru) před potvrzením všech transakcí. Tento parametr lze použít k zabránění ztrátě dat v takovém případě výběrem mezi následujícími protokoly potvrzení:
- 2pc: (výchozí) Transakce, ve kterých se funkce COPY provádí v umístění horizontálních oddílů, jsou nejprve připraveny pomocí dvoufázového potvrzení PostgreSQL a následně potvrzeny. Neúspěšná potvrzení je možné obnovit ručně nebo přerušit pomocí funkce COMMIT PREPARED nebo ROLLBACK PREPARED. Při použití 2pc by max_prepared_transactions měla být zvýšena u všech pracovníků, obvykle na stejnou hodnotu jako max_connections.
- 1pc: Transakce, ve kterých se funkce COPY provádí na umístění horizontálních oddílů, se potvrdí v jednom kole. Data můžou být ztracena, pokud potvrzení selže po úspěšném kopírování ve všech umístěních (vzácné).
citus.shard_replication_factor (celé číslo)
Nastaví faktor replikace pro horizontální oddíly, tj. počet uzlů, na kterých jsou horizontální oddíly umístěné, a výchozí hodnota je 1. Tento parametr lze nastavit za běhu a je efektivní pro koordinátora. Ideální hodnota pro tento parametr závisí na velikosti clusteru a rychlosti selhání uzlu. Tento faktor replikace můžete například zvýšit, pokud spouštíte velké clustery a častěji sledujete selhání uzlů.
Konfigurace Planneru
citus.local_table_join_policy (výčet)
Toto GUC určuje, jak Azure Cosmos DB for PostgreSQL přesouvá data při spojení mezi místními a distribuovanými tabulkami. Přizpůsobení zásady připojení může pomoct snížit množství dat odesílaných mezi pracovními uzly.
Azure Cosmos DB for PostgreSQL odesílá místní nebo distribuované tabulky do uzlů podle potřeby pro podporu spojení. Kopírování dat tabulky se označuje jako "převod". Pokud se místní tabulka převede, odešle se všem pracovníkům, kteří potřebují svá data k provedení spojení. Pokud se distribuovaná tabulka převede, shromažďuje se v koordinátoru, aby podporovala spojení. Plánovač Azure Cosmos DB for PostgreSQL odesílá pouze potřebné řádky, které provádějí převod.
Pro expresní převodní předvolbu jsou k dispozici čtyři režimy:
- auto: (Výchozí) Azure Cosmos DB for PostgreSQL převede buď všechny místní, nebo všechny distribuované tabulky na podporu místních a distribuovaných spojení tabulek. Azure Cosmos DB for PostgreSQL se rozhodne, který z něj se má převést pomocí heuristiky. Převede distribuované tabulky, pokud jsou spojené pomocí konstantního filtru jedinečného indexu (například primárního klíče). Převod zajišťuje, že se mezi pracovními procesy přesune méně dat.
- nikdy: Azure Cosmos DB for PostgreSQL neumožňuje spojení mezi místními a distribuovanými tabulkami.
- preferovat místní: Azure Cosmos DB for PostgreSQL upřednostňuje převod místních tabulek na podporu místních a distribuovaných spojení tabulek.
- preferovaná distribuce: Azure Cosmos DB for PostgreSQL upřednostňuje převod distribuovaných tabulek na podporu místních a distribuovaných spojení tabulek. Pokud jsou distribuované tabulky obrovské, může použití této možnosti vést k přesunu velkého množství dat mezi pracovními procesy.
Předpokládejme například, že citus_table
je distribuovaná tabulka distribuovaná sloupcem x
a jedná postgres_table
se o místní tabulku:
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 (celé číslo)
Nastaví počet řádků, které se mají načíst na každou úlohu pro optimalizaci klauzule limitu. V některých případech může být potřeba vybrat dotazy s klauzulemi limitu, aby bylo možné vygenerovat výsledky, načíst všechny řádky z každého úkolu. V těchto případech a kde by aproximace vytvářela smysluplné výsledky, nastaví tato hodnota konfigurace počet řádků, které se mají načíst z každého horizontálního oddílu. Omezení aproximace jsou ve výchozím nastavení zakázány a tento parametr je nastaven na hodnotu -1. Tuto hodnotu lze nastavit za běhu a je efektivní pro koordinátora.
citus.count_distinct_error_rate (plovoucí desetiná čárka)
Azure Cosmos DB for PostgreSQL dokáže vypočítat přibližné počty (jedinečné hodnoty) pomocí rozšíření postgresql-hll. Tato položka konfigurace nastaví požadovanou chybovost při výpočtu počtu (jedinečných). 0,0, což je výchozí hodnota, zakáže aproximace pro count(distinct); a 1.0 neposkytuje žádné záruky týkající se přesnosti výsledků. Pro zajištění nejlepších výsledků doporučujeme nastavit tento parametr na 0,005. Tuto hodnotu lze nastavit za běhu a je efektivní pro koordinátora.
citus.task_assignment_policy (výčet)
Poznámka:
Toto GUC platí jenom v případě, že shard_replication_factor je větší než jedna, nebo pro dotazy na reference_tables.
Nastaví zásadu, která se má použít při přiřazování úkolů pracovníkům. Koordinátor přiřadí úkoly pracovníkům na základě umístění horizontálních oddílů. Tato hodnota konfigurace určuje zásadu, která se má použít při vytváření těchto přiřazení. V současné době existují tři možné zásady přiřazení úkolů, které je možné použít.
- greedy: Greedy politika je výchozí a má za cíl rovnoměrně distribuovat úkoly mezi pracovníky.
- kruhové dotazování: Zásada kruhového dotazování přiřazuje úkoly pracovníkům způsobem kruhového dotazování, který se střídá mezi různými replikami. Tato zásada umožňuje lepší využití clusteru, pokud je počet horizontálních oddílů pro tabulku nízký v porovnání s počtem pracovních procesů.
- první replika: Zásada první repliky přiřazuje úlohy na základě pořadí vložení umístění (replik) pro horizontální oddíly. Jinými slovy, dotaz fragmentu horizontálního oddílu je přiřazen pracovnímu procesu, který má první repliku tohoto horizontálního oddílu. Tato metoda umožňuje mít silné záruky, které horizontální oddíly se používají na kterých uzlech (to znamená silnější záruky rezidence paměti).
Tento parametr lze nastavit za běhu a je efektivní pro koordinátora.
citus.enable_non_colocated_router_query_pushdown (logická hodnota)
Umožňuje plánovač směrovačů pro dotazy, které odkazují na neselokované distribuované tabulky.
Plánovač směrovače je povolený jenom pro dotazy, které odkazují na distribuované tabulky, které odkazují na sdílené distribuované tabulky, protože jinak horizontální oddíly nemusí být na stejném uzlu. Povolením tohoto příznaku lze optimalizovat dotazy, které na tyto tabulky odkazují, ale po obnovení rovnováhy horizontálních oddílů nebo změně počtu horizontálních oddílů těchto tabulek nemusí dotaz fungovat.
Výchozí hodnota je off
.
Průběžný přenos dat
citus.max_intermediate_result_size (celé číslo)
Maximální velikost v kB zprostředkujících výsledků pro CTE, které nelze odeslat do pracovních uzlů pro spuštění a komplexní poddotazy. Výchozí hodnota je 1 GB a hodnota -1 znamená bez omezení. Dotazy překračující limit se zruší a vytvoří chybovou zprávu.
DDL
citus.enable_schema_based_sharding
Při nastavení ON
parametru se ve výchozím nastavení distribuují všechna vytvořená schémata. Distribuovaná schémata se automaticky přidružují k jednotlivým skupinám kolokace, aby tabulky vytvořené v těchto schématech byly převedeny na společnělokované distribuované tabulky bez klíče horizontálního dělení. Toto nastavení je možné upravit pro jednotlivé relace.
Příklad použití tohoto GUC najdete v tématu návrhu mikroslužby.
Konfigurace exekutoru
OBECNÉ
citus.all_modifications_commutative
Azure Cosmos DB for PostgreSQL vynucuje pravidla commutativity a získává odpovídající zámky pro operace úprav, aby se zajistilo správnost chování. Například předpokládá, že příkaz INSERT dotáčí do jiného příkazu INSERT, ale ne pomocí příkazu UPDATE nebo DELETE. Podobně předpokládá, že příkaz UPDATE nebo DELETE nekomutuje s jiným příkazem UPDATE nebo DELETE. Toto opatření znamená, že upDATEs a DELETEs vyžadují, aby služba Azure Cosmos DB for PostgreSQL získala silnější zámky.
Pokud máte příkazy UPDATE, které jsou commutativní s vašimi INSERTs nebo jinými UPDATEs, můžete tyto předpoklady commutativity uvolnit nastavením tohoto parametru na true. Pokud je tento parametr nastavený na hodnotu true, považují se všechny příkazy za commutativní a deklarují sdílený zámek, což může zlepšit celkovou propustnost. Tento parametr lze nastavit za běhu a je efektivní pro koordinátora.
citus.remote_task_check_interval (celé číslo)
Nastaví frekvenci, s jakou azure Cosmos DB for PostgreSQL kontroluje stavy úloh spravovaných exekutorem sledování úloh. Výchozí hodnota je 10 ms. Koordinátor přiřadí pracovníkům úkoly a pak je pravidelně kontroluje o průběhu každého úkolu. Tato hodnota konfigurace nastavuje časový interval mezi dvěma následných kontrol. Tento parametr je účinný pro koordinátora a lze jej nastavit za běhu.
citus.task_executor_type (výčet)
Azure Cosmos DB for PostgreSQL má tři typy exekutorů pro spouštění distribuovaných dotazů SELECT. Požadovaný exekutor lze vybrat nastavením tohoto parametru konfigurace. Akceptované hodnoty pro tento parametr jsou:
- adaptivní: Výchozí hodnota. Je optimální pro rychlé odpovědi na dotazy, které zahrnují agregace a spolulokované spojení, které pokrývají více horizontálních oddílů.
- task-tracker: Exekutor pro sledování úloh je vhodný pro dlouhotrvající a složité dotazy, které vyžadují prohazování dat mezi pracovními uzly a efektivní správu prostředků.
- v reálném čase: (zastaralé) Slouží k podobnému účelu jako adaptivní exekutor, ale je méně flexibilní a může způsobit větší tlak na připojení na pracovních uzlech.
Tento parametr lze nastavit za běhu a je efektivní pro koordinátora.
citus.multi_task_query_log_level (výčet) {#multi_task_logging}
Nastaví úroveň protokolu pro jakýkoli dotaz, který generuje více než jeden úkol (to znamená, že dosáhne více než jednoho horizontálního oddílu). Protokolování je užitečné při migraci víceklientských aplikací, protože se můžete rozhodnout, že se u takových dotazů zobrazí chyba nebo upozornění, abyste je našli a přidali do nich tenant_id filtr. Tento parametr lze nastavit za běhu a je efektivní pro koordinátora. Výchozí hodnota tohoto parametru je vypnutá.
Podporované hodnoty tohoto výčtu:
- vypnuto: Vypněte protokolování všech dotazů, které generují více úloh (to znamená rozsah více horizontálních oddílů).
- debug: Logs statement at DEBUG severity level.
- log: Příkaz Logs na úrovni závažnosti PROTOKOLU. Řádek protokolu obsahuje dotaz SQL, který byl spuštěn.
- notice: Logs statement at NOTICE severity level.
- warning: Logs statement at WARNING severity level.
- error: Logs statement at ERROR severity level.
Může být užitečné použít error
při testování vývoje a nižší úroveň protokolů, jako je log
při skutečném produkčním nasazení.
Volba log
způsobí, že se dotazy s více úlohami zobrazí v databázových protokolech se samotným dotazem zobrazeným po příkazu " PŘÍKAZ".
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 (výčet)
Určuje, které příkazy SET se šíří z koordinátoru do pracovních procesů. Výchozí hodnota pro tento parametr je none.
Podporované hodnoty jsou:
- žádné: nejsou šířené žádné příkazy SET.
- local: Šíří se pouze příkazy SET LOCAL.
citus.create_object_propagation (výčet)
Řídí chování příkazů CREATE v transakcích pro podporované objekty.
Když se objekty vytvoří v bloku transakcí s více příkazy, Azure Cosmos DB for PostgreSQL přepne sekvenční režim, aby se zajistilo, že vytvořené objekty budou viditelné pro pozdější příkazy v horizontálních oddílech. Přepínač do sekvenčního režimu však není vždy žádoucí. Přepsáním tohoto chování může uživatel při vytváření nových objektů odměňovat výkon za plnou transakční konzistenci.
Výchozí hodnota pro tento parametr je "immediate".
Podporované hodnoty jsou:
- immediate: vyvolá chybu v transakcích, kde se paralelní operace, jako je create_distributed_table, před pokusem o vytvoření typu.
- automatic: Odložit vytváření typů při sdílení transakce s paralelní operací v distribuovaných tabulkách. Mezi jednotlivými uzly může existovat určitá nekonzistence databázových objektů.
- odloženo: vraťte se k chování před 11,0, což je jako automatické, ale u jiných drobných případů rohů. Doporučujeme automatické nastavení po odložení, pokud nevyžadujete skutečnou zpětnou kompatibilitu.
Příklad tohoto GUC v akci naleznete v části Šíření typu.
citus.enable_repartition_joins (logická hodnota)
Obvykle se pokus o opětovné rozdělení spojení s adaptivní exekutorem nezdaří s chybovou zprávou. Nastavení citus.enable_repartition_joins
na hodnotu true však umožňuje službě Azure Cosmos DB for PostgreSQL dočasně přepnout do exekutoru sledování úloh, aby provedlo připojení. Výchozí hodnota je false.
citus.enable_repartitioned_insert_select (logická hodnota)
Ve výchozím nastavení insert INTO ... Příkaz SELECT, který nelze vložit dolů, se pokusí znovu rozdělit řádky z příkazu SELECT a přenést je mezi pracovními procesy pro vložení. Pokud ale cílová tabulka obsahuje příliš mnoho horizontálních oddílů, opětovné dělení pravděpodobně nebude fungovat dobře. Režie zpracování intervalů horizontálních oddílů při určování způsobu rozdělení výsledků je příliš velká.
Opětovné rozdělení je možné zakázat ručně nastavením citus.enable_repartitioned_insert_select
na hodnotu false.
citus.enable_binary_protocol (logická hodnota)
Nastavení tohoto parametru na hodnotu true dává koordinačnímu uzlu pokyn, aby k přenosu dat s pracovními procesy používal binární serializační formát PostgreSQL (pokud je k dispozici). Některé typy sloupců nepodporují binární serializaci.
Povolení tohoto parametru je většinou užitečné, když pracovníci musí vracet velké objemy dat. Příklady jsou, když se požaduje mnoho řádků, řádky mají mnoho sloupců nebo používají široké typy, například hll
z rozšíření postgresql-hll.
Výchozí hodnota je true
. Při nastavení jsou false
všechny výsledky kódovány a přeneseny v textovém formátu.
citus.max_adaptive_executor_pool_size (celé číslo)
Max_adaptive_executor_pool_size omezuje připojení pracovních procesů z aktuální relace. Toto GUC je užitečné pro:
- Zabránění získání všech pracovních prostředků v jednom back-endu
- Zajištění správy priority: Určení relací s nízkou prioritou s nízkou max_adaptive_executor_pool_size a relací s vysokou prioritou s vyššími hodnotami
Výchozí hodnota je 16.
citus.executor_slow_start_interval (celé číslo)
Doba čekání v milisekundách mezi otevřením připojení ke stejnému pracovnímu uzlu
Když jednotlivé úlohy dotazu s více horizontálními oddíly zabírají málo času, dají se často dokončit přes jedno připojení (často už uložené v mezipaměti). Aby se zabránilo redundantnímu otevírání dalších připojení, exekutor čeká mezi pokusy o připojení pro nakonfigurovaný počet milisekund. Na konci intervalu se zvýší počet připojení, která může příště otevřít.
U dlouhých dotazů (těch, kteří zabírají >500 ms), může pomalé spuštění přidat latenci, ale u krátkých dotazů je to rychlejší. Výchozí hodnota je 10 ms.
citus.max_cached_conns_per_worker (celé číslo)
Každý back-end otevře připojení k pracovníkům pro dotazování horizontálních oddílů. Na konci transakce se nakonfigurovaný počet připojení udržuje otevřený, aby se urychlily následné příkazy. Zvýšení této hodnoty snižuje latenci dotazů s více horizontálními oddíly, ale také zvyšuje režii na pracovní procesy.
Výchozí hodnota je 1. Větší hodnota, například 2, může být užitečná pro clustery, které používají malý počet souběžných relací, ale není moudré jít mnohem dál (například 16 by bylo příliš vysoké).
citus.force_max_query_parallelization (logická hodnota)
Simuluje zastaralý a nyní neexistující exekutor v reálném čase. Tento parametr slouží k otevření co nejvíce připojení k maximalizaci paralelizace dotazů.
Pokud je toto GUC povolené, Azure Cosmos DB for PostgreSQL vynutí adaptivní exekutor, aby při provádění paralelního distribuovaného dotazu používal co nejvíce připojení. Pokud není povolená, exekutor se může rozhodnout použít méně připojení k optimalizaci celkové propustnosti provádění dotazů. Interní nastavení tohoto true
nastavení skončí pomocí jednoho připojení na každou úlohu.
Jedním z míst, kde je tento parametr užitečný, je v transakci, jejíž první dotaz je jednoduchý a vyžaduje několik připojení, zatímco další dotaz by mohl těžit z více připojení. Azure Cosmos DB for PostgreSQL rozhoduje, kolik připojení se má použít v transakci na základě prvního příkazu, což může omezovat jiné dotazy, pokud k poskytnutí nápovědy nepoužijeme GUC.
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;
Výchozí hodnota je false.
Konfigurace exekutoru sledování úloh
citus.task_tracker_delay (celé číslo)
Tento parametr nastaví dobu spánku sledování úkolů mezi zaokrouhlení správy úkolů a výchozí hodnotou je 200 ms. Proces sledování úkolů se pravidelně probudí, provede všechny úkoly, které jsou k němu přiřazeny, a naplánuje a spustí tyto úkoly. Pak sledování úkolů přepíná po určitou dobu, než tyto úkoly znovu přejdou. Tato hodnota konfigurace určuje délku tohoto období spánku. Tento parametr je účinný pro pracovní procesy a je potřeba ho změnit v souboru postgresql.conf. Po úpravě konfiguračního souboru mohou uživatelé odeslat signál SIGHUP nebo restartovat server, aby se změna projevila.
Tento parametr je možné snížit, aby se zkrátila prodleva způsobená exekutorem sledování úloh tím, že zkracuje časový interval mezi zaokrouhlením správy. Snížení zpoždění je užitečné v případech, kdy jsou dotazy horizontálních oddílů krátké, a proto pravidelně aktualizujte jejich stav.
citus.max_assign_task_batch_size (celé číslo)
Exekutor sledování úkolů v koordinátoru synchronně přiřazuje úkoly v dávkách démona na pracovní procesy. Tento parametr nastaví maximální počet úkolů, které se mají přiřadit v jedné dávce. Volba větší velikosti dávky umožňuje rychlejší přiřazení úkolů. Pokud je ale počet pracovníků velký, může trvat déle, než všichni pracovníci dostanou úkoly. Tento parametr lze nastavit za běhu a je efektivní pro koordinátora.
citus.max_running_tasks_per_node (celé číslo)
Proces sledování úkolů naplánuje a podle potřeby provede úkoly, které jsou k němu přiřazeny. Tato hodnota konfigurace nastaví maximální počet úloh, které se mají spustit souběžně na jednom uzlu v daném okamžiku a výchozí hodnota je 8.
Limit zajišťuje, že nemáte na disku současně mnoho úloh a pomáhá vyhnout se kolizím vstupně-výstupních operací disku. Pokud se dotazy obsluhují z paměti nebo disků SSD, můžete zvýšit max_running_tasks_per_node bez obav.
citus.partition_buffer_size (celé číslo)
Nastaví velikost vyrovnávací paměti tak, aby se používala pro operace oddílů a výchozí hodnota je 8 MB. Azure Cosmos DB for PostgreSQL umožňuje předělovat data tabulek do více souborů při spojení dvou velkých tabulek. Po vyplnění této vyrovnávací paměti oddílu se znovu rozdělená data vyprázdní do souborů na disku. Tuto položku konfigurace je možné nastavit za běhu a je efektivní pro pracovní procesy.
Vysvětlení výstupu
citus.explain_all_tasks (logická hodnota)
Ve výchozím nastavení azure Cosmos DB for PostgreSQL zobrazuje výstup jedné libovolné úlohy při spuštění příkazu EXPLAIN v distribuovaném dotazu. Ve většiněpřípadůch Někdy se některé úkoly plánují jinak nebo mají mnohem vyšší dobu provádění. V takových případech může být užitečné povolit tento parametr, po kterém výstup EXPLAIN zahrnuje všechny úlohy. Vysvětlení všech úkolů může způsobit, že funkce EXPLAIN bude trvat déle.
citus.explain_analyze_sort_method (výčet)
Určuje metodu řazení úkolů ve výstupu funkce EXPLAIN ANALYZE. Výchozí hodnota atributu citus.explain_analyze_sort_method
je execution-time
.
Podporované hodnoty jsou:
- doba provádění: seřaďte podle času spuštění.
- taskId: seřaďte podle ID úkolu.
Spravované parametry PgBouncer
Následující spravované parametry PgBouncer je možné nakonfigurovat na jednom uzlu nebo koordinátoru.
Název parametru | Popis | Výchozí |
---|---|---|
pgbouncer.default_pool_size | Nastavte tuto hodnotu parametru na počet připojení na dvojici uživatelů/databáze. | 295 |
pgbouncer.ignore_startup_parameters | Seznam parametrů oddělených čárkami, které může PgBouncer ignorovat. Můžete například nechat PgBouncer ignorovat extra_float_digits parametr. Některé parametry jsou povolené, všechny ostatní vyvolávají chybu. Tato schopnost je nutná k tomu, aby v spouštěcím paketu byla bezpodmínečně nastavena hodnota "extra_float_digits=2". Tuto možnost použijte, pokud knihovna používá chyby sestavy, například pq: unsupported startup parameter: extra_float_digits . |
extra_float_digits, ssl_renegotiation_limit |
pgBouncer.max_client_conn | Nastavte tuto hodnotu parametru na nejvyšší počet klientských připojení k nástroji PgBouncer, který chcete podporovat. | 2000 |
pgBouncer.min_pool_size | Pokud je toto číslo pod tímto číslem, přidejte do fondu další připojení k serveru. | 0 (zakázáno) |
pgBouncer.pool_mode | Tuto hodnotu parametru nastavte na TRANSACTION pro sdružování transakcí (což je doporučené nastavení pro většinu úloh). | TRANSAKCE |
pgbouncer.query_wait_timeout | Maximální doba (v sekundách) dotazů může strávit čekáním na spuštění. Pokud během této doby není dotaz přiřazen k serveru, klient se odpojí. | 20 s |
pgbouncer.server_idle_timeout | Pokud bylo připojení k serveru nečinné déle než tento počet sekund, je zavřené. Pokud je hodnota 0, je tento časový limit zakázán. | 60 s |
Parametry PostgreSQL
- DateStyle – Nastaví formát zobrazení pro hodnoty data a času.
- IntervalStyle – Nastaví formát zobrazení pro hodnoty intervalu.
- TimeZone – nastaví časové pásmo pro zobrazení a interpretaci časových razítek.
- application_name – Nastaví název aplikace, který se má hlásit ve statistikách a protokolech.
- array_nulls – povolí vstup elementů NULL v polích.
- autovacuum – spustí podprocesy automatického úklidu.
- autovacuum_analyze_scale_factor – počet vložení, aktualizací nebo odstranění řazené kolekce členů před analýzou jako zlomek reltuplesů
- autovacuum_analyze_threshold – minimální počet vložení, aktualizací nebo odstranění řazené kolekce členů před analýzou
- autovacuum_naptime – Doba spánku mezi spuštěním automatického úklidu
- autovacuum_vacuum_cost_delay – zpoždění nákladů na vakuum v milisekundách pro autovacuum
- autovacuum_vacuum_cost_limit – částka nákladů na vakuum, která je k dispozici před napnutím, pro autovacuum
- autovacuum_vacuum_scale_factor – počet aktualizací řazené kolekce členů nebo odstranění před vysáváním jako zlomek řazených kolekcí členů
- autovacuum_vacuum_threshold – minimální počet aktualizací řazené kolekce členů nebo odstranění před vakuem
- autovacuum_work_mem – Nastaví maximální paměť, kterou má každý pracovní proces automatického úklidu používat.
- backend_flush_after – počet stránek, po kterých se dříve provedené zápisy vyprázdní na disk.
- backslash_quote – nastaví, jestli je v řetězcových literálech povolený znak "'".
- bgwriter_delay – doba spánku zapisovače na pozadí mezi kruhy
- bgwriter_flush_after – počet stránek, po kterých se dříve provedené zápisy vyprázdní na disk.
- bgwriter_lru_maxpages – maximální počet stránek LRU na zaokrouhlení zaokrouhlený zapisovač pozadí
- bgwriter_lru_multiplier – Násobek průměrného využití vyrovnávací paměti na volné zaokrouhlení
- bytea_output – Nastaví výstupní formát bajtu.
- check_function_bodies – kontroluje těla funkcí během funkce CREATE
- checkpoint_completion_target – čas strávený vyprázdněním nezašpiněných vyrovnávacích pamětí během kontrolního bodu jako zlomek intervalu kontrolního bodu
- checkpoint_timeout – nastaví maximální dobu mezi automatickými kontrolními body WAL.
- checkpoint_warning – povolí upozornění, pokud jsou segmenty kontrolních bodů vyplněny častěji, než je tento
- client_encoding – Nastaví kódování znakové sady klienta.
- client_min_messages – Nastaví úrovně zpráv odeslané klientovi.
- commit_delay – Nastaví zpoždění v mikrosekundách mezi potvrzením transakce a vyprázdněním WAL na disk.
- commit_siblings – Nastaví minimální souběžné otevřené transakce před provedením commit_delay
- constraint_exclusion – Umožňuje plánovači používat omezení k optimalizaci dotazů.
- cpu_index_tuple_cost – nastaví odhad nákladů na zpracování jednotlivých položek indexu během kontroly indexu plánovače.
- cpu_operator_cost – Nastaví odhad nákladů na zpracování jednotlivých operátorů nebo volání funkce plánovače.
- cpu_tuple_cost – Nastaví odhad nákladů na zpracování jednotlivých řazených kolekcí členů (řádek).
- cursor_tuple_fraction – nastaví odhad plánovače zlomku řádků kurzoru, které se načtou.
- deadlock_timeout – Nastaví dobu, po kterou se má v milisekundách čekat na zámek, než zkontroluje zablokování.
- debug_pretty_print – zobrazení odsazení a strom plánu
- debug_print_parse – Zaznamená do protokolu strom analýzy každého dotazu.
- debug_print_plan – Zaznamená do protokolu plán provádění každého dotazu.
- debug_print_rewritten – Zaznamená do protokolu přepsaný strom analýzy každého dotazu.
- default_statistics_target – nastaví výchozí cíl statistiky.
- default_tablespace – Nastaví výchozí prostor tabulky pro vytváření tabulek a indexů v
- default_text_search_config – Nastaví výchozí konfiguraci vyhledávání textu.
- default_transaction_deferrable – Nastaví výchozí stav odložení nových transakcí.
- default_transaction_isolation – nastaví úroveň izolace transakcí každé nové transakce.
- default_transaction_read_only – Nastaví výchozí stav nových transakcí jen pro čtení.
- default_with_oids – Ve výchozím nastavení vytvoří nové tabulky s identifikátory OID.
- effective_cache_size – nastaví předpoklad plánovače o velikosti mezipaměti disku.
- enable_bitmapscan – umožňuje plánovači používat plány rastrového prohledávání.
- enable_gathermerge – umožňuje plánovači používat plány sloučení
- enable_hashagg – umožňuje plánovači používat plány agregace s hodnotou hash.
- enable_hashjoin – umožňuje plánovači používat plány připojení k hodnotě hash.
- enable_indexonlyscan – umožňuje plánovači používat plány index-only-scan
- enable_indexscan – umožňuje plánovači používat plány index-scan.
- enable_material – umožňuje použití materializace plánovače.
- enable_mergejoin – umožňuje plánovači používat plány hromadné korespondence.
- enable_nestloop – umožňuje plánovači používat plány vnořených smyček.
- enable_seqscan – umožňuje plánovači používat plány sekvenčního prohledávání.
- enable_sort – umožňuje plánovači používat explicitní kroky řazení.
- enable_tidscan – umožňuje plánovači používat plány tiD scan
- escape_string_warning – varuje před zpětným lomítkem u běžných řetězcových literálů.
- exit_on_error – ukončí relaci při jakékoli chybě.
- extra_float_digits – nastaví počet číslic zobrazených pro hodnoty s plovoucí desetinou čárkou.
- force_parallel_mode – vynutí použití paralelních dotazů
- from_collapse_limit – Nastaví velikost seznamu FROM, za kterou nejsou poddotazy sbalené.
- geqo – umožňuje optimalizaci genetického dotazu
- geqo_effort – GEQO: úsilí se používá k nastavení výchozího nastavení pro ostatní parametry GEQO.
- geqo_generations – GEQO: počet iterací algoritmu
- geqo_pool_size – GEQO: počet jednotlivců v populaci
- geqo_seed – GEQO: počáteční hodnota pro výběr náhodné cesty
- geqo_selection_bias – GEQO: selektivní tlak v rámci populace
- geqo_threshold – nastaví prahovou hodnotu položek FROM, nad kterou se používá GEQO.
- gin_fuzzy_search_limit – nastaví maximální povolený výsledek pro přesné hledání podle GIN.
- gin_pending_list_limit – Nastaví maximální velikost čekajícího seznamu pro index GIN.
- idle_in_transaction_session_timeout – nastaví maximální povolenou dobu trvání jakékoli idlingové transakce.
- join_collapse_limit – Nastaví velikost seznamu FROM nad rámec konstruktorů JOIN, které nejsou zploštěny.
- lc_monetary – Nastaví národní prostředí pro formátování peněžních částek.
- lc_numeric – Nastaví národní prostředí pro formátování čísel.
- lo_compat_privileges – Povolí režim zpětné kompatibility pro kontroly oprávnění u velkých objektů.
- lock_timeout – nastaví maximální povolenou dobu trvání (v milisekundách) jakéhokoli čekání na zámek. 0 vypne toto
- log_autovacuum_min_duration – nastaví minimální dobu provádění, nad kterou se protokolují akce automatického úklidu.
- log_connections – zaprokoluje každé úspěšné připojení.
- log_destination – Nastaví cíl pro výstup protokolu serveru.
- log_disconnections – protokoly ukončení relace, včetně doby trvání
- log_duration – Zaznamená dobu trvání každého dokončeného příkazu SQL.
- log_error_verbosity – Nastaví úroveň podrobností protokolovaných zpráv.
- log_lock_waits – Protokoluje dlouhé čekání na uzamčení.
- log_min_duration_statement – nastaví minimální dobu provádění (v milisekundách), nad kterou se protokolují příkazy. -1 zakáže doby trvání příkazů protokolování.
- log_min_error_statement – způsobí, že se všechny příkazy generující chybu na této úrovni nebo nad touto úrovní zaprotokolují.
- log_min_messages – nastaví úrovně zpráv, které jsou protokolovány.
- log_replication_commands – Protokoluje každý příkaz replikace.
- log_statement – nastaví typ zaprotokolovaných příkazů.
- log_statement_stats – pro každý dotaz zapíše kumulativní statistiku výkonu do protokolu serveru.
- log_temp_files – Zaznamenává použití dočasných souborů větších než tento počet kilobajtů.
- maintenance_work_mem – Nastaví maximální paměť, která se má použít pro operace údržby.
- max_parallel_workers – nastaví maximální počet paralelních pracovních procesů, které mohou být aktivní najednou.
- max_parallel_workers_per_gather – Nastaví maximální počet paralelních procesů na uzel exekutoru.
- max_pred_locks_per_page – nastaví maximální počet predikátově uzamčených řazených kolekcí členů na stránku.
- max_pred_locks_per_relation – nastaví maximální počet uzamčených stránek predikátu a řazených kolekcí členů na relaci.
- max_standby_archive_delay – Nastaví maximální prodlevu před zrušením dotazů, když aktivní pohotovostní server zpracovává archivovaná data WAL.
- max_standby_streaming_delay – nastaví maximální prodlevu před zrušením dotazů, když aktivní pohotovostní server zpracovává streamovaná data WAL.
- max_sync_workers_per_subscription – maximální počet pracovních procesů synchronizace tabulek na předplatné
- max_wal_size – nastaví velikost WAL, která aktivuje kontrolní bod.
- min_parallel_index_scan_size – Nastaví minimální množství dat indexu pro paralelní prohledávání.
- min_wal_size – nastaví minimální velikost pro zmenšení WAL na
- operator_precedence_warning – vygeneruje upozornění pro konstruktory, které se od verze PostgreSQL 9.4 změnily.
- parallel_setup_cost – Nastaví odhad nákladů plánovače na spouštění pracovních procesů pro paralelní dotaz.
- parallel_tuple_cost – nastaví odhad nákladů plánovače na předání každé řazené kolekce členů (řádku) z pracovního procesu do hlavního back-endu.
- pg_stat_statements.save – Ukládá statistiky pg_stat_statements mezi vypnutími serveru.
- pg_stat_statements.track – vybere, které příkazy jsou sledovány pg_stat_statements
- pg_stat_statements.track_utility – vybere, jestli jsou příkazy nástroje sledovány pg_stat_statements
- quote_all_identifiers – při generování fragmentů SQL uvozovek všechny identifikátory
- random_page_cost – Nastaví odhad nákladů plánovače na nesekvenčně načtenou stránku disku.
- row_security – povolí zabezpečení řádků.
- search_path – Nastaví pořadí hledání schématu pro názvy, které nejsou kvalifikované podle schématu.
- seq_page_cost – Nastaví odhad nákladů plánovače na stránku disku, na které se postupně načítá.
- session_replication_role – Nastaví chování relace pro triggery a přepis pravidel.
- standard_conforming_strings – příčiny ... řetězce pro zpracování zpětných lomítek doslova
- statement_timeout – nastaví maximální povolenou dobu trvání (v milisekundách) libovolného příkazu. 0 vypne toto
- synchronize_seqscans – umožňuje synchronizované sekvenční kontroly.
- synchronous_commit – nastaví úroveň synchronizace aktuální transakce.
- tcp_keepalives_count – maximální počet retransmitů tcp keepalive
- tcp_keepalives_idle – doba mezi vydáváním protokolů TCP keepalives
- tcp_keepalives_interval – doba mezi retransmity tcp keepalive retransmits
- temp_buffers – nastaví maximální počet dočasných vyrovnávacích pamětí používaných jednotlivými relacemi databáze.
- temp_tablespaces – Nastaví prostory tabulek tak, aby se používaly pro dočasné tabulky a soubory řazení.
- track_activities – shromažďuje informace o provádění příkazů.
- track_counts – shromažďuje statistiky o databázové aktivitě.
- track_functions – shromažďuje statistiky na úrovni funkcí o aktivitě databáze.
- track_io_timing – shromažďuje statistiky časování pro vstupně-výstupní aktivitu databáze.
- transform_null_equals – považuje výraz výraz=NULL za výraz IS NULL.
- vacuum_cost_delay – zpoždění nákladů na vakuum v milisekundách
- vacuum_cost_limit – množství nákladů na vakuum dostupné před napnutím
- vacuum_cost_page_dirty - Vakuové náklady na stránku špínané vakuem
- vacuum_cost_page_hit – náklady na úklid stránky nalezené v mezipaměti vyrovnávací paměti
- vacuum_cost_page_miss – náklady na úklid stránky nebyly nalezeny v mezipaměti vyrovnávací paměti
- vacuum_defer_cleanup_age - počet transakcí, podle kterých by mělo být odloženo úklidové a horké čištění, pokud existuje
- vacuum_freeze_min_age – minimální věk, při kterém by se mělo ukotvit řádek tabulky
- vacuum_freeze_table_age - Věk, při kterém by měl vakuový skenovat celou tabulku, aby se ukotvit řazené kolekce členů
- vacuum_multixact_freeze_min_age – minimální věk, při kterém má funkce VACUUM ukotvit MultiXactId na řádku tabulky
- vacuum_multixact_freeze_table_age - Multixact age, při kterém má vakuum prohledávat celou tabulku, aby se ukotvit řazené kolekce členů
- wal_receiver_status_interval – nastaví maximální interval mezi zprávami o stavu příjemce WAL na primární
- wal_writer_delay – doba mezi vyprázdněními WAL provedenými v zapisovači WAL
- wal_writer_flush_after – množství WAL napsané zapisovačem WAL, který aktivuje vyprazdnutí
- work_mem – Nastaví velikost paměti, kterou mají používat interní operace řazení a tabulky hash před zápisem do dočasných souborů disku.
- xmlbinary – Nastaví způsob kódování binárních hodnot v JAZYCE XML.
- xmloption – Nastaví, zda se data XML v implicitních operacích parsování a serializace považují za dokumenty nebo fragmenty obsahu.
Další kroky
- Další formou konfigurace, kromě parametrů serveru, jsou možnosti konfigurace prostředků v clusteru.
- Základní datová základna PostgreSQL má také parametry konfigurace.