Nganyarke kanggo kesed: carane PostgreSQL 12 nambah kinerja

Nganyarke kanggo kesed: carane PostgreSQL 12 nambah kinerja

PostgreSQL 12, versi paling anyar saka "database relasional open source paling apik ing donya," bakal metu ing sawetara minggu (yen kabeh dadi miturut rencana). Iki ngetutake jadwal biasa kanggo ngeculake versi anyar kanthi akeh fitur anyar setaun, lan terus terang, pancen apik tenan. Mulane aku dadi anggota aktif ing komunitas PostgreSQL.

Miturut pendapatku, ora kaya rilis sadurunge, PostgreSQL 12 ora ngemot siji utawa rong fitur revolusioner (kaya partisi utawa paralelisme query). Aku tau guyon manawa fitur utama PostgreSQL 12 yaiku stabilitas sing luwih gedhe. Apa dudu sing sampeyan butuhake nalika sampeyan ngatur data kritis bisnis sampeyan?

Nanging PostgreSQL 12 ora mandheg ing kana: kanthi fitur lan dandan anyar, aplikasi bakal luwih apik, lan kabeh sing perlu dilakoni iku upgrade!

(Inggih, bisa uga mbangun maneh indeks, nanging ing rilis iki ora medeni kaya biasane.)

Iku bakal apik kanggo nganyarke PostgreSQL lan langsung seneng dandan sing signifikan tanpa repot sing ora perlu. Sawetara taun kepungkur, aku nliti upgrade saka PostgreSQL 9.4 nganti PostgreSQL 10 lan ndeleng kepiye aplikasi kasebut nyepetake amarga paralelisme query sing luwih apik ing PostgreSQL 10. Lan sing paling penting, meh ora ana sing dibutuhake saka aku (mung nyetel parameter konfigurasi. max_parallel_workers).

Setuju, luwih trep yen aplikasi bisa luwih apik sanalika sawise upgrade. Lan kita nyoba banget kanggo nyenengake pangguna, amarga PostgreSQL luwih akeh.

Dadi, kepiye upgrade prasaja menyang PostgreSQL 12 bisa nggawe sampeyan seneng? Aku bakal ngomong saiki.

Peningkatan indeksasi utama

Tanpa indeksasi, database ora bakal adoh. Kepiye carane sampeyan bisa nemokake informasi kanthi cepet? Sistem indeksasi dhasar PostgreSQL diarani B-wit. Jinis indeks iki dioptimalake kanggo sistem panyimpenan.

Kita mung nggunakake operator CREATE INDEX ON some_table (some_column), lan PostgreSQL nindakake akeh pakaryan supaya indeks tetep anyar nalika kita terus-terusan nglebokake, nganyari, lan mbusak nilai. Kabeh dianggo dhewe, kaya-kaya dening sihir.

Nanging indeks PostgreSQL duwe siji masalah - padha padha inflated lan njupuk ruang disk ekstra lan nyuda kinerja njupuk data lan nganyari. Kanthi "kembung" tegese ora efektif njaga struktur indeks. Iki bisa uga - utawa ora - ana hubungane karo tuple sampah sing dibuwang VACUUM (Thanks kanggo Peter Gaghan kanggo informasi kasebut)Peter Geoghegan)). Kembung indeks utamane katon ing beban kerja ing ngendi indeks kasebut aktif ganti.

PostgreSQL 12 ningkatake kinerja indeks B-tree, lan eksperimen karo benchmark kaya TPC-C nuduhake yen rata-rata 40% kurang spasi saiki digunakake. Saiki kita nglampahi wektu kurang ora mung kanggo njaga indeks B-wit (yaiku, ing operasi nulis), nanging uga kanggo njupuk data, amarga indeks luwih cilik.

Aplikasi sing aktif nganyari tabel - biasane aplikasi OLTP (pangolahan transaksi nyata-wektu) - bakal nggunakake panjalukan disk lan proses luwih efisien. Spasi disk luwih akeh, luwih akeh spasi database kudu tuwuh tanpa nganyarke infrastruktur.

Sawetara strategi upgrade mbutuhake mbangun maneh indeks B-tree kanggo njupuk kauntungan saka keuntungan kasebut (contone. pg_upgrade ora bakal mbangun maneh indeks kanthi otomatis). Ing versi PostgreSQL sadurunge, mbangun maneh indeks gedhe ing tabel nyebabake downtime sing signifikan amarga owah-owahan ora bisa ditindakake. Nanging PostgreSQL 12 duwe fitur liyane sing apik: saiki sampeyan bisa mbangun maneh indeks kanthi paralel karo perintah kasebut. REINDEX SAMPEYANkanggo rampung supaya downtime.

Ana dandan liyane kanggo infrastruktur indeksasi ing PostgreSQL 12. Liyane bab sing ana sawetara sihir - nulis-ahead log, alias WAL (log nulis-ahead). Log nulis ing ngarep nyathet saben transaksi ing PostgreSQL yen ana kegagalan lan replikasi. Aplikasi digunakake kanggo arsip lan pemulihan titik-ing-wektu. Mesthi, log nulis ing ngarep ditulis menyang disk, sing bisa nyebabake kinerja.

