
Kaasaegsetes protsessorites on vĂ€ga palju sĂŒdamikke. Aastaid on rakendused andmebaasidele pĂ€ringute saatmiseks töötanud paralleelselt. Kui see on aruande pĂ€ring, mis hĂ”lmab mitmeid tabeleid, siis toimub see kiiremini, kui kasutatakse mitut protsessorit, ja PostgreSQL-is on see vĂ”imalik alates versioonist 9.6.
Kulutasime 3 aastat paralleelsete pĂ€ringute funktsiooni rakendamisele â tuli kirjutada kood ĂŒmber erinevatel pĂ€ringu tĂ€itmise etappidel. PostgreSQL 9.6 tĂ”i kaasa infrastruktuuri koodi edasiseks tĂ€iustamiseks. Hilisemates versioonides saavad ka teised pĂ€ringutĂŒĂŒbid töötada paralleelselt.
Piirangud
- Ărge lĂŒlitage paralleelset tĂ€itmist sisse, kui kĂ”ik protsessorisĂŒdamikud on juba hĂ”ivatud, vastasel juhul aeglustavad teised pĂ€ringud.
- Peamine asi on see, et kĂ”rge WORK_MEM vÀÀrtusega paralleelne töötlemine kasutab palju mĂ€lu â iga hash-ĂŒhendus vĂ”i sortimine vajab mĂ€lu vastavalt work_mem-i mahule.
- OLTP pĂ€ringud, millel on madal latentsus, ei saa paralleelse tĂ€itmisega kiiremaks muutuda. Ja kui pĂ€ring tagastab ainult ĂŒhe rea, siis pĂ€ringute paralleelne töötlemine ainult aeglustab seda.
- Arendajad armastavad kasutada TPC-H tulemusi. VÔib-olla on teil sarnaseid pÀringuid ideaalse paralleelse tÀitmise jaoks.
- Ainult SELECT pÀringud, millel ei ole predikaadi lukustust, saavad töötada paralleelselt.
- MĂ”nikord on Ă”ige indekseerimine parem kui tabeli jĂ€rjestikune skaneerimine paralleelses reĆŸiimis.
- PĂ€ringute peatamine ja kursused ei ole toetatud.
- Aknafunktsioonid ja jÀrjestatud komplektide agregaadifunktsioonid ei ole paralleelsed.
- Te ei saavutada sisend-vÀljund koormuses midagi.
- Paralleelseid jÀrjestusalgoritme ei eksisteeri. Kuid sortimiseta pÀringud saavad mÔnedes aspektides töötada paralleelselt.
- Asendage CTE (WITH âŠ) sisemise SELECT-iga, et lubada paralleelset töötlemist.
- Kolmandate osapoolte andmete mÀhised ei toeta veel paralleelset töötlemist (kuigi vÔiks!).
- FULL OUTER JOIN ei ole toetatud.
- max_rows vÀlistab paralleelse töötlemise.
- Kui pĂ€ringus on funktsioon, mida ei ole mĂ€rgitud kui PARALLEL SAFE, on see ĂŒhe protsessoriga.
- Tehingute isolatsiooni tase SERIALIZABLE vÀlistab paralleelse töötlemise.
Testimisalune
PostgreSQL arendajad pĂŒĂŒdsid vĂ€hendada TPC-H mÔÔtmise pĂ€ringute reageerimise aega. Laadige alla mÔÔtmine ja . See TPC-H mÔÔtmise mitteametlik kasutamine ei ole mĂ”eldud andmebaaside vĂ”i varustuse vĂ”rdlemiseks.
- Lae alla TPC-H_Tools_v2.17.3.zip (vÔi uuem versioon) .
- Nimeta makefile.suite ĂŒmber Makefile'iks ja muuda nagu siin on kirjeldatud: . Koodi kompileerimiseks kasuta kĂ€sku make.
- Genereeri andmed:
.\/dbgen -s 10loomiseks suurus 23 GB. Seda on piisavalt, et nÀha erinevusi paralleelsete ja mitteparalleelsete pÀringute tulemustes. - Muuda failid
tbljacsv forjased. - Kloonige hoidla
pg_tpchja kopeerige failidcsvjapg_tpch\/dss\/data. - Looge pÀringud kÀsuga
qgen. - Laadige andmed andmebaasi kÀsuga
.\/tpch.sh.
Paralleelne jÀrjestikune skaneerimine
See vĂ”ib olla kiirem mitte paralleelse lugemise tĂ”ttu, vaid kuna andmed on jaotatud paljude protsessorituumade vahel. Kaasaegsetes opsĂŒsteemides PostgreSQL andmefailid vahemĂ€lustuvad hĂ€sti. Eelneva lugemise abil saab salvestusmuutjalt lugeda rohkem plokke, kui PG teenus nĂ”uab. SeetĂ”ttu ei piira pĂ€ringu jĂ”udlus ketta sisend-vĂ€ljundit. See kulutab protsessori tsĂŒkleid, et:
- lugeda ridu ĂŒkshaaval tabeli lehtedelt;
- vÔrrelda ridade vÀÀrtusi ja tingimusi
KUS.
Teeme lihtsa pÀringu select:
tpch=# selgita analĂŒĂŒsi pĂ€ringut select l_quantity as sum_qty from lineitem where l_shipdate <= date '1998-12-01' - interval '105' day;
KĂSIMUSE PLaan
--------------------------------------------------------------------------------------------------------------------------
JĂ€rjekordne skaneerimine lineitem (kulu=0.00..1964772.00 read=58856235 laius=5) (aktiivne aeg=0.014..16951.669 read=58839715 tsĂŒklid=1)
Filter: (l_shipdate <= '1998-08-18 00:00:00'::timestamp ilma ajavööndita)
Filtri jÀrgi eemaldatud read: 1146337
Planeerimise aeg: 0.203 ms
Teostamise aeg: 19035.100 msJĂ€rjekordne skaneerimine annab liigselt ridu ilma agregatsioonita, nii et pĂ€ring tehakse ĂŒhe protsessorituuma poolt.
Kui lisada SUM(), on nÀha, et kaks tööhÔivet aitavad pÀringu kiirusel:
selgita analĂŒĂŒsi pĂ€ringut select sum(l_quantity) as sum_qty from lineitem where l_shipdate <= date '1998-12-01' - interval '105' day;
KĂSIMUSE PLaan
----------------------------------------------------------------------------------------------------------------------------------------------------
LĂ”peta agregaat (kulu=1589702.14..1589702.15 read=1 laius=32) (aktiivne aeg=8553.365..8553.365 read=1 tsĂŒklid=1)
-> Koguge (kulu=1589701.91..1589702.12 read=2 laius=32) (aktiivne aeg=8553.241..8555.067 read=3 tsĂŒklid=1)
Plaanitavad töötajad: 2
KÀivitatud töötajad: 2
-> Osaline agregaat (kulu=1588701.91..1588701.92 read=1 laius=32) (aktiivne aeg=8547.546..8547.546 read=1 tsĂŒklid=3)
-> Paralleelne jĂ€rjekordne skaneerimine lineitem (kulu=0.00..1527393.33 read=24523431 laius=5) (aktiivne aeg=0.038..5998.417 read=19613238 tsĂŒklid=3)
Filter: (l_shipdate <= '1998-08-18 00:00:00'::timestamp ilma ajavööndita)
Filtri jÀrgi eemaldatud read: 382112
Planeerimise aeg: 0.241 ms
Teostamise aeg: 8555.131 msParalleelne agregatsioon
SĂ”lm âParalleelne jĂ€rjekordne skaneerimineâ genereerib ridu osalisteks agregatsioonideks. SĂ”lm âOsaline agregaatâ kĂ€rbib neid ridu SUM(). LĂ”pus kogub iga töötaja SUM-i loenduri sĂ”lm âKoguâ.
LĂ”plik tulemus arvutatakse sĂ”lmes âFinalize Aggregateâ. Kui teil on oma aggregeerimisfunktsioonid, Ă€rge unustage neid mĂ€rkida kui âparallel safe.â
Tööprotsesside arv
Tööprotsesside arvu saab suurendada ilma serveri taaskÀivitamiseta:
selgita analĂŒĂŒsi pĂ€ringut select sum(l_quantity) as sum_qty from lineitem where l_shipdate <= date '1998-12-01' - interval '105' day;
KĂSIMUSE PLaan
----------------------------------------------------------------------------------------------------------------------------------------------------
LĂ”peta agregaat (kulu=1589702.14..1589702.15 read=1 laius=32) (aktiivne aeg=8553.365..8553.365 read=1 tsĂŒklid=1)
-> Koguge (kulu=1589701.91..1589702.12 read=2 laius=32) (aktiivne aeg=8553.241..8555.067 read=3 tsĂŒklid=1)
Plaanitavad töötajad: 2
KÀivitatud töötajad: 2
-> Osaline agregaat (kulu=1588701.91..1588701.92 read=1 laius=32) (aktiivne aeg=8547.546..8547.546 read=1 tsĂŒklid=3)
-> Paralleelne jĂ€rjekordne skaneerimine lineitem (kulu=0.00..1527393.33 read=24523431 laius=5) (aktiivne aeg=0.038..5998.417 read=19613238 tsĂŒklid=3)
Filter: (l_shipdate <= '1998-08-18 00:00:00'::timestamp ilma ajavööndita)
Filtri jÀrgi eemaldatud read: 382112
Planeerimise aeg: 0.241 ms
Teostamise aeg: 8555.131 msMis siin juhtub? Tööprotsesside arv on kahekordistunud, kuid pÀring on muutunud vaid 1,6599 korda kiiremaks. Arvutused on huvitavad. Meil oli 2 tööprotsessi ja 1 juht. PÀrast muutmist on see 4+1.
Meie maksimaalne kiirus, mis tuleneb paralleelsest töötlemisest: 5/3 = 1,66(6) korda.
Kuidas see töötab?
Protsessid
PÀringu tÀitmine algab alati juhtimisprotsessist. Juht tegeleb kÔigi mitte-paralleelsete ja osa paralleelse töötlemisega. Teisi protsesse, mis tÀidavad samu pÀringuid, nimetatakse tööprotsessideks. Paralleelne töötlemine kasutab infrastruktuuri (alates versioonist 9.4). Kuna PostgreSQL muud osad kasutavad protsesse, mitte lÔime, vÔis pÀring 3 tööprotsessiga olla 4 korda kiirem traditsioonilisest töötlemisest.
Koostöö
Tööprotsessid suhtlevad juhiga sĂ”numijĂ€rjekorra kaudu (ĂŒldise mĂ€lu pĂ”hjal). Igal protsessil on 2 jĂ€rjekorda: veaparanduse ja tuplede jaoks.
Kui palju tööprotsesse on vaja?
Minimaalne piirang mÀÀrab parameeter . Siis pÀringute tÀitja vÔtab tööprotsessid basseinist, mida piirab parameeter . Viimane piirang on , st taustprotsesside koguarv.
Kui tööprotsessi eraldamine ebaĂ”nnestub, on töötlemine ĂŒhes protsessis.
PÀringute planeerija vÔib vÀhendada tööprotsesside arvu tabeli vÔi indeksi suuruse pÔhjal. Selleks on olemas parameetrid ja .
set min_parallel_table_scan_size='8MB'
8MB tabel => 1 töötaja
24MB tabel => 2 töötajat
72MB tabel => 3 töötajat
x => log(x / min_parallel_table_scan_size) / log(3) + 1 töötajaIgal korral, kui tabel on 3 korda suurem kui min_parallel_(index|table)_scan_size, lisab Postgres tööprotsessi. Tööprotsesside arv ei pÔhine kuludel. Ringikujuline sÔltuvus raskendab keeruliste rakenduste loomist. Selle asemel kasutab planeerija lihtsaid reegleid.
Praktikas ei ole need reeglid alati tootmisoludes sobivad, seega on vÔimalik muuta tööprotsesside arvu konkreetse tabeli jaoks: ALTER TABLE ⊠SET (parallel_workers = N).
Miks paralleelset töötlemist ei kasutata?
Lisaks pika nimekirja piirangutele on veel kulude kontrollid:
â et vĂ€ltida lĂŒhikeste pĂ€ringute paralleelset töötlemist. See parameeter hindab mĂ€lu ettevalmistamise, protsessi kĂ€ivitamise ja esialgse andmevahetuse aega.
: juhendaja vahetus teiste töötajatega vÔib pikendada proportsionaalselt töötlemiste arvu tÔttu. See parameeter arvestab andmevahetuse kulusid.
Sisemised tsĂŒklite ĂŒhendused â Nested Loop Join
PostgreSQL 9.6+ suudab paralleelselt tĂ€ita pesatud tsĂŒklit â see on lihtne operatsioon.
explain (costs off) select c_custkey, count(o_orderkey)
from customer left outer join orders on
c_custkey = o_custkey and o_comment not like '%specialposits%'
group by c_custkey;
QUERY PLAN
--------------------------------------------------------------------------------------
Finalize GroupAggregate
Group Key: customer.c_custkey
-> Gather Merge
Workers Planned: 4
-> Partial GroupAggregate
Group Key: customer.c_custkey
-> Nested Loop Left Join
-> Parallel Index Only Scan using customer_pkey on customer
-> Index Scan using idx_orders_custkey on orders
Index Cond: (customer.c_custkey = o_custkey)
Filter: ((o_comment)::text !~~ '%specialposits%'::text)Kogumine toimub viimases etapis, seega on Nested Loop Left Join paralleelne operatsioon. Parallel Index Only Scan ilmus alles versioonis 10. See töötab sarnaselt paralleelsele jĂ€rjestikusele skaneerimisele. Tingimus c_custkey = o_custkey loeb iga kliendi rea jaoks ĂŒhe tellimuse. Seega see ei ole paralleelne.
Rohesidel ĂŒhendamine â Hash Join
Iga töötlemisprotsess loob oma hĂ€shtiabeli kuni PostgreSQL 11. Ja kui neid protsesse on rohkem kui neli, ei parane jĂ”udlus. Uues versioonis on hĂ€stitaabel ĂŒhine. Iga töötlemisprotsess vĂ”ib kasutada WORK_MEM, et luua hĂ€shtiabel.
valige
l_shipmode,
sum(case
kui o_orderpriority = '1-URGENT'
vÔi o_orderpriority = '2-HIGH'
siis 1
muu juhul 0
end) kui high_line_count,
sum(case
kui o_orderpriority '1-URGENT'
ja o_orderpriority '2-HIGH'
siis 1
muu juhul 0
end) kui low_line_count
alates
orders,
lineitem
kui
o_orderkey = l_orderkey
ja l_shipmode in ('MAIL', 'AIR')
ja l_commitdate < l_receiptdate
ja l_shipdate = kuupÀev '1996-01-01'
ja l_receiptdate < kuupÀev '1996-01-01' + intervall '1' aasta
rĂŒhmitama
l_shipmode
jÀrjestama
l_shipmode
PIIRDED 1;
KĂSIMUSE PLANEERIMINE
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Piirang (kulud=1964755.66..1964961.44 read=1 laius=27) (tegelik aeg=7579.592..7922.997 read=1 tsĂŒklis=1)
-> Finalize GroupAggregate (kulud=1964755.66..1966196.11 read=7 laius=27) (tegelik aeg=7579.590..7579.591 read=1 tsĂŒklis=1)
RĂŒhma vĂ”ti: lineitem.l_shipmode
-> Gather Merge (kulud=1964755.66..1966195.83 read=28 laius=27) (tegelik aeg=7559.593..7922.319 read=6 tsĂŒklis=1)
Planeeritud töötajad: 4
Alustatud töötajad: 4
-> Partial GroupAggregate (kulud=1963755.61..1965192.44 read=7 laius=27) (tegelik aeg=7548.103..7564.592 read=2 tsĂŒklis=5)
RĂŒhma vĂ”ti: lineitem.l_shipmode
-> Sort (kulud=1963755.61..1963935.20 read=71838 laius=27) (tegelik aeg=7530.280..7539.688 read=62519 tsĂŒklis=5)
SortimisvÔti: lineitem.l_shipmode
Sortimise meetod: vÀlispidine liitmine Disk: 2304kB
Tööline 0: Sortimise meetod: vÀlispidine liitmine Disk: 2064kB
Tööline 1: Sortimise meetod: vÀlispidine liitmine Disk: 2384kB
Tööline 2: Sortimise meetod: vÀlispidine liitmine Disk: 2264kB
Tööline 3: Sortimise meetod: vÀlispidine liitmine Disk: 2336kB
-> Parallel Hash Join (kulud=382571.01..1957960.99 read=71838 laius=27) (tegelik aeg=7036.917..7499.692 read=62519 tsĂŒklis=5)
Hash Tingimus: (lineitem.l_orderkey = orders.o_orderkey)
-> Parallel Seq Scan on lineitem (kulud=0.00..1552386.40 read=71838 laius=19) (tegelik aeg=0.583..4901.063 read=62519 tsĂŒklis=5)
Filter: ((l_shipmode = ANY ('{MAIL,AIR}'::bpchar[])) JA (l_commitdate < l_receiptdate) JA (l_shipdate = '1996-01-01'::kuupÀev) JA (l_receiptdate < '1997-01-01 00:00:00'::aeg ilma ajavööndita))
Ridu eemaldatud filtrist: 11934691
-> Parallel Hash (kulud=313722.45..313722.45 read=3750045 laius=20) (tegelik aeg=2011.518..2011.518 read=3000000 tsĂŒklis=5)
Baki: 65536 Partiid: 256 MĂ€lu kasutus: 3840kB
-> Parallel Seq Scan on orders (kulud=0.00..313722.45 read=3750045 laius=20) (tegelik aeg=0.029..995.948 read=3000000 tsĂŒklis=5)
Planeerimise aeg: 0.977 ms
TĂ€itmise aeg: 7923.770 msKĂŒsimus 12 TPC-H nĂ€itab selgelt parallelset rĂ€sivĂ”rku. Iga tööprotsess osaleb ĂŒhise rĂ€sitabeli loomisel.
Ăhendamine koondamisega â Merge Join
Ăhendamine koondamisega on olemuselt mitteparalleelne. Ăra muretse, kui see on pĂ€ringu viimane etapp, â see vĂ”ib ikkagi toimuda paralleelselt.
-- Küsimus 2 TPC-H-st
selgita (kulud välja) vali s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment
part, supplier, partsupp, nation, region
kus
p_partkey = ps_partkey
ja s_suppkey = ps_suppkey
ja p_size = 36
ja p_type nagu '%BRASS'
ja s_nationkey = n_nationkey
ja n_regionkey = r_regionkey
ja r_name = 'AMERICA'
ja ps_supplycost = (
vali
min(ps_supplycost)
partsupp, supplier, nation, region
kus
p_partkey = ps_partkey
ja s_suppkey = ps_suppkey
ja s_nationkey = n_nationkey
ja n_regionkey = r_regionkey
ja r_name = 'AMERICA'
)
järjestus s_acctbal desc, n_name, s_name, p_partkey
PIIRANG 100;
KÜSIMUSE PLANEERIMINE
----------------------------------------------------------------------------------------------------------
Piirang
-> Sort
Sort Key: supplier.s_acctbal DESC, nation.n_name, supplier.s_name, part.p_partkey
-> Merge Join
Merge Cond: (part.p_partkey = partsupp.ps_partkey)
Join Filter: (partsupp.ps_supplycost = (Alluvusplaan 1))
-> Koguge Merged
Plaanitud Töötajad: 4
-> Paralleelne Indeksi Skaneerimine kasutades <strong>part_pkey</strong> os part
Filter: (((p_type)::text ~~ '%BRASS'::text) JA (p_size = 36))
-> Materjaliseerimise
-> Sorteerimine
Sort Key: partsupp.ps_partkey
-> Sisejõud
-> Sisejõud
Join Filter: (nation.n_regionkey = region.r_regionkey)
-> Seq Scan on region
Filter: (r_name = 'AMERICA'::bpchar)
-> Hash Join
Hash Cond: (supplier.s_nationkey = nation.n_nationkey)
-> Seq Scan on supplier
-> Hash
-> Seq Scan on nation
-> Indeksi Skaneerimine kasutades idx_partsupp_suppkey on partsupp
Index Cond: (ps_suppkey = supplier.s_suppkey)
Alluvusplaan 1
-> Agregaat
-> Sisejõud
Join Filter: (nation_1.n_regionkey = region_1.r_regionkey)
-> Seq Scan on region region_1
Filter: (r_name = 'AMERICA'::bpchar)
-> Sisejõud
-> Sisejõud
-> Indeksi Skaneerimine kasutades idx_partsupp_partkey on partsupp partsupp_1
Index Cond: (part.p_partkey = ps_partkey)
-> Indeksi Skaneerimine kasutades supplier_pkey on supplier supplier_1
Index Cond: (s_suppkey = partsupp_1.ps_suppkey)
-> Indeksi Skaneerimine kasutades nation_pkey on nation nation_1
Index Cond: (n_nationkey = supplier_1.s_nationkey)Noode âMerge Joinâ asub âGather Mergeâ kohal. Seega koondamine ei kasuta paralleelset töötlemist. Kuid noode âParallel Index Scanâ aitab siiski segmendi puhul. part_pkey.
Jaotiste kaupa ĂŒhendamine
PostgreSQL 11-s on vaikimisi keelatud: sellel on vĂ€ga kulukas planeerimine. Sarnaste jaotistega tabeleid saab ĂŒhendama jaotiste kaupa. Nii kasutab Postgres vĂ€iksemaid rĂ€sitabelid. Iga jaotise ĂŒhendamine vĂ”ib olla paralleelne.
tpch=# set enable_partitionwise_join=t;
tpch=# explain (costs off) select * from prt1 t1, prt2 t2
where t1.a = t2.b and t1.b = 0 and t2.b between 0 and 10000;
QUERY PLAN
---------------------------------------------------
Append
-> Hash Join
Hash Cond: (t2.b = t1.a)
-> Seq Scan on prt2_p1 t2
Filter: ((b >= 0) AND (b <= 10000))
-> Hash
-> Seq Scan on prt1_p1 t1
Filter: (b = 0)
-> Hash Join
Hash Cond: (t2_1.b = t1_1.a)
-> Seq Scan on prt2_p2 t2_1
Filter: ((b >= 0) AND (b <= 10000))
-> Hash
-> Seq Scan on prt1_p2 t1_1
Filter: (b = 0)
tpch=# set parallel_setup_cost = 1;
tpch=# set parallel_tuple_cost = 0.01;
tpch=# explain (costs off) select * from prt1 t1, prt2 t2
where t1.a = t2.b and t1.b = 0 and t2.b between 0 and 10000;
QUERY PLAN
-----------------------------------------------------------
Gather
Workers Planned: 4
-> Parallel Append
-> Parallel Hash Join
Hash Cond: (t2_1.b = t1_1.a)
-> Parallel Seq Scan on prt2_p2 t2_1
Filter: ((b >= 0) AND (b <= 10000))
-> Parallel Hash
-> Parallel Seq Scan on prt1_p2 t1_1
Filter: (b = 0)
-> Parallel Hash Join
Hash Cond: (t2.b = t1.a)
-> Parallel Seq Scan on prt2_p1 t2
Filter: ((b >= 0) AND (b <= 10000))
-> Parallel Hash
-> Parallel Seq Scan on prt1_p1 t1
Filter: (b = 0)Peamine on see, et jaotiste kaupa ĂŒhendamine toimub paralleelselt vaid siis, kui need jaotised on piisavalt suured.
Paralleelne lisamine â Parallel Append
vÔib kasutada erinevate plokkide jaoks erinevates tööprotsessides. Seda esineb tavaliselt UNION ALL pÀringutes. Puuduseks on vÀiksem paralleelsus, kuna iga tööprotsess töötleb vaid 1 pÀringut.
KĂ€imas on 2 tööprotsessi, kuigi sisse on lĂŒlitatud 4.
tpch=# explain (costs off) select sum(l_quantity) as sum_qty from lineitem where l_shipdate <= date '1998-12-01' - interval '105' day union all select sum(l_quantity) as sum_qty from lineitem where l_shipdate Parallel Append
-> Aggregate
-> Seq Scan on lineitem
Filter: (l_shipdate Aggregate
-> Seq Scan on lineitem lineitem_1
Filter: (l_shipdate <= '1998-08-18 00:00:00'::timestamp without time zone)KÔige olulisemad muutujad
- WORK_MEM piirab mĂ€lu kogust iga protsessi jaoks, mitte ainult pĂ€ringute jaoks: work_mem protsessid ĂŒhendused = vĂ€ga suur mĂ€lukasutus.
- â kui palju tööprotsesse kasutatav programm kasutab paralleelse töötlemise jaoks plaanis.
- â kohandab töötavate protsesside koguarvu serveri CPU sĂŒdamike arvu pĂ”hjal.
- â sama, kuid paralleelsete tööprotsesside jaoks.
Summary
Alates versioonist 9.6 vĂ”ivad paralleelne töötlemine oluliselt parandada keeruliste pĂ€ringute jĂ”udlust, mis skaneerivad palju ridu vĂ”i indekseid. PostgreSQL 10-s on paralleelne töötlemine vaikimisi sisse lĂŒlitatud. Ărge unustage seda vĂ€lja lĂŒlitada serverites, kus on suur OLTP koormus. JĂ€rjekorraskannid vĂ”i indeksiskannid kasutavad vĂ€ga palju ressursse. Kui te ei tee aruannet kogu andmestiku pĂ”hjal, vĂ”ib pĂ€ringute tootlikkust suurendada, lihtsalt lisades vajalikke indekseid vĂ”i kasutades Ă”iget osade jagamist.
Viidatud lingid
Allikas: habr.com
