Ningkatkeun keur puguh: kumaha PostgreSQL 12 ngaronjatkeun kinerja

Ningkatkeun keur puguh: kumaha PostgreSQL 12 ngaronjatkeun kinerja

PostgreSQL 12, versi panganyarna tina "database relational open source pangalusna di dunya," bakal kaluar dina sababaraha minggu (upami sadayana mana numutkeun rencana). Ieu nuturkeun jadwal biasa ngaleupaskeun vérsi énggal kalayan seueur fitur énggal sataun sakali, sareng terus terang, éta pikaresepeun. Éta sababna kuring janten anggota aktip dina komunitas PostgreSQL.

Dina pamanggih kuring, teu kawas release saméméhna, PostgreSQL 12 henteu ngandung hiji atawa dua fitur revolusioner (kawas partitioning atanapi query parallelism). Kuring sakali guyonan yén fitur utama PostgreSQL 12 nyaéta stabilitas anu langkung ageung. Henteu éta anu anjeun peryogikeun nalika anjeun ngatur data kritis bisnis anjeun?

Tapi PostgreSQL 12 henteu eureun di dinya: kalayan fitur anyar sareng perbaikan, aplikasi bakal langkung saé, sareng sadaya anu anjeun kedah laksanakeun nyaéta ningkatkeun!

(Muhun, panginten tiasa ngawangun deui indéks, tapi dina sékrési ieu henteu pikasieuneun sapertos biasa.)

Éta bakal saé pikeun ningkatkeun PostgreSQL sareng langsung ngaraosan perbaikan anu signifikan tanpa riweuh anu teu perlu. Sababaraha taun ka pengker, abdi reviewed pamutahiran ti PostgreSQL 9.4 mun PostgreSQL 10 sarta nempo kumaha aplikasi sped up berkat paralelisme query ningkat dina PostgreSQL 10. Jeung, paling importantly, ampir euweuh anu diperlukeun ti kuring (ngan nyetel parameter konfigurasi. max_parallel_workers).

Satuju, éta merenah lamun aplikasi dianggo hadé langsung saatos pamutahiran. Sareng urang nyobian pisan pikeun nyenangkeun pangguna, sabab PostgreSQL ngagaduhan seueur deui.

Janten kumaha pamutahiran saderhana ka PostgreSQL 12 tiasa ngajantenkeun anjeun bagja? Abdi badé nyarios ayeuna.

perbaikan indexing utama

Tanpa indéks, pangkalan data moal jauh. Kumaha deui anjeun tiasa gancang mendakan inpormasi? Sistim indéks dasar PostgreSQL disebut B-tangkal. Jenis indéks ieu dioptimalkeun pikeun sistem panyimpen.

Urang ngan ngagunakeun operator CREATE INDEX ON some_table (some_column), sareng PostgreSQL ngalakukeun seueur padamelan pikeun ngajaga indéks énggal-énggal nalika urang terus-terusan nyelapkeun, ngapdet, sareng ngahapus nilai. Sagalana jalan sorangan, saolah-olah ku magic.

Tapi indéks PostgreSQL gaduh hiji masalah - aranjeunna anu inflated sarta nyandak up spasi disk tambahan sarta ngurangan kinerja dimeunangkeun data sarta ngamutahirkeun. Ku "kembung" Maksad abdi henteu efektif ngajaga struktur indéks. Ieu tiasa - atanapi henteu - aya hubunganana sareng tuple sampah anu dipiceun vakum (Hatur nuhun ka Peter Gaghan pikeun inpormasi)Peter Geoghegan)). Indéks bloat hususna katingali dina beban kerja dimana indéksna aktip robih.

PostgreSQL 12 greatly ngaronjatkeun kinerja indexes B-tangkal, sarta percobaan kalawan tolok ukur kawas TPC-C geus ditémbongkeun yén rata-rata 40% kirang spasi ayeuna dipaké. Ayeuna urang nyéépkeun waktos sakedik henteu ngan ukur pikeun ngajaga indéks B-tangkal (nyaéta, dina operasi nulis), tapi ogé pikeun nyandak data, sabab indéksna langkung alit.

