PostgreSQL 11: Evolusi partisi dari Postgres 9.6 ke Postgres 11

Jumat Agung semuanya! Semakin sedikit waktu yang tersisa sampai peluncuran kursus "DBMS Relasional" , jadi hari ini kami membagikan terjemahan materi bermanfaat lainnya pada topik.



Selama proses pengembangan PostgreSQL 11 , pekerjaan yang mengesankan telah dilakukan untuk meningkatkan partisi tabel. Tabel partisi adalah fungsi yang sudah ada di PostgreSQL untuk beberapa waktu, tetapi, bisa dikatakan, sebenarnya tidak ada sampai versi 10, di mana itu menjadi fungsi yang sangat berguna. Kami sebelumnya menyatakan bahwa tabel inheritance adalah implementasi partisi kami, dan itu benar. Hanya metode ini yang memaksa Anda untuk melakukan sebagian besar pekerjaan secara manual. Misalnya, jika Anda ingin tuple dimasukkan ke dalam bagian selama INSERT, Anda harus mengonfigurasi pemicu untuk melakukan ini untuk Anda. Mempartisi menggunakan pewarisan sangat lambat dan sulit untuk mengembangkan fungsi tambahan di atasnya.

Dalam PostgreSQL 10, kami melihat kelahiran "partisi deklaratif" - fitur yang dirancang untuk memecahkan banyak masalah yang tidak dapat dipecahkan saat menggunakan metode lama dengan pewarisan. Hal ini menyebabkan munculnya alat yang jauh lebih kuat yang memungkinkan kita untuk membagi data secara horizontal!

Perbandingan Fitur

PostgreSQL 11 memperkenalkan serangkaian fitur baru yang mengesankan yang membantu meningkatkan kinerja dan membuat tabel yang dipartisi lebih transparan untuk aplikasi.




1. Menggunakan pengecualian yang membatasi
2. Hanya menambahkan node
3. Hanya untuk tabel yang dipartisi yang merujuk ke tabel yang tidak dipartisi
4. Indeks harus berisi semua kolom kunci dari suatu bagian
5. Pembatasan pada bagian di kedua sisi harus cocok

Performa

Di sini kita juga punya kabar baik! Metode baru untuk menghapus bagian telah ditambahkan. Algoritma baru ini dapat menentukan bagian yang sesuai dengan melihat kondisi permintaan WHERE . Algoritma sebelumnya, pada gilirannya, memeriksa setiap bagian untuk menentukan apakah itu bisa cocok dengan WHERE . Ini mengarah ke peningkatan tambahan dalam waktu perencanaan karena jumlah bagian meningkat.

Dalam 9.6, dengan mempartisi berdasarkan warisan, rute tupel dalam suatu bagian biasanya dilakukan dengan menulis fungsi pemicu yang berisi serangkaian pernyataan IF untuk memasukkan tupel ke bagian yang benar. Fungsi-fungsi ini bisa sangat lambat dijalankan. Dengan penambahan partisi deklaratif di versi 10, ini menjadi lebih cepat.

Menggunakan tabel dipartisi dengan 100 bagian, kita dapat memperkirakan kinerja memuat 10 juta baris ke dalam tabel 1 kolom BIGINT dan 5 kolom INT.



Kinerja kueri pada tabel ini untuk mencari satu catatan yang diindeks dan menjalankan DML untuk memanipulasi satu catatan (hanya menggunakan 1 prosesor):



Di sini kita melihat bahwa kinerja setiap operasi meningkat secara signifikan setelah PG 9.6. Kueri SELECT terlihat jauh lebih baik, terutama yang dapat mengecualikan beberapa bagian selama penjadwalan kueri. Ini berarti bahwa penjadwal dapat melewati sebagian besar pekerjaan yang seharusnya ia lakukan sebelumnya. Misalnya, jalur untuk bagian yang tidak perlu tidak lagi dibangun.

Kesimpulan

Tabel partisi mulai menjadi fitur yang sangat kuat di PostgreSQL. Ini memungkinkan Anda untuk secara cepat menampilkan data secara online dan menerjemahkannya secara offline, tanpa menunggu penyelesaian operasi DML besar yang lambat . Ini juga berarti bahwa data terkait dapat disimpan bersama, artinya data yang diperlukan dapat diakses dengan lebih efisien. Perbaikan yang dibuat dalam versi ini tidak akan mungkin tanpa pengembang, pengulas, dan pengendara yang bekerja tanpa lelah pada semua fitur ini.
Terima kasih semuanya! PostgreSQL 11 terlihat luar biasa!

Ini adalah artikel yang singkat namun menarik. Bagikan komentar Anda, dan jangan lupa mendaftar untuk hari terbuka , di mana program kursus akan dijelaskan secara rinci.

Source: https://habr.com/ru/post/id452280/


All Articles