Dela via


Serverparametrar i Azure Cosmos DB for PostgreSQL

GÄLLER FÖR: Azure Cosmos DB for PostgreSQL (drivs av Citus-databastillägget till PostgreSQL)

Det finns olika serverparametrar som påverkar beteendet för Azure Cosmos DB för PostgreSQL, både från Standard PostgreSQL och som är specifika för Azure Cosmos DB för PostgreSQL. Du kan ställa in dessa parametrar i Azure-portalen för ett kluster. Under kategorin Inställningar väljer du arbetsnodparametrar eller koordinatornodparametrar. På dessa sidor kan du ange parametrar för alla arbetsnoder, eller bara för koordinatornoden.

Azure Cosmos DB for PostgreSQL-parametrar

Kommentar

Kluster som kör äldre versioner av Citus-tillägget kanske inte erbjuder alla parametrar som anges nedan.

Allmän konfiguration

citus.use_secondary_nodes (enum)

Anger vilken princip som ska användas när du väljer noder för SELECT-frågor. Om den är inställd på "alltid" frågar planeraren bara noder som är markerade som "sekundär" noderole i pg_dist_node.

De värden som stöds för den här uppräkningen är:

  • never (aldrig) : (standard) Alla läsningar sker på primära noder.
  • always (alltid) : Läsningar körs mot sekundära noder i stället och insert/update-instruktioner är inaktiverade.

citus.cluster_name (text)

Informerar koordinatornodhanteraren om vilket kluster det samordnar. När cluster_name har angetts frågar planeraren arbetsnoder enbart i klustret.

citus.enable_version_checks (booleskt)

Uppgradering av Azure Cosmos DB for PostgreSQL-versionen kräver en omstart av servern (för att hämta det nya delade biblioteket), följt av kommandot ALTER EXTENSION UPDATE. Om båda stegen inte körs kan det orsaka fel eller krascher. Azure Cosmos DB for PostgreSQL validerar därmed versionen av koden och tilläggsmatchningen och fel ut om de inte gör det.

Det här värdet är som standard true och gäller för koordinatorn. I sällsynta fall kan komplexa uppgraderingsprocesser kräva att den här parametern anges till false, vilket inaktiverar kontrollen.

citus.log_distributed_deadlock_detection (booleskt)

Om du vill logga distribuerad identifieringsrelaterad bearbetning av dödlägen i serverloggen. Standardvärdet är falskt.

citus.distributed_deadlock_detection_factor (flyttals)

Anger tid att vänta innan du söker efter distribuerade dödlägen. I synnerhet är väntetiden det här värdet multiplicerat med PostgreSQL:s inställning för deadlock_timeout . Standardvärdet är 2. Värdet inaktiverar identifiering av -1 distribuerat dödläge.

citus.node_connection_timeout (integer)

citus.node_connection_timeout GUC anger den maximala varaktigheten (i millisekunder) för att vänta på anslutningsetablering. Azure Cosmos DB for PostgreSQL genererar ett fel om tidsgränsen överskrids innan minst en arbetsanslutning har upprättats. GUC påverkar anslutningar från koordinatorn till arbetare och anslutningar mellan arbetare.

  • Standard: fem sekunder
  • Minst: 10 millisekunder
  • Max: en timme
-- set to 30 seconds
ALTER DATABASE foo
SET citus.node_connection_timeout = 30000;

citus.log_remote_commands (booleskt)

Logga alla kommandon som koordinatorn skickar till arbetsnoder. Till exempel:

-- 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;

Utdata visar flera frågor som körs på arbetare på grund av den enskilda count(*) frågan på koordinatorn.

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)

Som standard döljer Azure Cosmos DB for PostgreSQL shards från listan över tabeller som PostgreSQL ger till SQL-klienter. Det gör det eftersom det finns flera shards per distribuerad tabell och shards kan vara distraherande för SQL-klienten.

citus.show_shards_for_app_name_prefixes MED GUC kan shards visas för valda klienter som vill se dem. Standardvärdet är ''.

-- 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';

Shard-döljande kan inaktiveras helt med hjälp av citus.override_table_visibility.

citus.override_table_visibility (booleskt)

Avgör om citus.show_shards_for_app_name_prefixes är aktiv. Standardvärdet är "true". När värdet är "false" visas shards för alla klientprogram.

citus.use_citus_managed_tables (booleskt)

Tillåt att nya lokala tabeller nås av frågor på arbetsnoder. Lägger till alla nyligen skapade tabeller i Citus-metadata när de är aktiverade. Standardvärdet är "false".

citus.rebalancer_by_disk_size_base_cost (heltal)

Med hjälp av by_disk_size ombalanseringsstrategin får varje shardgrupp den här kostnaden i byte som läggs till i den faktiska diskstorleken. Det här värdet används för att undvika att skapa en dålig balans när det finns lite data i vissa shards. Antagandet är att även tomma fragment har en viss kostnad, på grund av parallellitet och eftersom tomma fragmentgrupper sannolikt kommer att växa i framtiden.

Standardvärdet är 100MB.

Frågestatistik

citus.stat_statements_purge_interval (heltal)

Anger hur ofta underhållsdaemonen tar bort poster från citus_stat_statements som inte matchar i pg_stat_statements. Det här konfigurationsvärdet anger tidsintervallet mellan rensningar i sekunder med standardvärdet 10. Värdet 0 inaktiverar rensningarna.

SET citus.stat_statements_purge_interval TO 5;

