Igbesoke fun ọlẹ: bawo ni PostgreSQL 12 ṣe ilọsiwaju iṣẹ

Igbesoke fun ọlẹ: bawo ni PostgreSQL 12 ṣe ilọsiwaju iṣẹ

PostgreSQL 12, Ẹya tuntun ti “orisun data ibatan orisun ṣiṣi ti o dara julọ ni agbaye,” n jade ni ọsẹ meji kan (ti gbogbo rẹ ba lọ ni ibamu si ero). Eyi tẹle iṣeto deede ti itusilẹ ẹya tuntun pẹlu pupọ ti awọn ẹya tuntun lẹẹkan ni ọdun, ati ni otitọ, iyẹn jẹ iwunilori. Ìdí nìyẹn tí mo fi di ọmọ ẹgbẹ́ tó ń ṣiṣẹ́ kára fún àwùjọ PostgreSQL.

Ni ero mi, ko dabi awọn idasilẹ iṣaaju, PostgreSQL 12 ko ni ọkan tabi meji awọn ẹya ara ẹrọ rogbodiyan (bii ipin tabi ibajọra ibeere). Mo ṣe awada ni ẹẹkan pe ẹya akọkọ ti PostgreSQL 12 jẹ iduroṣinṣin nla. Ṣe kii ṣe ohun ti o nilo nigba ti o ṣakoso data pataki ti iṣowo rẹ?

Ṣugbọn PostgreSQL 12 ko da duro nibẹ: pẹlu awọn ẹya tuntun ati awọn ilọsiwaju, awọn ohun elo yoo dara julọ, ati gbogbo ohun ti o nilo lati ṣe ni igbesoke!

(O dara, boya tun ṣe awọn atọka, ṣugbọn ninu itusilẹ yii kii ṣe idẹruba bi a ti lo.)

Yoo jẹ nla lati ṣe igbesoke PostgreSQL ati lẹsẹkẹsẹ gbadun awọn ilọsiwaju pataki laisi wahala ti ko wulo. Ni ọdun diẹ sẹyin, Mo ṣe atunyẹwo igbesoke lati PostgreSQL 9.4 si PostgreSQL 10 ati rii bi ohun elo ṣe ṣe soke ọpẹ si imudara ibeere ibeere ni PostgreSQL 10. Ati pe, pataki julọ, o fẹrẹ jẹ ohunkohun ti a beere lọwọ mi (kan ṣeto paramita iṣeto kan max_parallel_workers).

Gba, o rọrun nigbati awọn ohun elo ṣiṣẹ dara julọ lẹsẹkẹsẹ lẹhin igbesoke. Ati pe a gbiyanju pupọ lati wu awọn olumulo, nitori PostgreSQL ni diẹ sii ati diẹ sii ninu wọn.

Nitorinaa bawo ni igbesoke ti o rọrun si PostgreSQL 12 ṣe le jẹ ki inu rẹ dun? Emi yoo so fun o bayi.

Awọn ilọsiwaju atọka pataki

Laisi itọka, data data kii yoo lọ jinna. Bawo ni ohun miiran ti o le ni kiakia ri alaye? Eto atọka ipilẹ PostgreSQL ni a pe B-igi. Iru atọka yii jẹ iṣapeye fun awọn ọna ṣiṣe ipamọ.

A nìkan lo onišẹ CREATE INDEX ON some_table (some_column), ati PostgreSQL ṣe ọpọlọpọ iṣẹ lati tọju atọka titi di oni nigba ti a fi sii nigbagbogbo, imudojuiwọn, ati paarẹ awọn iye. Ohun gbogbo ṣiṣẹ lori ara rẹ, bi ẹnipe nipa idan.

Ṣugbọn awọn atọka PostgreSQL ni iṣoro kan - wọn ti wa ni inflated ati ki o gba aaye disk afikun ati dinku iṣẹ ṣiṣe ti gbigba data ati imudojuiwọn. Nipa “Blaat” Mo tumọ si mimu imunadoko eto atọka naa. Eyi le - tabi ko le - jẹ ibatan si awọn tuple idoti ti o yọ kuro ỌRỌ (o ṣeun si Peter Gaghan fun alaye naa)Peter Geoghegan)). Atọka bloat jẹ akiyesi paapaa ni awọn iṣẹ ṣiṣe nibiti atọka ti n yipada ni agbara.

PostgreSQL 12 ṣe ilọsiwaju iṣẹ ti awọn atọka B-igi, ati awọn adanwo pẹlu awọn aṣepari bii TPC-C ti fihan pe ni apapọ 40% kere si aaye ni lilo bayi. Bayi a lo akoko diẹ kii ṣe lori mimu awọn atọka B-igi (iyẹn ni, lori awọn iṣẹ kikọ), ṣugbọn tun lori gbigba data, nitori awọn atọka kere pupọ.

