Server MariaDB adalah salah satu server basis data sumber terbuka yang paling populer. Itu dibuat oleh pengembang asli MySQL dan menjadi populer karena cepat, terukur, dan kuat. MariaDB memiliki ekosistem yang kaya dari mesin penyimpanan, plugin, dan alat lain yang tersedia yang membuatnya sangat serbaguna untuk berbagai kasus penggunaan.
Adapun mesin penyimpanan MariaDB, Anda memiliki berbagai jenis untuk dipilih seperti XtraDB, InnoDB, MyRocks, MyISAM, atau bahkan Aria. Tidak ada tipe storage engine yang terbaik, karena tergantung dari beban kerja itu sendiri. Yang terakhir disebutkan, Aria Storage Engine, dikompilasi secara default dari MariaDB 5.1 dan harus 'sedang digunakan' saat layanan MariaDB dimulai.
Dalam blog ini, kita akan melihat apa itu Aria Storage Engine, dan bagaimana menggunakannya di Server MariaDB.
Apa itu Penyimpanan Aria?
Aria adalah mesin penyimpanan untuk MySQL dan MariaDB. Awalnya dikembangkan dengan tujuan menjadi mesin penyimpanan transaksional dan non-transaksi default untuk MariaDB dan MySQL.
Saat ini, mendukung enkripsi dan deteksi kebuntuan, dan juga menawarkan alternatif yang aman dari kerusakan untuk MyISAM. Saat MariaDB dimulai ulang setelah mogok, Aria memulihkan semua tabel ke status pada awal pernyataan atau pada awal pernyataan LOCK TABLES terakhir.
Aria mendukung pemeriksaan eksternal dan internal, perbaikan, dan kompresi baris, format baris yang berbeda, format kompres indeks yang berbeda, aria_chk, dan banyak lagi.
Mesin penyimpanan ini telah digunakan untuk tabel sistem MariaDB sejak versi 10.4.
Perbedaan Antara Aria dan MyISAM
Mari kita lihat beberapa perbedaan mendasar antara Aria dan pesaing langsungnya:MyISAM, serta kelebihan dan kekurangan Aria Storage Engine.
- Aria menggunakan file log besar (1G secara default).
- Aria memiliki file kontrol log (aria_log_control) dan file log (aria_log.%). File log dapat dihapus secara otomatis saat tidak diperlukan atau dihapus saat diminta.
- Aria menggunakan halaman 8K secara default, sedangkan MyISAM menggunakan 1K. Ini membuat Aria sedikit lebih cepat saat menggunakan kunci dengan ukuran tetap, tetapi lebih lambat saat menggunakan kunci yang dikemas dengan panjang variabel.
Kelebihan Mesin Penyimpanan Aria
- Data dan indeks aman dari kerusakan.
- Saat mogok, perubahan akan dikembalikan ke status awal pernyataan atau pernyataan LOCK TABLES terakhir.
- Aria dapat memutar ulang hampir semua hal dari log. Hal-hal yang belum bisa diputar ulang adalah:
- Batch INSERT ke dalam tabel kosong.
- ALTER TABLE.
- LOAD INDEX dapat melewati blok indeks untuk indeks yang tidak diinginkan.
- Mendukung semua format ROW MyISAM dan format PAGE baru tempat data disimpan di halaman.
- Beberapa penyisipan serentak ke dalam tabel yang sama.
- Saat menggunakan format PAGE, data baris di-cache oleh cache halaman.
- Aria memiliki tes unit di sebagian besar bagian.
- Mendukung tabel crash-safe dan bukan tabel transaksional.
- PAGE adalah satu-satunya format baris yang aman dari kerusakan/transaksional.
- Format PAGE akan memberikan peningkatan kecepatan yang signifikan pada sistem yang memiliki cache data yang buruk.
- Dari MariaDB 10.5, panjang kunci maksimal adalah 2000 byte, dibandingkan dengan 1000 byte di MyISAM.
Kekurangan Mesin Penyimpanan Aria
- Aria tidak mendukung INSERT DELAYED.
- Aria tidak mendukung banyak cache kunci.
- Penyimpanan baris yang sangat kecil (<25 byte) tidak efisien untuk format PAGE.
- MERGE tabel tidak mendukung Aria.
- Halaman data Aria dalam format blok memiliki overhead 10 byte/halaman dan 5 byte/baris. Dukungan transaksi dan beberapa penulis bersamaan akan menggunakan overhead tambahan sebesar 7 byte untuk baris baru, 14 byte untuk baris yang dihapus, dan 0 byte untuk baris lama yang dipadatkan.
- Tidak ada penguncian eksternal.
- Aria memiliki satu ukuran halaman untuk indeks dan data. MyISAM mendukung berbagai ukuran halaman per indeks.
- Overhead kecil per halaman indeks (15 byte).
- Ukuran file data minimum untuk format PAGE adalah 16K.
- Aria tidak mendukung indeks pada bidang virtual.
Format Penyimpanan Aria
Ini mendukung tiga format penyimpanan tabel yang berbeda.
Panjang tetap
Tabel ini berisi catatan dengan panjang tetap. Setiap kolom memiliki panjang yang sama untuk semua rekaman, terlepas dari konten sebenarnya. Ini adalah format default jika tabel tidak memiliki bidang BLOB, TEXT, VARCHAR atau VARBINARY, dan tidak ada ROW FORMAT yang disediakan.
Karakteristik:
- Cepat, karena MariaDB akan selalu tahu di mana rekaman dimulai.
- Mudah di-cache.
- Mengambil lebih banyak ruang daripada tabel dinamis, karena jumlah maksimum ruang penyimpanan akan dialokasikan untuk setiap catatan.
- Merekonstruksi setelah mogok tidak rumit karena posisi tetap.
- Tidak ada fragmentasi atau perlu mengatur ulang, kecuali catatan telah dihapus dan Anda ingin mengosongkan ruang.
Tabel yang berisi bidang BLOB atau TEXT tidak dapat DIPERBAIKI karena, menurut desain, keduanya adalah bidang dinamis.
Dinamis
Tabel ini berisi catatan dengan panjang variabel. Ini adalah format default jika tabel memiliki bidang BLOB, TEXT, VARCHAR, atau VARBINARY, dan tidak ada ROW FORMAT yang disediakan.
Karakteristik:
- Setiap baris berisi header yang menunjukkan panjang baris.
- Baris cenderung mudah terfragmentasi. MEMPERBARUI catatan agar lebih panjang kemungkinan akan memastikannya disimpan di tempat yang berbeda pada disk.
- Semua kolom string dengan panjang empat atau lebih bersifat dinamis.
- Mereka membutuhkan lebih sedikit ruang daripada tabel dengan panjang tetap.
- Memulihkan setelah error lebih rumit dibandingkan dengan tabel FIXED.
Halaman
Ini adalah format default untuk tabel Aria, dan merupakan satu-satunya format yang dapat digunakan jika TRANSACTIONAL disetel ke 1.
Karakteristik:
- Ini di-cache oleh cache halaman, yang memberikan kinerja acak yang lebih baik karena menggunakan lebih sedikit panggilan sistem.
- Itu tidak terfragmentasi semudah format DYNAMIC selama UPDATES. Jumlah maksimum fragmen sangat rendah.
- Memperbarui lebih cepat daripada tabel dinamis.
- Memiliki sedikit overhead penyimpanan, terutama pada baris yang sangat kecil.
- Lebih lambat untuk melakukan pemindaian tabel penuh.
- Lebih lambat jika ada beberapa kunci duplikat, karena Aria pertama-tama akan menulis baris, lalu kunci, dan baru kemudian memeriksa duplikat.
Untuk mengetahui format penyimpanan yang digunakan oleh sebuah tabel, Anda dapat menggunakan pernyataan SHOW TABLE STATUS.
Opsi Transaksi untuk Aria Storage Engine
Sebenarnya, untuk Aria, transaksional berarti aman dari gangguan, dan tidak didukung untuk tabel yang dipartisi. Ini juga membutuhkan format baris PAGE untuk membuatnya berfungsi.
Opsi tabel TRANSACTIONAL dan ROW_FORMAT berinteraksi sebagai berikut:
- Jika TRANSACTIONAL=1 disetel, maka satu-satunya format baris yang didukung adalah PAGE. Jika ROW_FORMAT disetel ke beberapa nilai lain, Aria mengeluarkan peringatan, tetapi tetap memaksa format baris menjadi PAGE.
- Jika TRANSACTIONAL=0 disetel, tabel tidak akan aman dari kerusakan, dan format baris apa pun didukung.
- Jika TRANSACTIONAL tidak disetel ke nilai apa pun, maka format baris apa pun didukung. Jika ROW_FORMAT diatur, maka tabel akan menggunakan format baris tersebut. Jika tidak, tabel akan menggunakan format baris PAGE default. Dalam hal ini, jika tabel menggunakan format baris PAGE, maka tabel tersebut akan aman dari gangguan. Jika menggunakan format baris lain, maka tidak akan aman dari kerusakan.
Cara Menggunakan Mesin Penyimpanan Aria di Server MariaDB
Pertama, Anda perlu membuat database (jika Anda belum membuatnya), dan menggunakannya:
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.003 sec)
MariaDB [(none)]> use db1
Database changed
Kemudian, buat tabel menggunakan mesin “Aria”:
MariaDB [db1]> CREATE TABLE table1 (id int(11) DEFAULT NULL, name text)
-> ENGINE=Aria
-> TRANSACTIONAL=1;
Query OK, 0 rows affected (0.025 sec)
Kami menentukan nilai TRANSAKSI dalam 1 untuk melihatnya di sini, tetapi, seperti yang kami sebutkan, tidak perlu karena akan menjadi 1 secara default jika kami menggunakan Aria tanpa menentukan Format Baris dan nilai Transaksional. Sekarang, Anda akan membuat tabel:
MariaDB [db1]> SHOW CREATE TABLE table1\G
*************************** 1. row ***************************
Table: table1
Create Table: CREATE TABLE `table1` (
`id` int(11) DEFAULT NULL,
`name` text DEFAULT NULL
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 TRANSACTIONAL=1
1 row in set (0.000 sec)
Dan dalam status tabel, Anda dapat memeriksa nilai format transaksi dan baris:
MariaDB [db1]> SHOW TABLE STATUS\G
*************************** 1. row ***************************
Name: table1
Engine: Aria
Version: 10
Row_format: Page
Rows: 0
Avg_row_length: 0
Data_length: 8192
Max_data_length: 17592186011648
Index_length: 8192
Data_free: 0
Auto_increment: NULL
Create_time: 2020-06-30 18:59:17
Update_time: 2020-06-30 18:59:17
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options: transactional=1
Comment:
Max_index_length: 137438945280
Temporary: N
1 rows in set (0.001 sec)
Ada banyak parameter yang harus dikonfigurasi terkait dengan Aria Storage Engine. Anda dapat menemukan daftar lengkapnya di situs dokumentasi resmi.
Alat Mesin Penyimpanan Aria
Mari kita lihat beberapa alat untuk bekerja dengan mesin penyimpanan ini.
aria_chk
Aria_chk digunakan untuk memeriksa, memperbaiki, mengoptimalkan, mengurutkan, dan mendapatkan informasi tentang tabel Aria. Dengan server MariaDB, Anda dapat menggunakan CHECK TABLE, REPAIR TABLE, dan OPTIMIZE TABLE untuk melakukan hal serupa.
Alat ini tidak boleh digunakan saat MariaDB berjalan karena menganggap tabel tidak akan diubah selama penggunaannya.
$ aria_chk [OPTIONS] aria_tables[.MAI]
Mirip dengan MyISAM, informasi tabel Aria disimpan dalam 2 file berbeda:
- File MAI berisi informasi tabel dasar dan indeks.
- File MAD berisi data.
Aria_chk takes one or more MAI files as arguments.
For example, to check all your tables and repairs only those that have an error, run this command in your data directory:
$ aria_chk --check --force --sort_buffer_size=1G */*.MAI
Checking Aria file: db1/table1.MAI
Data records: 0 Deleted blocks: 0
- check file-size
- check key delete-chain
- check index reference
- check record links
...
aria_pack
Aria_pack adalah alat untuk mengompresi tabel Aria. Tabel yang dihasilkan bersifat read-only, dan biasanya sekitar 40% hingga 70% lebih kecil. Nama file yang digunakan oleh alat ini adalah file indeks .MAI.
$ aria_pack [options] file_name [file_name2...]
Aria_pack mengompresi setiap kolom secara terpisah, dan, ketika data yang dihasilkan dibaca, hanya baris dan kolom individual yang diperlukan yang perlu didekompresi, memungkinkan pembacaan yang lebih cepat.
$ aria_pack /var/lib/mysql/world/country
Compressing aria_pack /var/lib/mysql/world/country.MAD: (549 records)
- Calculating statistics
- Compressing file
37.71%
Remember to run aria_chk -rq on compressed tables
Setelah tabel dikemas, gunakan perintah aria_chk -rq untuk membangun kembali indeksnya.
$ aria_chk -rq --ignore-control-file /var/lib/mysql/world/country
Recreating table '/var/lib/mysql/world/country'
- check record delete-chain
- recovering (with sort) Aria-table '/var/lib/mysql/world/country'
Data records: 549
- Fixing index 1
State updated
aria_read_log
Aria_read_log adalah alat untuk menampilkan dan menerapkan catatan log dari log transaksi Aria.
$ aria_read_log OPTIONS
Anda harus menggunakan salah satu opsi “-d” atau “-a”:
- a:Menerapkan log ke tabel:memodifikasi tabel. Anda harus membuat cadangan terlebih dahulu. Menampilkan banyak informasi jika Anda tidak menggunakan parameter --silent.
- d:Menampilkan info singkat yang dibaca dari header record.
$ cd /var/lib/mysql
$ aria_read_log -d
You are using --display-only, NOTHING will be written to disk
The transaction log starts from lsn (1,0x2007)
TRACE of the last aria_read_log
Rec#1 LSN (1,0x2007) short_trid 0 redo_create_table(num_type:30) len 1042
Rec#2 LSN (1,0x2421) short_trid 0 redo_create_table(num_type:30) len 527
Rec#3 LSN (1,0x2638) short_trid 61986 long_transaction_id(num_type:36) len 6
Rec#4 LSN (1,0x2641) short_trid 61986 file_id(num_type:35) len 22
Rec#5 LSN (1,0x265d) short_trid 61986 undo_bulk_insert(num_type:39) len 9
Rec#6 LSN (1,0x266a) short_trid 0 incomplete_log(num_type:37) len 2
Rec#7 LSN (1,0x266f) short_trid 61986 commit(num_type:27) len 0
...
Kesimpulan
Seperti yang Anda lihat, Aria Storage Engine memiliki banyak peningkatan terhadap MyISAM, dan ini merupakan alternatif mesin penyimpanan yang bagus untuk digunakan. Ini juga mudah digunakan karena merupakan bagian dari instalasi Server MariaDB, jadi hanya dengan menentukan parameter tabel ENGINE sudah cukup untuk mengaktifkannya.
MariaDB masih mengerjakan mesin penyimpanan ini, jadi mungkin kita akan segera melihat peningkatan baru di versi mendatang.