Den här parametern är effektiv på koordinatorn och kan ändras vid körning.

citus.stat_statements_max (integer)

Det maximala antalet rader som lagras i citus_stat_statements. Standardvärdet är 50000 och kan ändras till valfritt värde i intervallet 1000–10000000. Varje rad kräver 140 byte lagringsutrymme, så om du anger stat_statements_max dess maximala värde på 10 M skulle det förbruka 1,4 GB minne.

Att ändra den här GUC:en börjar inte gälla förrän PostgreSQL har startats om.

citus.stat_statements_track (uppräkning)

Att registrera statistik för citus_stat_statements kräver extra CPU-resurser. När databasen har lästs in kan administratören inaktivera instruktionsspårning genom att ange citus.stat_statements_track till none.

  • alla: (standard) Spåra alla instruktioner.
  • none: Inaktivera spårning.

citus.stat_tenants_untracked_sample_rate

Samplingsfrekvens för nya klienter i citus_stat_tenants. Hastigheten kan vara av intervallet mellan 0.0 och 1.0. Standardvärdet 1.0 innebär att 100 % av de ospårade klientfrågorna samplas. Om du anger ett lägre värde innebär det att redan spårade klienter har 100 % exempelfrågor, men klienter som för närvarande är ospårade samplas endast enligt angiven hastighet.

Datainläsning

citus.multi_shard_commit_protocol (uppräkning)

Anger vilket incheckningsprotokoll som ska användas när du utför COPY på en hash-distribuerad tabell. På varje enskild shardplacering utförs COPY i ett transaktionsblock för att säkerställa att inga data matas in om ett fel inträffar under KOPIERING. Det finns dock ett särskilt felfall där KOPIAn lyckas på alla placeringar, men ett (maskinvarufel) inträffar innan alla transaktioner checkas in. Den här parametern kan användas för att förhindra dataförlust i så fall genom att välja mellan följande incheckningsprotokoll:

  • 2st: (standard) Transaktionerna där COPY utförs på shardplaceringarna förbereds först med PostgreSQL:s tvåfasincheckning och checkas sedan in. Misslyckade incheckningar kan återställas eller avbrytas manuellt med hjälp av COMMIT PREPARED respektive ROLLBACK PREPARED. När du använder 2pc bör max_prepared_transactions ökas för alla arbetare, vanligtvis till samma värde som max_connections.
  • 1st: Transaktionerna där COPY utförs på shardplaceringarna utförs i en enda runda. Data kan gå förlorade om en incheckning misslyckas när COPY lyckas på alla placeringar (sällsynt).

citus.shard_replication_factor (heltal)

Anger replikeringsfaktorn för shards, d.v.s. antalet noder där shards placeras, och standardvärdet är 1. Den här parametern kan anges vid körning och gäller för koordinatorn. Det idealiska värdet för den här parametern beror på storleken på klustret och nodfelhastigheten. Du kan till exempel öka den här replikeringsfaktorn om du kör stora kluster och observerar nodfel oftare.

Planner-konfiguration

citus.local_table_join_policy (uppräkning)

Denna GUC avgör hur Azure Cosmos DB for PostgreSQL flyttar data när du gör en koppling mellan lokala och distribuerade tabeller. Genom att anpassa kopplingsprincipen kan du minska mängden data som skickas mellan arbetsnoder.

Azure Cosmos DB for PostgreSQL skickar antingen de lokala eller distribuerade tabellerna till noder efter behov för att stödja kopplingen. Kopiering av tabelldata kallas för "konvertering". Om en lokal tabell konverteras skickas den till alla arbetare som behöver dess data för att utföra kopplingen. Om en distribuerad tabell konverteras samlas den in i koordinatorn för att stödja kopplingen. Azure Cosmos DB for PostgreSQL-planeraren skickar bara de nödvändiga raderna som utför en konvertering.

Det finns fyra lägen för att uttrycka konverteringsinställningar:

  • auto: (Standard) Azure Cosmos DB for PostgreSQL konverterar antingen alla lokala eller alla distribuerade tabeller för att stödja lokala och distribuerade tabellkopplingar. Azure Cosmos DB for PostgreSQL bestämmer vilka som ska konverteras med hjälp av en heuristisk. Den konverterar distribuerade tabeller om de är anslutna med ett konstant filter på ett unikt index (till exempel en primärnyckel). Konverteringen säkerställer att mindre data flyttas mellan arbetare.
  • aldrig: Azure Cosmos DB for PostgreSQL tillåter inte kopplingar mellan lokala och distribuerade tabeller.
  • prefer-local: Azure Cosmos DB for PostgreSQL föredrar att konvertera lokala tabeller för att stödja lokala och distribuerade tabellkopplingar.
  • prefer-distributed: Azure Cosmos DB for PostgreSQL föredrar att konvertera distribuerade tabeller för att stödja lokala och distribuerade tabellkopplingar. Om de distribuerade tabellerna är enorma kan det leda till att många data flyttas mellan arbetare med det här alternativet.

Anta till exempel att citus_table är en distribuerad tabell som distribueras av kolumnen x, och det postgres_table är en lokal tabell:

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 (heltal)

Anger antalet rader som ska hämtas per uppgift för optimering av gränssatser. I vissa fall kan du välja frågor med gränssatser som kan behöva hämta alla rader från varje aktivitet för att generera resultat. I dessa fall, och där en uppskattning skulle ge meningsfulla resultat, anger det här konfigurationsvärdet antalet rader som ska hämtas från varje shard. Gränsimimeringar är inaktiverade som standard och den här parametern är inställd på -1. Det här värdet kan anges vid körning och gäller för koordinatorn.