PostgreSQL 12 wis nyuda overhead cathetan WAL sing digawe dening indeks GiST, GIN, lan SP-GIST sajrone konstruksi indeks. Iki menehi sawetara keuntungan nyata: cathetan WAL njupuk spasi disk kurang, lan data diputer maneh luwih cepet, kayata nalika Recovery bilai utawa Recovery point-in-time. Yen sampeyan nggunakake indeks kasebut ing aplikasi sampeyan (contone, aplikasi geospasial basis PostGIS akeh nggunakake indeks GiST), iki minangka fitur liyane sing bakal nambah pengalaman kanthi nyata tanpa gaweyan apa wae.

Pemisahan - luwih gedhe, luwih apik, luwih cepet

PostgreSQL 10 dikenalakΓ© pemisahan deklaratif. Ing PostgreSQL 11 wis dadi luwih gampang digunakake. Ing PostgreSQL 12 sampeyan bisa ngganti ukuran bagean.

Ing PostgreSQL 12, kinerja sistem partisi dadi luwih apik, utamane yen ana ewonan partisi ing tabel. Contone, yen pitakon mung mengaruhi sawetara partisi ing tabel kanthi ewonan, bakal dieksekusi luwih cepet. Kinerja ora mung apik kanggo jinis pitakon kasebut. Sampeyan uga bakal sok dong mirsani carane luwih cepet operasi INSERT ing tabel karo macem-macem partisi.

Ngrekam data nggunakake KOPI - oalah, iki cara sing apik download data akeh lan iki contone nampa JSON - tabel partisi ing PostgreSQL 12 uga dadi luwih efisien. Kanthi COPY kabeh wis cepet, nanging ing PostgreSQL 12 pancen mabur.

Thanks kanggo kaluwihan kasebut, PostgreSQL ngidini sampeyan nyimpen set data sing luwih gedhe lan nggawe luwih gampang kanggo njupuk. Lan ora ana gaweyan kanggo sampeyan. Yen aplikasi duwe akeh partisi, kayata ngrekam data seri wektu, upgrade sing prasaja bakal nambah kinerja kanthi signifikan.

Nalika iki ora persis "nganyarke lan seneng" dandan, PostgreSQL 12 ngidini sampeyan nggawe tombol manca sing referensi tabel partisi, nggawe partisi seneng digarap.

WITH pitakon mung dadi luwih apik

Nalika tembelan ditrapake kanggo ekspresi tabel umum sing dibangun (alias CTE, alias WITH pitakon), aku ora sabar ngenteni nulis artikel babagan carane seneng pangembang aplikasi karo PostgreSQL padha. Iki minangka salah sawijining fitur sing bakal nyepetake aplikasi kasebut. Kajaba, mesthi, sampeyan nggunakake CTE.

Aku kerep nemokake yen pemula ing SQL seneng nggunakake CTE; yen sampeyan nulis kanthi cara tartamtu, pancen kaya sampeyan nulis program sing penting. Secara pribadi, aku seneng nulis ulang pitakon kasebut kanggo ngubengi tanpa CTE lan nambah produktivitas. Saiki kabeh wis beda.

PostgreSQL 12 ngijini sampeyan kanggo inline jinis tartamtu saka CTE tanpa efek sisih (SELECT), sing mung digunakake sapisan ing pungkasan panjalukan. Yen aku nglacak pitakon CTE sing daktulis maneh, akeh sing bakal mlebu ing kategori iki. Iki mbantu pangembang nulis kode sing jelas sing saiki uga mlaku kanthi cepet.

Kajaba iku, PostgreSQL 12 ngoptimalake eksekusi SQL dhewe, tanpa sampeyan kudu nindakake apa-apa. Lan sanajan aku mbokmenawa ora perlu ngoptimalake pitakon kaya saiki, apik banget yen PostgreSQL terus ngupayakake optimasi pitakon.

Just-in-Time (JIT) - saiki standar

Ing sistem PostgreSQL 12 kanthi dhukungan LLVM Kompilasi JIT diaktifake kanthi gawan. Kaping pisanan, sampeyan entuk dhukungan JIT kanggo sawetara operasi internal, lan kapindho, pitakon karo ekspresi (conto paling gampang yaiku x + y) ing dhaptar pilih (sing sampeyan duwe sawise PILIH), agregat, ekspresi karo klausa WHERE lan liya-liyane bisa nggunakake JIT kanggo nambah kinerja.

Wiwit JIT diaktifake kanthi standar ing PostgreSQL 12, kinerja bakal nambah dhewe, nanging aku nyaranake nyoba aplikasi kasebut ing PostgreSQL 11, sing ngenalake JIT, kanggo ngukur kinerja pitakon lan ndeleng apa sampeyan kudu nyetel apa wae.

Kepiye babagan fitur anyar liyane ing PostgreSQL 12?

PostgreSQL 12 nduweni akeh fitur anyar sing apik, saka kemampuan kanggo njelajah data JSON nggunakake ekspresi rute SQL/JSON standar nganti otentikasi multi-faktor kanthi parameter. clientcert=verify-full, digawe kolom lan akeh liyane. Cukup kanggo kirim kapisah.

Kaya PostgreSQL 10, PostgreSQL 12 bakal nambah kinerja sakabèhé sanalika sawise upgrade. Sampeyan, mesthi, bisa duwe dalan dhewe - nyoba aplikasi ing kahanan sing padha ing sistem produksi sadurunge mbisakake dandan, kaya aku karo PostgreSQL 10. Malah yen PostgreSQL 12 wis luwih stabil saka aku samesthine, aja kesed ing testing aplikasi sak tenane, sadurunge ngeculake menyang produksi.

Source: www.habr.com

Add a comment