Aplikasi anu aktip ngamutahirkeun tabelna - biasana aplikasi OLTP (real-time processing urus) - bakal nganggo disk sareng ngolah pamundut langkung éfisién. Langkung seueur rohangan disk, langkung seueur rohangan database kedah tumbuh tanpa ningkatkeun infrastruktur.

Sababaraha strategi pamutahiran merlukeun ngawangun deui indéks B-tangkal pikeun ngamangpaatkeun kauntungan ieu (misalna. pg_upgrade moal ngawangun deui indéks sacara otomatis). Dina vérsi PostgreSQL saacanna, ngawangun deui indéks ageung dina tabel nyababkeun downtime anu signifikan sabab parobihan henteu tiasa dilakukeun samentawis. Tapi PostgreSQL 12 ngagaduhan fitur anu saé: ayeuna anjeun tiasa ngawangun deui indéks paralel sareng paréntah. REINDEX SARENGpikeun sakabéhna nyingkahan downtime.

Aya perbaikan séjén pikeun infrastruktur indexing di PostgreSQL 12. Lain hal dimana aya sihir - nulis-payun log, alias WAL (tulis-payun log). Log nulis-payun ngarékam unggal transaksi dina PostgreSQL bisi gagal sareng réplikasi. Aplikasi ngagunakeun éta pikeun arsip sareng titik-di-waktos recovery. Tangtosna, log nyerat payun ditulis kana disk, anu tiasa mangaruhan kinerja.

PostgreSQL 12 parantos ngirangan overhead rékaman WAL anu diciptakeun ku indéks GiST, GIN, sareng SP-GIST salami konstruksi indéks. Ieu nyadiakeun sababaraha mangpaat nyata: rékaman WAL nyokot spasi disk kirang, sarta data diputer deui gancang, kayaning mangsa recovery musibah atawa recovery point-in-time. Upami anjeun nganggo indéks sapertos kitu dina aplikasi anjeun (contona, aplikasi geospasial basis PostGIS nganggo indéks GiST pisan), ieu mangrupikeun fitur sanés anu bakal ningkatkeun pangalaman sacara signifikan tanpa usaha naon waé.

Partitioning - leuwih badag, hadé, gancang

PostgreSQL 10 diwanohkeun partisi déklaratif. Dina PostgreSQL 11 parantos janten langkung gampang dianggo. Dina PostgreSQL 12 anjeun tiasa ngarobih skala bagian.

Dina PostgreSQL 12, kinerja sistem partisi parantos langkung saé, khususna upami aya rébuan partisi dina tabél. Contona, upami pamundut mangaruhan ukur sababaraha partisi dina tabel kalawan rébuan di antarana, éta bakal ngajalankeun leuwih gancang. Kinerja henteu ngan ukur ningkat pikeun jinis patarosan ieu. Anjeun ogé bakal perhatikeun kumaha gancangna operasi INSERT dina tabel sareng sababaraha partisi.

Ngarékam data ngagunakeun NYALIN - Ku jalan kitu, ieu cara hébat download data bulk sareng ieu conto narima JSON - tabel partitioned di PostgreSQL 12 ogé geus jadi leuwih efisien. Kalayan COPY sadayana parantos gancang, tapi dina PostgreSQL 12 leres pisan ngapung.

Hatur nuhun kana kaunggulan ieu, PostgreSQL ngamungkinkeun anjeun pikeun nyimpen set data anu langkung ageung sareng ngagampangkeun pikeun nyandak deui. Sareng henteu aya usaha pikeun anjeun. Upami aplikasina ngagaduhan seueur partisi, sapertos ngarékam data séri waktos, pamutahiran saderhana bakal ningkatkeun kinerjana.