citus.count_distinct_error_rate (flyttals)

Azure Cosmos DB for PostgreSQL kan beräkna antal(distinkta) ungefärliga värden med tillägget postgresql-hll. Den här konfigurationsposten anger önskad felfrekvens vid beräkning av antal(distinkt). 0.0, som är standard, inaktiverar approximationer för antal(distinkta); och 1.0 ger inga garantier för att resultaten är korrekta. Vi rekommenderar att du anger den här parametern till 0,005 för bästa resultat. Det här värdet kan anges vid körning och gäller för koordinatorn.

citus.task_assignment_policy (uppräkning)

Kommentar

Denna GUC gäller endast när shard_replication_factor är större än en eller för frågor mot reference_tables.

Anger vilken princip som ska användas vid tilldelning av uppgifter till arbetare. Koordinatorn tilldelar uppgifter till arbetare baserat på fragmentplatser. Det här konfigurationsvärdet anger den princip som ska användas när du gör dessa tilldelningar. För närvarande finns det tre möjliga aktivitetstilldelningsprinciper som kan användas.

  • girig: Den giriga politiken är standard och syftar till att fördela uppgifter jämnt mellan arbetstagarna.
  • resursallokering: Resursallokeringsprincipen tilldelar uppgifter till arbetare på ett resursallokeringssätt som växlar mellan olika repliker. Den här principen möjliggör bättre klusteranvändning när antalet shard för en tabell är lågt jämfört med antalet arbetare.
  • first-replica: Principen för den första repliken tilldelar uppgifter baserat på infogningsordningen för placeringar (repliker) för shards. Med andra ord tilldelas fragmentfrågan för en shard till arbetaren som har den första repliken av fragmentet. Med den här metoden kan du ha starka garantier om vilka shards som används på vilka noder (det vill: starkare minnesplaceringsgarantier).

Den här parametern kan anges vid körning och gäller för koordinatorn.

citus.enable_non_colocated_router_query_pushdown (booleskt)

Aktiverar routerplanering för de frågor som refererar till icke-samallokerade distribuerade tabeller.

Routerhanteraren är endast aktiverad för frågor som refererar till samlokaliserade distribuerade tabeller eftersom shards annars kanske inte finns på samma nod. Om du aktiverar den här flaggan kan du optimera frågor som refererar till sådana tabeller, men frågan kanske inte fungerar när du har balanserat om shards eller ändrat antalet shard-tabeller.

Standardvärdet är off.

Mellanliggande dataöverföring

citus.max_intermediate_result_size (heltal)

Den maximala storleken i KB för mellanliggande resultat för CTE:er som inte kan push-överföras till arbetsnoder för körning och för komplexa underfrågor. Standardvärdet är 1 GB och värdet -1 innebär ingen gräns. Frågor som överskrider gränsen avbryts och ett felmeddelande visas.

DDL

citus.enable_schema_based_sharding

Med parametern inställd på ONdistribueras alla skapade scheman som standard. Distribuerade scheman associeras automatiskt med enskilda samlokaliseringsgrupper, så att tabellerna som skapas i dessa scheman konverteras till samlokaliserade distribuerade tabeller utan en shardnyckel. Den här inställningen kan ändras för enskilda sessioner.

Ett exempel på hur du använder den här GUC:en finns i hur du utformar för mikrotjänster.

Konfiguration av körkörning

Allmänt

citus.all_modifications_commutative

Azure Cosmos DB for PostgreSQL tillämpar regler för kommutativitet och hämtar lämpliga lås för ändringsåtgärder för att garantera korrekt beteende. Det förutsätter till exempel att en INSERT-instruktion pendlar med en annan INSERT-instruktion, men inte med en UPDATE- eller DELETE-instruktion. På samma sätt förutsätter den att en UPDATE- eller DELETE-instruktion inte pendlar med en annan UPDATE- eller DELETE-instruktion. Den här försiktighetsåtgärden innebär att UPDATEs och DELETE kräver att Azure Cosmos DB for PostgreSQL skaffar starkare lås.

Om du har UPDATE-instruktioner som är kommutativa med dina INSERTs eller andra UPDATEs kan du lätta på dessa antaganden om kommutativitet genom att ange den här parametern till true. När den här parametern är inställd på true anses alla kommandon vara kommutativa och göra anspråk på ett delat lås, vilket kan förbättra det totala dataflödet. Den här parametern kan anges vid körning och gäller för koordinatorn.

citus.remote_task_check_interval (heltal)

Anger hur ofta Azure Cosmos DB for PostgreSQL söker efter status för jobb som hanteras av aktivitetsspårarens köre. Standardvärdet är 10 ms. Koordinatorn tilldelar uppgifter till arbetare och kontrollerar sedan regelbundet med dem om varje aktivitets förlopp. Det här konfigurationsvärdet anger tidsintervallet mellan två efterföljande kontroller. Den här parametern är effektiv på koordinatorn och kan ställas in vid körning.

citus.task_executor_type (uppräkning)

