Pada pendapat saya, tidak seperti keluaran sebelumnya, PostgreSQL 12 tidak mengandungi satu atau dua ciri revolusioner (seperti pembahagian atau persamaan pertanyaan). Saya pernah bergurau bahawa ciri utama PostgreSQL 12 adalah kestabilan yang lebih besar. Bukankah itu yang anda perlukan apabila anda mengurus data kritikal perniagaan anda?
Tetapi PostgreSQL 12 tidak berhenti di situ: dengan ciri dan penambahbaikan baharu, aplikasi akan berprestasi lebih baik, dan apa yang anda perlu lakukan ialah menaik taraf!
(Nah, mungkin membina semula indeks, tetapi dalam keluaran ini ia tidak semenakutkan seperti biasa.)
Adalah bagus untuk menaik taraf PostgreSQL dan segera menikmati peningkatan yang ketara tanpa kekecohan yang tidak perlu. Beberapa tahun yang lalu, saya menyemak naik taraf daripada PostgreSQL 9.4 kepada PostgreSQL 10 dan melihat bagaimana aplikasi dipercepatkan terima kasih kepada persamaan pertanyaan yang lebih baik dalam PostgreSQL 10. Dan, yang paling penting, hampir tiada apa yang diperlukan daripada saya (hanya tetapkan parameter konfigurasi max_parallel_workers
).
Setuju, adalah mudah apabila aplikasi berfungsi dengan lebih baik serta-merta selepas naik taraf. Dan kami berusaha keras untuk menggembirakan pengguna, kerana PostgreSQL mempunyai lebih ramai pengguna.
Jadi bagaimanakah peningkatan mudah kepada PostgreSQL 12 boleh menggembirakan anda? Saya akan memberitahu anda sekarang.
Penambahbaikan pengindeksan utama
Tanpa pengindeksan, pangkalan data tidak akan pergi jauh. Bagaimana lagi anda boleh mencari maklumat dengan cepat? Sistem pengindeksan asas PostgreSQL dipanggil
Kami hanya menggunakan operator CREATE INDEX ON some_table (some_column)
, dan PostgreSQL melakukan banyak kerja untuk memastikan indeks dikemas kini semasa kami sentiasa memasukkan, mengemas kini dan memadam nilai. Semuanya berfungsi sendiri, seolah-olah dengan sihir.
Tetapi indeks PostgreSQL mempunyai satu masalah - mereka
PostgreSQL 12 sangat meningkatkan prestasi indeks B-tree, dan percubaan dengan penanda aras seperti TPC-C telah menunjukkan bahawa secara purata 40% kurang ruang kini digunakan. Kini kami menghabiskan lebih sedikit masa bukan sahaja untuk mengekalkan indeks B-tree (iaitu, pada operasi tulis), tetapi juga untuk mendapatkan semula data, kerana indeksnya jauh lebih kecil.
Aplikasi yang aktif mengemas kini jadual mereka - biasanya aplikasi OLTP (
Sesetengah strategi naik taraf memerlukan membina semula indeks B-tree untuk memanfaatkan faedah ini (mis.
Terdapat penambahbaikan lain pada infrastruktur pengindeksan dalam PostgreSQL 12. Satu lagi perkara di mana terdapat sihir -
PostgreSQL 12 telah mengurangkan overhed rekod WAL yang dicipta oleh indeks GiST, GIN dan SP-GIST semasa pembinaan indeks. Ini memberikan beberapa faedah ketara: Rekod WAL menggunakan lebih sedikit ruang cakera dan data dimainkan semula dengan lebih pantas, seperti semasa pemulihan bencana atau pemulihan titik dalam masa. Jika anda menggunakan indeks sedemikian dalam aplikasi anda (contohnya, aplikasi geospatial berasaskan PostGIS banyak menggunakan indeks GiST), ini adalah satu lagi ciri yang akan meningkatkan pengalaman dengan ketara tanpa sebarang usaha daripada pihak anda.
Pembahagian - lebih besar, lebih baik, lebih cepat
PostgreSQL 10 diperkenalkan
Dalam PostgreSQL 12, prestasi sistem pembahagian telah menjadi lebih baik dengan ketara, terutamanya jika terdapat beribu-ribu partition dalam jadual. Sebagai contoh, jika pertanyaan hanya mempengaruhi beberapa partition dalam jadual dengan beribu-ribu daripadanya, ia akan dilaksanakan dengan lebih pantas. Prestasi bukan sahaja dipertingkatkan untuk jenis pertanyaan ini. Anda juga akan melihat betapa cepatnya operasi INSERT pada jadual dengan berbilang partition.
Merekod data menggunakan
Terima kasih kepada kelebihan ini, PostgreSQL membolehkan anda menyimpan set data yang lebih besar dan menjadikannya lebih mudah untuk mendapatkan semula. Dan tiada usaha di pihak anda. Jika aplikasi mempunyai banyak partition, seperti merakam data siri masa, peningkatan mudah akan meningkatkan prestasinya dengan ketara.
Walaupun ini bukan penambahbaikan "naik taraf dan nikmati", PostgreSQL 12 membenarkan anda mencipta kunci asing yang merujuk kepada jadual pembahagian, menjadikan pembahagian senang digunakan.
DENGAN pertanyaan menjadi lebih baik
Apabila
Saya sering mendapati bahawa pemula SQL suka menggunakan CTE; jika anda menulisnya dengan cara tertentu, ia benar-benar terasa seperti anda menulis program yang penting. Secara peribadi, saya suka menulis semula pertanyaan ini untuk mengetahuinya tanpa CTE dan meningkatkan produktiviti. Sekarang semuanya berbeza.
PostgreSQL 12 membolehkan anda menyelaraskan jenis CTE tertentu tanpa kesan sampingan (SELECT
), yang digunakan sekali sahaja menjelang akhir permintaan. Jika saya menjejaki pertanyaan CTE yang saya tulis semula, kebanyakannya akan termasuk dalam kategori ini. Ini membantu pembangun menulis kod yang jelas yang kini juga berjalan dengan cepat.
Selain itu, PostgreSQL 12 mengoptimumkan pelaksanaan SQL itu sendiri, tanpa anda perlu melakukan apa-apa. Dan walaupun saya mungkin tidak perlu mengoptimumkan pertanyaan sedemikian sekarang, sangat bagus bahawa PostgreSQL terus bekerja pada pengoptimuman pertanyaan.
Just-in-Time (JIT) - kini lalai
Pada sistem PostgreSQL 12 dengan sokongan
Memandangkan JIT didayakan secara lalai dalam PostgreSQL 12, prestasi akan bertambah baik dengan sendirinya, tetapi saya mengesyorkan menguji aplikasi dalam PostgreSQL 11, yang memperkenalkan JIT, untuk mengukur prestasi pertanyaan dan melihat jika anda perlu menala apa-apa.
Bagaimana pula dengan ciri baharu yang lain dalam PostgreSQL 12?
PostgreSQL 12 mempunyai satu tan ciri baharu yang hebat, daripada keupayaan untuk memeriksa data JSON menggunakan ungkapan laluan SQL/JSON standard kepada pengesahan berbilang faktor dengan parameter clientcert=verify-full
, membuat lajur dan banyak lagi. Cukup untuk jawatan berasingan.
Seperti PostgreSQL 10, PostgreSQL 12 akan meningkatkan prestasi keseluruhan serta-merta selepas naik taraf. Anda, sudah tentu, boleh mempunyai laluan anda sendiri - menguji aplikasi dalam keadaan yang sama pada sistem pengeluaran sebelum mendayakan penambahbaikan, seperti yang saya lakukan dengan PostgreSQL 10. Walaupun PostgreSQL 12 sudah lebih stabil daripada yang saya jangkakan, jangan malas dalam menguji aplikasi dengan teliti, sebelum mengeluarkannya ke dalam pengeluaran.
Sumber: www.habr.com