Topik ini memberikan gambaran umum tentang fitur dan manfaat tabel terpartisi di PolarDB for PostgreSQL (Kompatibel dengan Oracle).
Pengenalan
Dengan mempartisi tabel di PolarDB for PostgreSQL (Kompatibel dengan Oracle), Anda secara fisik memisahkan tabel atau indeks menjadi bagian-bagian yang lebih kecil, disebut partisi, untuk kemudahan pengelolaan. Setiap partisi adalah objek mandiri dengan nama dan properti penyimpanan sendiri. Administrator database dapat mengelola partisi secara kolektif atau terpisah, memberikan fleksibilitas lebih dalam pekerjaan mereka. Namun, aplikasi tidak menyadari pemartisian tabel. Pernyataan kueri dan perintah DML yang ada tidak perlu dimodifikasi.
Partisi dari tabel terpartisi memiliki properti logis yang sama, seperti nama kolom, tipe data, dan batasan, tetapi dapat memiliki properti fisik berbeda, seperti kompresi, konfigurasi penyimpanan fisik, dan tablespace.
Pemartisian memberikan manfaat bagi banyak jenis aplikasi, terutama yang melibatkan volume data besar. Untuk database OLTP, pemartisian meningkatkan kemampuan pengelolaan dan ketersediaan, sedangkan untuk database OLAP, manfaat utamanya terletak pada performa dan kemampuan pengelolaan.
Skema
Mempartisi tabel ketika ukurannya terlalu besar, seperti ketika ruang tabel melebihi memori fisik server database. Ini dapat meningkatkan performa database. Sebagai contoh, Anda mungkin ingin mempartisi tabel jika ukurannya lebih dari 2 GB.
Mempartisi tabel yang menyimpan data historis dan diharapkan akan menerima data baru. Sebagai contoh, tabel besar digunakan untuk menyimpan data selama satu tahun. Anda dapat menyimpan data bulan terbaru di partisi terpisah yang dapat diperbarui, dan data bulan-bulan sebelumnya di partisi lain yang hanya bisa dibaca.
Manfaat
Performa Lebih Tinggi
Pemartisian dapat secara signifikan meningkatkan performa kueri, terutama ketika baris yang paling sering diakses terbatas pada satu atau beberapa partisi. Pemartisian menggantikan level atas dari pohon indeks. Ketika kueri melibatkan satu atau beberapa partisi tertentu, sistem database dapat melakukan pemindaian berurutan hanya pada partisi tersebut alih-alih bergantung pada indeks. Ini meningkatkan performa karena sistem memproses chunk data yang berdekatan daripada catatan yang tersebar di seluruh tabel.
Pengelolaan Lebih Mudah
Sebagai objek mandiri, partisi dapat dikelola secara individual atau kolektif. Karena operasi DDL dapat dilakukan pada partisi, selain pada seluruh tabel atau indeks, Anda dapat menggunakan pemartisian untuk memecah tugas-tugas intensif sumber daya, seperti pembuatan ulang indeks atau tabel. Partisi tunggal dapat dipindahkan satu per satu. Oleh karena itu, ketika masalah terjadi, hanya partisi yang relevan yang perlu dipindahkan, bukan seluruh tabel. Selain itu, Anda dapat melakukan operasi batch pada catatan data dalam unit partisi. Sebagai contoh, ketika Anda ingin menghapus data dari tabel, Anda hanya perlu menggunakan DROP TABLE untuk menghapus partisi yang relevan atau menggunakan ALTER TABLE DETACH PARTITION untuk melepaskan partisi dari tabel induk. Operasi VACUUM tidak diperlukan untuk mereklaim ruang penyimpanan setelah operasi ini, yang merupakan keuntungan lain dibandingkan penghapusan massal.
Pengurangan Persaingan Sumber Daya
Dalam beberapa database OLTP, pemartisian dapat mengurangi persaingan sumber daya, seperti ketika pernyataan DML dieksekusi pada beberapa partisi.
Ketersediaan Lebih Tinggi
Ketika sebuah partisi menjadi tidak tersedia, sisa dari tabel terpartisi masih dapat diakses. Pengoptimal kueri secara otomatis menghapus partisi yang tidak tersedia dari rencana kueri untuk menghindari dampak pada kueri.
Biaya Penyimpanan Lebih Rendah
Partisi yang jarang diakses dapat didump ke medium penyimpanan yang lebih lambat dan lebih murah untuk menghemat biaya.
Perhatikan bahwa hanya tabel yang sangat besar yang mendapatkan manfaat dari pemartisian. Kami menyarankan Anda untuk mempartisi tabel ketika ukurannya mencapai ukuran memori fisik server database Anda.
Cara kerjanya
Pemartisian memperkenalkan kompleksitas pada struktur, tetapi ini transparan bagi pengguna. Bagian ini menjelaskan karakteristik dan mekanisme pemartisian. Memahami ini dapat membantu Anda menggunakan tabel terpartisi secara efektif.
Contoh 1
CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
) PARTITION BY RANGE (logdate);
CREATE TABLE measurement_y2006m02 PARTITION OF measurement
FOR VALUES FROM ('2006-02-01') TO ('2006-03-01');
CREATE TABLE measurement_y2006m03 PARTITION OF measurement
FOR VALUES FROM ('2006-03-01') TO ('2006-04-01');
...
CREATE TABLE measurement_y2007m11 PARTITION OF measurement
FOR VALUES FROM ('2007-11-01') TO ('2007-12-01');
CREATE TABLE measurement_y2007m12 PARTITION OF measurement
FOR VALUES FROM ('2007-12-01') TO ('2008-01-01')
TABLESPACE fasttablespace;
CREATE TABLE measurement_y2008m01 PARTITION OF measurement
FOR VALUES FROM ('2008-01-01') TO ('2008-02-01')
WITH (parallel_workers = 4)
TABLESPACE fasttablespace;Kunci partisi
Kunci partisi adalah kolom tunggal atau kombinasi dari beberapa kolom. Ini digunakan untuk menentukan partisi tempat catatan data milik. Untuk tabel terpartisi, setiap baris perlu ditugaskan secara eksplisit ke satu partisi. PolarDB for PostgreSQL (Kompatibel dengan Oracle) secara otomatis merutekan operasi pada catatan data, seperti penyisipan, pembaruan, atau penghapusan, ke partisi yang relevan berdasarkan kunci partisi.
Dalam Contoh 1, logdate adalah kunci partisi dari tabel terpartisi bernama measurement. Batas partisi dari tabel measurement ditentukan oleh nilai logdate.
Strategi pemartisian
PolarDB for PostgreSQL (Kompatibel dengan Oracle) mendukung beberapa strategi pemartisian.
Pemartisian Rentang
Data didistribusikan berdasarkan rentang nilai dari kunci pemartisian, seperti tanggal atau pengidentifikasi tertentu untuk bisnis Anda. Setiap partisi memiliki batas atas yang tidak inklusif. Sebagai contoh, jika nilai kunci partisi suatu partisi adalah dari 1 hingga 10, dan yang lainnya dari 10 hingga 20, maka 10 termasuk dalam partisi kedua, bukan yang pertama. Tabel
measurementdalam Contoh 1 adalah tabel terpartisi rentang.Pemartisian rentang interval adalah strategi pemartisian yang diperluas dari pemartisian rentang. Untuk informasi lebih lanjut, lihat Pemartisian Rentang Interval.
Pemartisian Daftar
Contoh 2
CREATE TABLE department(deptno INT4 Primary Key,dname VARCHAR(50), location VARCHAR(100)) PARTITION BY LIST (deptno); CREATE TABLE department_p1 partition of department for values in (10, 20); CREATE TABLE department_p1 partition of department for values in (30, 40);Saat mempartisi tabel berdasarkan daftar, Anda menentukan daftar nilai kunci untuk setiap partisi. Tabel
departmentdalam Contoh 2 adalah tabel terpartisi daftar. Nilai kunci partisi yang diizinkan dalam partisi ditentukan secara eksplisit. Sebagai contoh, dalam partisidepartment_p1, catatan hanya disimpan jika nilaideptnoadalah10atau20, dan dalamdepartment_p2, nilai dalam kolomdeptnosemuanya30atau40.Pemartisian Hash
Pemartisian hash dilakukan berdasarkan modulus dan sisa yang ditentukan. Setiap partisi menyimpan catatan di mana nilai hash dari kunci partisi dibagi dengan modulus yang ditentukan akan menghasilkan sisa yang ditentukan.
Contoh 3
create table idxpart (i int) partition by hash (i); create table idxpart0 partition of idxpart for values with (modulus 2, remainder 0); create table idxpart1 partition of idxpart for values with (modulus 2, remainder 1);Dalam contoh ini, tabel
idxpartdipartisi hash. Dalam partisiidxpart0, nilai hash dariidari semua catatan dapat dibagi dengan 2 dengan sisa 0. Dalam partisiidxpart1, nilai hash dariidibagi dengan 2 dengan sisa 1.
Pemartisian multi-level
Pemartisian multi-level mengacu pada praktik mempartisi tabel yang sudah dipartisi, membuat subpartisi yang juga dapat dipartisi lebih lanjut.
PolarDB for PostgreSQL (Kompatibel dengan Oracle) mendukung jumlah level pemartisian tanpa batas, tetapi kami menyarankan agar Anda tidak membuat level lebih dari tiga. Level pemartisian yang berlebihan dapat merusak kemampuan pengelolaan partisi dan bahkan memperburuk performa kueri.
Anda dapat menggunakan strategi pemartisian yang berbeda pada level pemartisian yang berbeda. Sebagai contoh, Anda dapat menggunakan pemartisian rentang untuk level pertama, pemartisian hash untuk level kedua, dan pemartisian daftar untuk level ketiga.
Contoh 4
BUAT TABEL measurement (
city_id int tidak null,
logdate date tidak null,
peaktemp int,
unitsales int
) PARTITION BY RANGE (logdate);
BUAT TABEL measurement_y2006m03 PARTITION OF measurement
UNTUK NILAI DARI ('2006-03-01') HINGGA ('2006-04-01') PARTITION BY Hash (city_id);
BUAT TABEL measurement_y2006m03_hash1 PARTITION OF measurement_y2006m03
untuk nilai dengan (modulus 2, sisa 0) PARTITION BY List (peaktemp);
BUAT TABEL measurement_y2006m03_hash1_l1 PARTITION OF measurement_y2006m03_hash1 untuk nilai dalam (10, 20);Sintaksis
Untuk informasi lebih lanjut tentang perintah untuk mengelola partisi, seperti membuat, menambahkan, menggabungkan, membagi, dan menghapus partisi, lihat Daftar Perintah untuk Tabel Terpartisi.