Sanaos ieu sanés ngan ukur "ngaronjatkeun sareng nikmati" perbaikan, PostgreSQL 12 ngamungkinkeun anjeun nyiptakeun konci asing anu ngarujuk kana tabel anu dipisahkeun, ngajantenkeun partisi janten senang dianggo.

WITH queries ngan meunang pisan hadé

iraha patch a ieu dilarapkeun pikeun diwangun-di éksprési tabel umum (alias CTE, alias WITH queries), Abdi teu sabar nulis artikel ngeunaan kumaha senangna pamekar aplikasi sareng PostgreSQL. Ieu mangrupikeun salah sahiji fitur anu bakal nyepetkeun aplikasi. Kacuali, tangtosna, anjeun nganggo CTE.

Kuring mindeng manggihan yén newbies kana SQL resep ngagunakeun CTEs; lamun nulis aranjeunna cara nu tangtu, bener karasaeun kawas nu nuju nulis hiji program imperatif. Pribadi, abdi resep nulis ulang queries ieu meunang sabudeureun tanpa CTE sareng ningkatkeun produktivitas. Ayeuna sagalana geus béda.

PostgreSQL 12 ngidinan Anjeun pikeun inline tipe husus CTE tanpa efek samping (SELECT), nu dipaké ngan sakali deukeut tungtung pamundut. Upami kuring ngalacak patarosan CTE anu kuring rewrote, kalolobaanana bakal digolongkeun kana kategori ieu. Ieu ngabantosan pamekar nyerat kode anu jelas anu ayeuna ogé jalan gancang.

Sumawona, PostgreSQL 12 ngaoptimalkeun palaksanaan SQL sorangan, tanpa anjeun kedah ngalakukeun nanaon. Sareng sanaos kuring sigana henteu kedah ngaoptimalkeun patarosan sapertos ayeuna, éta saé yén PostgreSQL terus ngerjakeun optimasi pamundut.

Just-in-Time (JIT) - ayeuna standar

Dina sistem PostgreSQL 12 kalayan dukungan Régregna Kompilasi JIT diaktipkeun sacara standar. Anu mimiti, anjeun nampi dukungan JIT pikeun sababaraha operasi internal, jeung Bréh, queries kalawan éksprési (conto pangbasajanna nyaeta x + y) dina daptar pilih (anu gaduh sanggeus PILIH), aggregates, éksprési jeung WHERE klausa jeung nu lianna bisa ngagunakeun JIT pikeun ngaronjatkeun kinerja.

Kusabab JIT diaktipkeun sacara standar dina PostgreSQL 12, kinerja bakal ningkat sorangan, tapi kuring nyarankeun nguji aplikasi dina PostgreSQL 11, anu ngenalkeun JIT, pikeun ngukur kinerja query sareng ningali upami anjeun kedah nyetél nanaon.

Kumaha upami sesa fitur anyar dina PostgreSQL 12?

PostgreSQL 12 gaduh seueur fitur énggal, tina kamampuan pikeun nguji data JSON nganggo ekspresi jalur SQL / JSON standar pikeun auténtikasi multi-faktor sareng parameter. clientcert=verify-full, nyiptakeun kolom sareng seueur deui. Cukup pikeun pos misah.

Kawas PostgreSQL 10, PostgreSQL 12 bakal ningkatkeun kinerja sakabéh langsung saatos pamutahiran. Anjeun, tangtosna, tiasa gaduh cara sorangan - nguji aplikasi dina kaayaan anu sami dina sistem produksi sateuacan ngaktipkeun perbaikan, sapertos anu kuring lakukeun ku PostgreSQL 10. Sanaos PostgreSQL 12 parantos langkung stabil tibatan anu kuring ngarepkeun, ulah puguh dina nguji. aplikasi sacara saksama, sateuacan dileupaskeun kana produksi.

sumber: www.habr.com

Tambahkeun komentar