Azure Cosmos DB for PostgreSQL har tre körtyper för att köra distribuerade SELECT-frågor. Du kan välja önskad köre genom att ange den här konfigurationsparametern. De godkända värdena för den här parametern är:

  • adaptiv: Standardinställningen. Det är optimalt för snabba svar på frågor som omfattar aggregeringar och samlokaliserade kopplingar som sträcker sig över flera shards.
  • task-tracker: Köruppgiftsspåraren passar bra för tidskrävande, komplexa frågor som kräver blandning av data mellan arbetsnoder och effektiv resurshantering.
  • realtid: (inaktuell) Har ett liknande syfte som den anpassningsbara kören, men är mindre flexibel och kan orsaka mer anslutningstryck på arbetsnoder.

Den här parametern kan anges vid körning och gäller för koordinatorn.

citus.multi_task_query_log_level (uppräkning) {#multi_task_logging}

Anger en loggnivå för alla frågor som genererar mer än en uppgift (det vill: som träffar mer än en shard). Loggning är användbart under en programmigrering med flera klientorganisationer, eftersom du kan välja att felsöka eller varna för sådana frågor för att hitta dem och lägga till ett tenant_id filter till dem. Den här parametern kan anges vid körning och gäller för koordinatorn. Standardvärdet för den här parametern är "off".

De värden som stöds för den här uppräkningen är:

  • av: Inaktivera loggning av frågor som genererar flera uppgifter (d.s.a. sträcker sig över flera shards)
  • felsökning: Logs-instruktion på allvarlighetsgrad för FELSÖKNING.
  • log: Logs statement på LOG-allvarlighetsgrad. Loggraden innehåller SQL-frågan som kördes.
  • notice: Logs statement at NOTICE severity level(Meddelande om allvarlighetsgrad).
  • varning: Logs-instruktionen på allvarlighetsgrad VARNING.
  • error: Logs statement at ERROR severity level (Fel allvarlighetsgrad).

Det kan vara användbart att använda error under utvecklingstestning och en lägre loggnivå, till exempel log under den faktiska produktionsdistributionen. Om du väljer log visas frågor för flera aktiviteter i databasloggarna med själva frågan som visas efter "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 (uppräkning)

Avgör vilka SET-kommandon som sprids från koordinatorn till arbetare. Standardvärdet för den här parametern är "none".

De värden som stöds är:

  • none: inga SET-kommandon sprids.
  • local: endast SET LOCAL-kommandon sprids.
citus.create_object_propagation (uppräkning)

Styr beteendet för CREATE-instruktioner i transaktioner för objekt som stöds.

När objekt skapas i ett transaktionsblock med flera instruktioner växlar Azure Cosmos DB for PostgreSQL sekventiellt läge för att säkerställa att skapade objekt visas för senare instruktioner på shards. Det är dock inte alltid önskvärt att växla till sekventiellt läge. Genom att åsidosätta det här beteendet kan användaren avväga prestanda för fullständig transaktionskonsekvens när nya objekt skapas.

Standardvärdet för den här parametern är "omedelbart".

De värden som stöds är:

  • omedelbart: genererar fel i transaktioner där parallella åtgärder som create_distributed_table inträffar före ett försök att skapa typ.
  • automatisk: skjut upp skapandet av typer när du delar en transaktion med en parallell åtgärd i distribuerade tabeller. Det kan finnas viss inkonsekvens mellan vilka databasobjekt som finns på olika noder.
  • uppskjuten: återgå till beteendet före 11.0, vilket är som automatiskt men med andra subtila hörnfall. Vi rekommenderar den automatiska inställningen över uppskjuten, såvida du inte behöver sann bakåtkompatibilitet.

Ett exempel på den här GUC:en i praktiken finns i typspridning.

citus.enable_repartition_joins (booleskt)

Normalt misslyckas försök att utföra ompartitionskopplingar med den adaptiva kören med ett felmeddelande. Om inställningen citus.enable_repartition_joins är true kan dock Azure Cosmos DB for PostgreSQL tillfälligt växla till aktivitetsspårarens executor för att utföra kopplingen. Standardvärdet är "false".

citus.enable_repartitioned_insert_select (booleskt)

Som standard är en INSERT INTO ... SELECT-instruktion som inte kan tryckas ned försöker partitionera om rader från SELECT-instruktionen och överföra dem mellan arbetare för infogning. Men om måltabellen har för många shards kommer ompartitioneringen förmodligen inte att fungera bra. Kostnaden för att bearbeta shardintervallen när du bestämmer hur resultatet ska partitioneras är för stort. Ompartitionering kan inaktiveras manuellt genom att ställa in citus.enable_repartitioned_insert_select på false.

citus.enable_binary_protocol (booleskt)

Om du anger den här parametern till true instrueras koordinatornoden att använda PostgreSQL:s binära serialiseringsformat (i förekommande fall) för att överföra data med arbetare. Vissa kolumntyper stöder inte binär serialisering.

Att aktivera den här parametern är mest användbart när arbetarna måste returnera stora mängder data. Exempel är när många rader begärs, raderna har många kolumner eller om de använder breda typer, till exempel hll från tillägget postgresql-hll.

Standardvärdet är true. När det är inställt på falsekodas och överförs alla resultat i textformat.

citus.max_adaptive_executor_pool_size (heltal)

Max_adaptive_executor_pool_size begränsar arbetsanslutningar från den aktuella sessionen. Denna GUC är användbar för:

  • Förhindra att en enskild serverdel hämtar alla arbetsresurser
  • Tillhandahålla prioritetshantering: ange sessioner med låg prioritet med låg max_adaptive_executor_pool_size och högprioriteringssessioner med högre värden

Standardvärdet är 16.

citus.executor_slow_start_interval (heltal)

Det är dags att vänta i millisekunder mellan att öppna anslutningar till samma arbetsnod.

När de enskilda uppgifterna i en fråga med flera fragment tar lite tid kan de ofta avslutas via en enda anslutning (ofta redan cachelagrad). För att undvika redundant öppning av fler anslutningar väntar kören mellan anslutningsförsöken på det konfigurerade antalet millisekunder. I slutet av intervallet ökar antalet anslutningar som tillåts öppnas nästa gång.

För långa frågor (de som tar >500 ms) kan långsam start lägga till svarstid, men för korta frågor går det snabbare. Standardvärdet är 10 ms.

citus.max_cached_conns_per_worker (heltal)

Varje serverdel öppnar anslutningar till arbetarna för att köra frågor mot fragmenten. I slutet av transaktionen hålls det konfigurerade antalet anslutningar öppet för att påskynda efterföljande kommandon. Om du ökar det här värdet minskar svarstiden för frågor med flera fragment, men ökar även omkostnaderna för arbetarna.

Standardvärdet är 1. Ett större värde som 2 kan vara användbart för kluster som använder ett litet antal samtidiga sessioner, men det är inte klokt att gå mycket längre (till exempel skulle 16 vara för högt).

citus.force_max_query_parallelization (booleskt)

Simulerar den inaktuella och nu obefintliga realtidskörningen. Den här parametern används för att öppna så många anslutningar som möjligt för att maximera frågeparallellisering.

När denna GUC är aktiverad tvingar Azure Cosmos DB for PostgreSQL den adaptiva kören att använda så många anslutningar som möjligt när en parallell distribuerad fråga körs. Om den inte är aktiverad kan kören välja att använda färre anslutningar för att optimera det övergripande dataflödet för frågekörning. Internt kan det sluta med att du ställer in detta på true att använda en anslutning per aktivitet.

En plats där den här parametern är användbar är i en transaktion vars första fråga är enkel och kräver få anslutningar, medan en efterföljande fråga skulle dra nytta av fler anslutningar. Azure Cosmos DB for PostgreSQL bestämmer hur många anslutningar som ska användas i en transaktion baserat på den första instruktionen, vilket kan begränsa andra frågor om vi inte använder GUC för att ge ett tips.

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;

Standardvärdet är "false".

Konfiguration av aktivitetsspårare för körning

citus.task_tracker_delay (heltal)

Den här parametern anger aktivitetsspårarens vilotid mellan aktivitetshanteringsrundorna och är som standard 200 ms. Aktivitetsspårarprocessen aktiveras regelbundet, går över alla uppgifter som tilldelats till den och schemalägger och kör dessa uppgifter. Sedan ligger aktivitetsspåraren i viloläge under en tidsperiod innan du går över dessa uppgifter igen. Det här konfigurationsvärdet avgör längden på den viloperioden. Den här parametern är effektiv för arbetarna och måste ändras i postgresql.conf-filen. När du har redigerat konfigurationsfilen kan användarna skicka en SIGHUP-signal eller starta om servern för att ändringen ska börja gälla.

Den här parametern kan minskas för att minska fördröjningen som orsakas av aktivitetsspårarens köruppgift genom att minska tidsgapet mellan hanteringsrundorna. Att minska fördröjningen är användbart i de fall då shardfrågorna är korta och därmed uppdaterar deras status regelbundet.

citus.max_assign_task_batch_size (heltal)

Utföraren för aktivitetsspåraren på koordinatorn tilldelar synkront uppgifter i batchar till daemonen för arbetarna. Den här parametern anger det maximala antalet uppgifter som ska tilldelas i en enda batch. Om du väljer en större batchstorlek kan du få snabbare uppgiftstilldelning. Men om antalet arbetstagare är stort kan det ta längre tid för alla arbetstagare att få uppgifter. Den här parametern kan anges vid körning och gäller för koordinatorn.

citus.max_running_tasks_per_node (heltal)

Aktivitetsspåraren schemalägger och kör de uppgifter som tilldelats till den efter behov. Det här konfigurationsvärdet anger det maximala antalet aktiviteter som ska köras samtidigt på en nod vid en viss tidpunkt och standardvärdet är 8.

Gränsen säkerställer att du inte har många uppgifter på samma gång och hjälper dig att undvika disk-I/O-konkurrens. Om dina frågor hanteras från minne eller SSD kan du öka max_running_tasks_per_node utan större problem.

citus.partition_buffer_size (heltal)

Anger buffertstorleken som ska användas för partitionsåtgärder och är som standard 8 MB. Med Azure Cosmos DB for PostgreSQL kan tabelldata partitioneras om till flera filer när två stora tabeller ansluts. När partitionsbufferten har fyllts i töms de ompartitionerade data i filer på disken. Den här konfigurationsposten kan anges vid körning och gäller för arbetarna.

Förklara utdata

citus.explain_all_tasks (booleskt)

Som standard visar Azure Cosmos DB for PostgreSQL utdata från en enskild, godtycklig uppgift när du kör EXPLAIN på en distribuerad fråga. I de flesta fall är förklaringsutdata likartade mellan aktiviteter. Ibland planeras vissa uppgifter på olika sätt eller har mycket högre körningstider. I dessa fall kan det vara användbart att aktivera den här parametern, varefter EXPLAIN-utdata innehåller alla uppgifter. Att förklara alla uppgifter kan göra att EXPLAIN tar längre tid.

citus.explain_analyze_sort_method (uppräkning)

Avgör sorteringsmetoden för aktiviteterna i utdata från EXPLAIN ANALYZE. Standardvärdet citus.explain_analyze_sort_method för är execution-time.

De värden som stöds är:

  • körningstid: sortera efter körningstid.
  • taskId: sortera efter aktivitets-ID.

Hanterade PgBouncer-parametrar

Följande hanterade PgBouncer-parametrar kan konfigureras på en enda nod eller koordinator.

Parameternamn beskrivning Standard
pgbouncer.default_pool_size Ange det här parametervärdet till antalet anslutningar per användar-/databaspar. 295
pgbouncer.ignore_startup_parameters Kommaavgränsad lista över parametrar som PgBouncer kan ignorera. Du kan till exempel låta PgBouncer ignorera extra_float_digits parametern. Vissa parametrar tillåts, andra genererar fel. Den här möjligheten krävs för att tolerera överentusiastisk JDBC som ovillkorligt vill ange "extra_float_digits=2" i startpaketet. Använd det här alternativet om biblioteket du använder rapportfel som pq: unsupported startup parameter: extra_float_digits. extra_float_digits, ssl_renegotiation_limit
pgBouncer.max_client_conn Ange det här parametervärdet till det högsta antalet klientanslutningar till PgBouncer som du vill stödja. 2000
pgBouncer.min_pool_size Lägg till fler serveranslutningar till poolen om det är under det här talet. 0 (inaktiverad)
pgBouncer.pool_mode Ange det här parametervärdet till TRANSACTION för transaktionspooler (vilket är den rekommenderade inställningen för de flesta arbetsbelastningar). TRANSAKTION
pgbouncer.query_wait_timeout Maximal tid (i sekunder) för frågor som tillåts vänta på körning. Om frågan inte har tilldelats till en server under den tiden kopplas klienten från. 20 s
pgbouncer.server_idle_timeout Om en serveranslutning har varit inaktiv mer än så här många sekunder stängs den. Om 0 inaktiveras den här tidsgränsen. 60 s

PostgreSQL-parametrar

  • DateStyle – Anger visningsformatet för datum- och tidsvärden
  • IntervalStyle – Anger visningsformatet för intervallvärden
  • Tidszon – Anger tidszonen för visning och tolkning av tidsstämplar
  • application_name – Anger programnamnet som ska rapporteras i statistik och loggar
  • array_nulls – Aktiverar indata för NULL-element i matriser
  • autovacuum – Startar autovacuum-underprocessen
  • autovacuum_analyze_scale_factor – Antal tupplar som infogas, uppdateras eller tas bort innan de analyseras som en bråkdel av reltuples
  • autovacuum_analyze_threshold – Minsta antal tupplar, uppdateringar eller borttagningar innan du analyserar
  • autovacuum_naptime – Tid att viloläge mellan autovacuum-körningar
  • autovacuum_vacuum_cost_delay – Vakuumkostnadsfördröjning i millisekunder för autovacuum
  • autovacuum_vacuum_cost_limit – Vakuumkostnadsbelopp som är tillgängligt före tupplur, för autovacuum
  • autovacuum_vacuum_scale_factor – Antal tupplar som uppdateras eller tas bort före vakuum som en bråkdel av reltuples
  • autovacuum_vacuum_threshold – Minsta antal tuppelns uppdateringar eller borttagningar före vakuum
  • autovacuum_work_mem – Anger det maximala minne som ska användas av varje autovacuum-arbetsprocess
  • backend_flush_after – Antalet sidor efter vilka tidigare utförda skrivningar töms till disk
  • backslash_quote – Anger om "'" tillåts i strängliteraler
  • bgwriter_delay – Vilotid för bakgrundsskrivare mellan rundor
  • bgwriter_flush_after – Antal sidor efter vilka tidigare utförda skrivningar töms till disk
  • bgwriter_lru_maxpages – Maximalt antal LRU-sidor för bakgrundsskrivare som ska tömmas per runda
  • bgwriter_lru_multiplier – Flera av den genomsnittliga buffertanvändningen som ska frigöras per runda
  • bytea_output – Anger utdataformatet för bytea
  • check_function_bodies – Kontrollerar funktionskroppar under CREATE FUNCTION
  • checkpoint_completion_target – Tid som ägnas åt att rensa smutsiga buffertar under kontrollpunkten, som bråkdel av kontrollpunktsintervallet
  • checkpoint_timeout – Anger den maximala tiden mellan automatiska WAL-kontrollpunkter
  • checkpoint_warning – Aktiverar varningar om kontrollpunktssegment fylls oftare än så
  • client_encoding – Anger klientens teckenuppsättningskodning
  • client_min_messages – Anger de meddelandenivåer som skickas till klienten
  • commit_delay – Anger fördröjningen i mikrosekunder mellan transaktionsincheckning och tömning av WAL till disk
  • commit_siblings – Anger minsta antal samtidiga öppna transaktioner innan du utför commit_delay
  • constraint_exclusion – Gör det möjligt för planeraren att använda begränsningar för att optimera frågor
  • cpu_index_tuple_cost – Anger planerarens uppskattning av kostnaden för att bearbeta varje indexpost under en indexgenomsökning
  • cpu_operator_cost – Anger planerarens uppskattning av kostnaden för bearbetning av varje operatör eller funktionsanrop
  • cpu_tuple_cost – Anger planerarens uppskattning av kostnaden för bearbetning av varje tuppeln (rad)
  • cursor_tuple_fraction – Anger planerarens uppskattning av bråkdelen av en markörs rader som hämtas
  • deadlock_timeout – Anger hur lång tid, i millisekunder, att vänta på ett lås innan du söker efter dödläge
  • debug_pretty_print – Visar indrag för parsning och planträd
  • debug_print_parse – Loggar varje frågas parsningsträd
  • debug_print_plan – Loggar varje frågas körningsplan
  • debug_print_rewritten – Loggar varje frågas omskrivna parsningsträd
  • default_statistics_target – Anger standardstatistikmålet
  • default_tablespace – Anger standardtabellområdet för att skapa tabeller och index i
  • default_text_search_config – Anger standardkonfiguration för textsökning
  • default_transaction_deferrable – Anger standardstatus för uppskjutbara nya transaktioner
  • default_transaction_isolation – Anger transaktionsisoleringsnivån för varje ny transaktion
  • default_transaction_read_only – Anger standardstatus för skrivskyddade nya transaktioner
  • default_with_oids – Skapar nya tabeller med OID:n som standard
  • effective_cache_size – Anger planerarens antagande om storleken på diskcachen
  • enable_bitmapscan – Aktiverar planerarens användning av bitmappsgenomsökningsplaner
  • enable_gathermerge – Aktiverar planerarens användning av sammanslagningsplaner
  • enable_hashagg – Aktiverar planerarens användning av hashade aggregeringsplaner
  • enable_hashjoin – Aktiverar planerarens användning av hashkopplingsplaner
  • enable_indexonlyscan – Aktiverar planerarens användning av index-only-scan-planer
  • enable_indexscan – Aktiverar planerarens användning av indexgenomsökningsplaner
  • enable_material – Gör det möjligt för planeraren att använda materialisering
  • enable_mergejoin – Aktiverar planerarens användning av kopplingsplaner
  • enable_nestloop – Aktiverar planerarens användning av kapslade loopkopplingsplaner
  • enable_seqscan – Aktiverar planerarens användning av sekventiella genomsökningsplaner
  • enable_sort – Gör det möjligt för planeraren att använda explicita sorteringssteg
  • enable_tidscan – Aktiverar planerarens användning av TID-genomsökningsplaner
  • escape_string_warning – Varnar för omvänt snedstreck i vanliga strängliteraler
  • exit_on_error – avslutar sessionen vid eventuella fel
  • extra_float_digits – Anger antalet siffror som visas för flyttalsvärden
  • force_parallel_mode – Tvingar fram användning av parallella frågeresurser
  • from_collapse_limit – Anger storleken på FROM-listan utöver vilken underfrågor inte komprimeras
  • geqo – Möjliggör optimering av genetiska frågor
  • geqo_effort – GEQO: ansträngning används för att ange standardvärdet för andra GEQO-parametrar
  • geqo_generations – GEQO: antal iterationer av algoritmen
  • geqo_pool_size – GEQO: antal individer i populationen
  • geqo_seed – GEQO: seed för val av slumpmässig sökväg
  • geqo_selection_bias – GEQO: selektivt tryck i populationen
  • geqo_threshold – Anger tröskelvärdet för FROM-objekt utöver vilka GEQO används
  • gin_fuzzy_search_limit – Anger det maximala tillåtna resultatet för exakt sökning efter GIN
  • gin_pending_list_limit – Anger den maximala storleken på listan över väntande för GIN-index
  • idle_in_transaction_session_timeout – Anger den maximala tillåtna varaktigheten för en tomgångstransaktion
  • join_collapse_limit – Anger storleken på FROM-listan utöver vilken JOIN-konstruktioner inte plattas ut
  • lc_monetary – Anger språkinställningen för formatering av penningbelopp
  • lc_numeric – Anger språkinställningen för formateringsnummer
  • lo_compat_privileges – Aktiverar bakåtkompatibilitetsläge för behörighetskontroller på stora objekt
  • lock_timeout – Anger den maximala tillåtna varaktigheten (i millisekunder) för en eventuell väntan på ett lås. 0 inaktiverar detta
  • log_autovacuum_min_duration – Anger den minsta körningstid över vilken autovacuum-åtgärder loggas
  • log_connections – Loggar varje lyckad anslutning
  • log_destination – Anger målet för serverloggutdata
  • log_disconnections – Loggar slutet av en session, inklusive varaktighet
  • log_duration – Loggar varaktigheten för varje slutförd SQL-instruktion
  • log_error_verbosity – Anger utförlighet för loggade meddelanden
  • log_lock_waits – Loggar långa låsväntor
  • log_min_duration_statement – Anger den minsta körningstiden (i millisekunder) ovanför vilka instruktioner som loggas. -1 inaktiverar varaktigheter för loggningsinstruktor
  • log_min_error_statement – Gör att alla instruktioner som genererar fel på eller över den här nivån loggas
  • log_min_messages – Anger de meddelandenivåer som loggas
  • log_replication_commands – Loggar varje replikeringskommando
  • log_statement – Anger vilken typ av instruktioner som loggas
  • log_statement_stats – För varje fråga skriver du kumulativ prestandastatistik till serverloggen
  • log_temp_files – Loggar användningen av temporära filer som är större än det här antalet kilobyte
  • maintenance_work_mem – Anger det maximala minne som ska användas för underhållsåtgärder
  • max_parallel_workers – Anger det maximala antalet parallella arbetare som kan vara aktiva samtidigt
  • max_parallel_workers_per_gather – Anger det maximala antalet parallella processer per körnod
  • max_pred_locks_per_page – Anger det maximala antalet predikatlåsta tupplar per sida
  • max_pred_locks_per_relation – Anger det maximala antalet predikatlåsta sidor och tupplar per relation
  • max_standby_archive_delay – Anger den maximala fördröjningen innan frågor avbryts när en frekvent väntelägesserver bearbetar arkiverade WAL-data
  • max_standby_streaming_delay – Anger den maximala fördröjningen innan frågor avbryts när en frekvent väntelägesserver bearbetar strömmade WAL-data
  • max_sync_workers_per_subscription – Maximalt antal tabellsynkroniseringsarbetare per prenumeration
  • max_wal_size – Anger DEN WAL-storlek som utlöser en kontrollpunkt
  • min_parallel_index_scan_size – Anger den minsta mängden indexdata för en parallell genomsökning
  • min_wal_size – Anger den minsta storleken för att krympa WAL till
  • operator_precedence_warning – Avger en varning för konstruktioner som har ändrat betydelse sedan PostgreSQL 9.4
  • parallel_setup_cost – Anger planerarens uppskattning av kostnaden för att starta arbetsprocesser för parallella frågor
  • parallel_tuple_cost – Anger planerarens uppskattning av kostnaden för att skicka varje tuppeln (rad) från arbetaren till huvudserverdelen
  • pg_stat_statements.save – Sparar pg_stat_statements statistik över serveravstängningar
  • pg_stat_statements.track – Väljer vilka instruktioner som spåras av pg_stat_statements
  • pg_stat_statements.track_utility – Väljer om verktygskommandon spåras av pg_stat_statements
  • quote_all_identifiers – När du genererar SQL-fragment citerar du alla identifierare
  • random_page_cost – Anger planerarens uppskattning av kostnaden för en icke-sekventiellt hämtad disksida
  • row_security – Aktiverar radsäkerhet
  • search_path – Anger schemasökningsordningen för namn som inte är schemakvalificerade
  • seq_page_cost – Anger planerarens uppskattning av kostnaden för en sekventiellt hämtad disksida
  • session_replication_role – Anger sessionens beteende för utlösare och omskrivningsregler
  • standard_conforming_strings - Orsaker ...' strängar för att behandla omvänt snedstreck bokstavligen
  • statement_timeout – Anger den maximala tillåtna varaktigheten (i millisekunder) för en instruktion. 0 inaktiverar detta
  • synchronize_seqscans – Aktiverar synkroniserade sekventiella genomsökningar
  • synchronous_commit – Anger den aktuella transaktionens synkroniseringsnivå
  • tcp_keepalives_count – Maximalt antal TCP keepalive-återöverföringar
  • tcp_keepalives_idle – Tid mellan utfärdandet av TCP keepalives
  • tcp_keepalives_interval – Tid mellan TCP keepalive-återöverföringar
  • temp_buffers – Anger det maximala antalet tillfälliga buffertar som används av varje databassession
  • temp_tablespaces – Anger vilka tabellområden som ska användas för temporära tabeller och sorteringsfiler
  • track_activities – Samlar in information om att köra kommandon
  • track_counts – Samlar in statistik om databasaktivitet
  • track_functions – Samlar in statistik på funktionsnivå om databasaktivitet
  • track_io_timing – Samlar in tidsstatistik för databas-I/O-aktivitet
  • transform_null_equals – Behandlar "expr=NULL" som "expr IS NULL"
  • vacuum_cost_delay – Vakuumkostnadsfördröjning i millisekunder
  • vacuum_cost_limit – Vakuumkostnadsbelopp som är tillgängligt före tupplur
  • vacuum_cost_page_dirty – Vakuumkostnad för en sida smutsad av vakuum
  • vacuum_cost_page_hit – Vakuumkostnad för en sida som finns i buffertcachen
  • vacuum_cost_page_miss – Vakuumkostnad för en sida hittades inte i buffertcachen
  • vacuum_defer_cleanup_age – Antal transaktioner med vilka VACUUM och HOT-rensning ska skjutas upp, om det finns några
  • vacuum_freeze_min_age – Lägsta ålder då VACUUM ska frysa en tabellrad
  • vacuum_freeze_table_age – Ålder då VACUUM ska skanna hela tabellen för att frysa tupplar
  • vacuum_multixact_freeze_min_age – Lägsta ålder då VACUUM ska frysa ett MultiXactId i en tabellrad
  • vacuum_multixact_freeze_table_age - Multixakt ålder där VACUUM ska skanna hela tabellen för att frysa tupplar
  • wal_receiver_status_interval – Anger det maximala intervallet mellan WAL-mottagarstatusrapporter till den primära
  • wal_writer_delay – Tid mellan WAL-tömningar som utförs i WAL-skrivaren
  • wal_writer_flush_after – Mängden WAL som skrivits ut av WAL-skrivaren som utlöser en tömning
  • work_mem – Anger hur mycket minne som ska användas av interna sorteringsåtgärder och hash-tabeller innan du skriver till tillfälliga diskfiler
  • xmlbinary – Anger hur binära värden ska kodas i XML
  • xmloption – Anger om XML-data i implicit parsning och serialiseringsåtgärder ska betraktas som dokument eller innehållsfragment

Nästa steg

  • En annan form av konfiguration, förutom serverparametrar, är resurskonfigurationsalternativen i ett kluster.
  • Den underliggande PostgreSQL-databasen har också konfigurationsparametrar.