Awọn ohun elo ti o ṣe imudojuiwọn awọn tabili wọn taara - ni igbagbogbo awọn ohun elo OLTP (gidi-akoko idunadura processing) - yoo lo disk ati ilana awọn ibeere pupọ diẹ sii daradara. Awọn aaye disk diẹ sii, aaye diẹ sii aaye data ni lati dagba laisi igbegasoke awọn amayederun.

Diẹ ninu awọn ilana igbesoke nilo atunko awọn atọka igi B lati lo anfani awọn anfani wọnyi (fun apẹẹrẹ. pg_igbegasoke kii yoo tun awọn atọka ṣe laifọwọyi). Ni awọn ẹya ti tẹlẹ ti PostgreSQL, atunṣe awọn atọka nla lori awọn tabili yorisi idinku akoko pataki nitori awọn ayipada ko le ṣee ṣe ni akoko yii. Ṣugbọn PostgreSQL 12 ni ẹya miiran ti o dara: ni bayi o le tun awọn atọka ṣe ni afiwe pẹlu aṣẹ naa. REINDEX ni igbakannalati patapata yago fun downtime.

Awọn ilọsiwaju miiran wa si awọn amayederun atọka ni PostgreSQL 12. Ohun miiran nibiti idan kan wa - kọ-iwaju log, aka WAL (kọ-iwaju log). Akọsilẹ kikọ-iwaju ṣe igbasilẹ gbogbo iṣowo ni PostgreSQL ni ọran ikuna ati ẹda. Awọn ohun elo lo o fun pamosi ati ojuami-ni-akoko imularada. Nitoribẹẹ, iwe kikọ-iwaju ti kọ si disk, eyiti o le ni ipa lori iṣẹ ṣiṣe.

PostgreSQL 12 ti dinku oke ti awọn igbasilẹ WAL ti o ṣẹda nipasẹ awọn atọka GiST, GIN, ati SP-GiST lakoko ikole atọka. Eyi n pese ọpọlọpọ awọn anfani ojulowo: Awọn igbasilẹ WAL gba aaye disk ti o dinku, ati pe a tun ṣe data ni iyara, gẹgẹbi lakoko imularada ajalu tabi imularada akoko-akoko. Ti o ba lo iru awọn atọka ninu awọn ohun elo rẹ (fun apẹẹrẹ, awọn ohun elo geospatial ti o da lori PostGIS lo itọka GiST pupọ), eyi jẹ ẹya miiran ti yoo mu iriri naa pọ si ni pataki laisi igbiyanju eyikeyi ni apakan rẹ.

Pipin - tobi, dara julọ, yiyara

PostgreSQL 10 ṣe afihan ipin ipin. Ni PostgreSQL 11 o ti rọrun pupọ lati lo. Ni PostgreSQL 12 o le yi iwọn ti awọn apakan pada.

Ni PostgreSQL 12, iṣẹ ṣiṣe ti eto ipin ti di pupọ dara julọ, paapaa ti ẹgbẹẹgbẹrun awọn ipin ba wa ninu tabili. Fun apẹẹrẹ, ti ibeere kan ba kan awọn ipin diẹ ninu tabili pẹlu ẹgbẹẹgbẹrun wọn, yoo ṣiṣẹ ni iyara pupọ. Iṣẹ ṣiṣe kii ṣe ilọsiwaju fun iru awọn ibeere wọnyi. Iwọ yoo tun ṣe akiyesi bi awọn iṣẹ INSERT yiyara ṣe wa lori awọn tabili pẹlu awọn ipin pupọ.

Gbigbasilẹ data nipa lilo ẸKỌ - Nipa ọna, eyi jẹ ọna nla olopobobo data download ati ki o nibi jẹ ẹya apẹẹrẹ gbigba JSON - awọn tabili ti a pin ni PostgreSQL 12 tun ti di daradara siwaju sii. Pẹlu COPY ohun gbogbo ti yara tẹlẹ, ṣugbọn ni PostgreSQL 12 o fo patapata.

Ṣeun si awọn anfani wọnyi, PostgreSQL gba ọ laaye lati ṣafipamọ awọn eto data ti o tobi paapaa ati jẹ ki wọn rọrun lati gba pada. Ati pe ko si igbiyanju ni apakan rẹ. Ti ohun elo naa ba ni ọpọlọpọ awọn ipin, gẹgẹbi awọn data jara akoko gbigbasilẹ, igbesoke ti o rọrun yoo mu iṣẹ rẹ pọ si ni pataki.

Lakoko ti eyi kii ṣe ilọsiwaju “igbesoke ati igbadun” ni deede, PostgreSQL 12 gba ọ laaye lati ṣẹda awọn bọtini ajeji ti o tọka si awọn tabili ipin, ṣiṣe ipin ni idunnu lati ṣiṣẹ pẹlu.

PẸLU awọn ibeere kan dara pupọ

Nigbawo a patch kan fun itumọ-ni wọpọ tabili ikosile (aka CTE, aka FI awọn ibeere), Emi ko le duro lati kọ nkan kan nipa bawo ni awọn olupilẹṣẹ ohun elo ṣe dun pẹlu PostgreSQL. Eyi jẹ ọkan ninu awọn ẹya ti yoo yara ohun elo naa. Ayafi, dajudaju, o lo CTE.

Nigbagbogbo Mo rii pe awọn tuntun si SQL nifẹ lati lo awọn CTE; ti o ba kọ wọn ni ọna kan, o kan lara gaan bi o ṣe nkọ eto pataki kan. Tikalararẹ, Mo nifẹ lati tunkọ awọn ibeere wọnyi lati wa ni ayika laisi CTE ati mu iṣelọpọ pọ si. Bayi ohun gbogbo yatọ.

PostgreSQL 12 gba ọ laaye lati laini iru CTE kan pato laisi awọn ipa ẹgbẹ (SELECT), eyi ti o ti lo ni ẹẹkan sunmọ opin ibeere naa. Ti MO ba tọju awọn ibeere CTE ti Mo tun kọ, pupọ julọ wọn yoo ṣubu sinu ẹka yii. Eyi ṣe iranlọwọ fun awọn olupilẹṣẹ kọ koodu mimọ ti o tun nṣiṣẹ ni iyara.

Pẹlupẹlu, PostgreSQL 12 ṣe imudara ipaniyan SQL funrararẹ, laisi o ni lati ṣe ohunkohun. Ati pe botilẹjẹpe Emi kii yoo nilo lati mu iru awọn ibeere bẹ dara ni bayi, o jẹ nla pe PostgreSQL tẹsiwaju lati ṣiṣẹ lori iṣapeye ibeere.

Just-in-Time (JIT) – bayi aiyipada

Lori awọn ọna ṣiṣe PostgreSQL 12 pẹlu atilẹyin LLVM Akopọ JIT ti ṣiṣẹ nipasẹ aiyipada. Ni akọkọ, o gba atilẹyin JIT fun diẹ ninu awọn iṣẹ inu, ati keji, awọn ibeere pẹlu awọn ikosile (apẹẹrẹ ti o rọrun julọ ni x + y) ni awọn atokọ ti o yan (eyiti o ni lẹhin ti o yan), awọn akojọpọ, awọn ọrọ pẹlu awọn gbolohun WHERE ati awọn miiran le lo JIT lati mu ilọsiwaju ṣiṣẹ.

Niwọn igba ti JIT ti ṣiṣẹ nipasẹ aiyipada ni PostgreSQL 12, iṣẹ yoo dara si funrararẹ, ṣugbọn Mo ṣeduro idanwo ohun elo ni PostgreSQL 11, eyiti o ṣafihan JIT, lati wiwọn iṣẹ ṣiṣe ibeere ati rii boya o nilo lati tune ohunkohun.

Kini nipa iyoku awọn ẹya tuntun ni PostgreSQL 12?

PostgreSQL 12 ni pupọ ti awọn ẹya tuntun ti o tutu, lati agbara lati ṣe ayẹwo data JSON nipa lilo awọn ikosile ipa ọna SQL/JSON boṣewa si ijẹrisi ifosiwewe pupọ pẹlu paramita kan clientcert=verify-full, ṣẹda ọwọn ati Elo siwaju sii. To fun lọtọ post.

Bii PostgreSQL 10, PostgreSQL 12 yoo mu ilọsiwaju gbogbogbo ṣiṣẹ lẹsẹkẹsẹ lẹhin igbesoke naa. Iwọ, dajudaju, le ni ọna ti ara rẹ - ṣe idanwo ohun elo labẹ awọn ipo ti o jọra lori eto iṣelọpọ ṣaaju ṣiṣe awọn ilọsiwaju, bi mo ti ṣe pẹlu PostgreSQL 10. Paapa ti PostgreSQL 12 ti jẹ iduroṣinṣin diẹ sii ju Mo nireti lọ, maṣe ṣe ọlẹ ni idanwo. awọn ohun elo daradara, ṣaaju idasilẹ wọn sinu iṣelọpọ.

orisun: www.habr.com

Fi ọrọìwòye kun