Máy chủ MariaDB là một trong những máy chủ cơ sở dữ liệu mã nguồn mở phổ biến nhất. Nó được tạo ra bởi các nhà phát triển ban đầu của MySQL và nó trở nên phổ biến vì nhanh, có thể mở rộng và mạnh mẽ. MariaDB có một hệ sinh thái phong phú gồm các công cụ lưu trữ, plugin và các công cụ có sẵn khác khiến nó trở nên rất linh hoạt cho nhiều trường hợp sử dụng.
Đối với công cụ lưu trữ MariaDB, bạn có nhiều loại khác nhau để lựa chọn như XtraDB, InnoDB, MyRocks, MyISAM hoặc thậm chí Aria. Không có một loại công cụ lưu trữ tốt nhất, bởi vì nó phụ thuộc vào khối lượng công việc của chính nó. Công cụ cuối cùng được đề cập, Aria Storage Engine, được biên dịch theo mặc định từ MariaDB 5.1 và nó được yêu cầu 'đang sử dụng' khi dịch vụ MariaDB được khởi động.
Trong blog này, chúng ta sẽ xem Aria Storage Engine là gì và cách sử dụng nó trong Máy chủ MariaDB.
Aria Storage là gì?
Aria là một công cụ lưu trữ cho MySQL và MariaDB. Ban đầu nó được phát triển với mục tiêu trở thành công cụ lưu trữ giao dịch và phi giao dịch mặc định cho MariaDB và MySQL.
Hiện tại, nó hỗ trợ mã hóa và phát hiện bế tắc, đồng thời cung cấp một giải pháp thay thế an toàn cho sự cố cho MyISAM. Khi MariaDB khởi động lại sau sự cố, Aria khôi phục tất cả các bảng về trạng thái khi bắt đầu câu lệnh hoặc khi bắt đầu câu lệnh LOCK TABLES cuối cùng.
Aria hỗ trợ kiểm tra, sửa chữa và nén bên ngoài và bên trong các hàng, các định dạng hàng khác nhau, các định dạng nén chỉ mục khác nhau, aria_chk, v.v.
Công cụ lưu trữ này đã được sử dụng cho các bảng hệ thống MariaDB kể từ phiên bản 10.4.
Sự khác biệt giữa Aria và MyISAM
Hãy cùng xem một số điểm khác biệt cơ bản giữa Aria và đối thủ cạnh tranh trực tiếp của anh ấy:MyISAM, sau đó là ưu điểm và nhược điểm của Aria Storage Engine.
- Aria sử dụng các tệp nhật ký lớn (1G theo mặc định).
- Aria có tệp điều khiển nhật ký (aria_log_control) và tệp nhật ký (aria_log.%). Các tệp nhật ký có thể được tự động xóa khi không cần thiết hoặc xóa theo yêu cầu.
- Aria sử dụng 8K trang theo mặc định, trong khi MyISAM sử dụng 1K. Điều này giúp Aria nhanh hơn một chút khi sử dụng các khóa có kích thước cố định, nhưng chậm hơn khi sử dụng các khóa đóng gói có độ dài thay đổi.
Ưu điểm của Aria Storage Engine
- Dữ liệu và chỉ mục an toàn với sự cố.
- Khi gặp sự cố, các thay đổi sẽ được khôi phục về trạng thái bắt đầu một câu lệnh hoặc một câu lệnh LOCK TABLES cuối cùng.
- Aria có thể phát lại hầu hết mọi thứ từ nhật ký. Những thứ chưa thể phát lại là:
- CHÈN hàng loạt vào một bảng trống.
- BẢNG THAY THẾ.
- LOAD INDEX có thể bỏ qua các khối chỉ mục cho các chỉ mục không mong muốn.
- Hỗ trợ tất cả các định dạng MyISAM ROW và định dạng PAGE mới, nơi dữ liệu được lưu trữ trong các trang.
- Nhiều bộ chèn đồng thời vào cùng một bảng.
- Khi sử dụng định dạng PAGE, dữ liệu hàng được lưu vào bộ nhớ đệm của trang.
- Aria có các bài kiểm tra đơn vị của hầu hết các bộ phận.
- Hỗ trợ cả bảng giao dịch an toàn và không an toàn.
- PAGE là định dạng hàng giao dịch / an toàn cho sự cố duy nhất.
- Định dạng PAGE sẽ cải thiện tốc độ đáng kể trên các hệ thống có bộ nhớ đệm dữ liệu kém.
- Từ MariaDB 10.5, độ dài khóa tối đa là 2000 byte, so với 1000 byte trong MyISAM.
Nhược điểm của Aria Storage Engine
- Aria không hỗ trợ CHÈN TRÌ HOÃN.
- Aria không hỗ trợ nhiều bộ nhớ đệm chính.
- Việc lưu trữ các hàng rất nhỏ (<25 byte) không hiệu quả đối với định dạng PAGE.
- Bảng MERGE không hỗ trợ Aria.
- Các trang dữ liệu Aria ở định dạng khối có tổng chi phí là 10 byte / trang và 5 byte / hàng. Hỗ trợ giao dịch và nhiều trình ghi đồng thời sẽ sử dụng thêm tổng chi phí là 7 byte cho các hàng mới, 14 byte cho các hàng đã xóa và 0 byte cho các hàng đã nén cũ.
- Không có khóa bên ngoài.
- Aria có một kích thước trang cho cả chỉ mục và dữ liệu. MyISAM hỗ trợ các kích thước trang khác nhau cho mỗi chỉ mục.
- Chi phí nhỏ trên mỗi trang chỉ mục (15 byte).
- Kích thước tệp dữ liệu tối thiểu cho định dạng PAGE là 16K.
- Aria không hỗ trợ chỉ mục trên các trường ảo.
Định dạng Lưu trữ Aria
Nó hỗ trợ ba định dạng lưu trữ bảng khác nhau.
Độ dài cố định
Các bảng này chứa các bản ghi có độ dài cố định. Mỗi cột có cùng độ dài cho tất cả các bản ghi, bất kể nội dung thực tế là gì. Đây là định dạng mặc định nếu bảng không có trường BLOB, TEXT, VARCHAR hoặc VARBINARY và không có ROW FORMAT nào được cung cấp.
Đặc điểm:
- Nhanh chóng, vì MariaDB sẽ luôn biết vị trí bắt đầu một bản ghi.
- Dễ dàng lưu vào bộ nhớ cache.
- Chiếm nhiều dung lượng hơn so với bảng động vì lượng không gian lưu trữ tối đa sẽ được phân bổ cho mỗi bản ghi.
- Việc phục hồi sau sự cố không phức tạp do các vị trí cố định.
- Không bị phân mảnh hoặc cần sắp xếp lại, trừ khi các bản ghi đã bị xóa và bạn muốn giải phóng dung lượng.
Không thể CỐ ĐỊNH các bảng chứa trường BLOB hoặc TEXT vì theo thiết kế, đây đều là các trường động.
Động
Các bảng này chứa các bản ghi có độ dài thay đổi. Đây là định dạng mặc định nếu một bảng có bất kỳ trường BLOB, TEXT, VARCHAR hoặc VARBINARY nào và không có ROW FORMAT nào được cung cấp.
Đặc điểm:
- Mỗi hàng chứa tiêu đề cho biết độ dài của hàng.
- Các hàng có xu hướng dễ bị phân mảnh. CẬP NHẬT một bản ghi dài hơn có thể sẽ đảm bảo nó được lưu trữ ở những nơi khác nhau trên đĩa.
- Tất cả các cột chuỗi có độ dài từ bốn trở lên đều là cột động.
- Chúng yêu cầu ít không gian hơn nhiều so với các bảng có chiều dài cố định.
- Việc khôi phục sau sự cố phức tạp hơn so với bảng CỐ ĐỊNH.
Trang
Đây là định dạng mặc định cho bảng Aria và là định dạng duy nhất có thể được sử dụng nếu TRANSACTIONAL được đặt thành 1.
Đặc điểm:
- Nó được lưu vào bộ nhớ đệm của trang, mang lại hiệu suất ngẫu nhiên tốt hơn vì sử dụng ít lệnh gọi hệ thống hơn.
- Nó không phân mảnh dễ dàng như định dạng DYNAMIC trong quá trình CẬP NHẬT. Số lượng mảnh vỡ tối đa rất thấp.
- Cập nhật nhanh hơn bảng động.
- Có chi phí lưu trữ nhỏ, chủ yếu là đáng chú ý trên các hàng rất nhỏ.
- Quá trình quét toàn bộ bảng chậm hơn.
- Chậm hơn nếu có nhiều khóa trùng lặp, vì Aria trước tiên sẽ viết một hàng, sau đó là các phím và chỉ sau đó kiểm tra các khóa trùng lặp.
Để biết định dạng lưu trữ được sử dụng bởi một bảng, bạn có thể sử dụng câu lệnh SHOW TABLE STATUS.
Tùy chọn Giao dịch cho Aria Storage Engine
Trên thực tế, đối với Aria, giao dịch có nghĩa là an toàn với sự cố và nó không được hỗ trợ cho các bảng được phân vùng. Nó cũng yêu cầu định dạng hàng PAGE để làm cho nó hoạt động.
Các tùy chọn bảng TRANSACTIONAL và ROW_FORMAT tương tác như sau:
- Nếu TRANSACTIONAL =1 được đặt, thì định dạng hàng duy nhất được hỗ trợ là PAGE. Nếu ROW_FORMAT được đặt thành một số giá trị khác thì Aria sẽ đưa ra cảnh báo nhưng vẫn buộc định dạng hàng là PAGE.
- Nếu TRANSACTIONAL =0 được đặt thì bảng sẽ không an toàn với sự cố và mọi định dạng hàng đều được hỗ trợ.
- Nếu TRANSACTIONAL không được đặt thành bất kỳ giá trị nào, thì bất kỳ định dạng hàng nào cũng được hỗ trợ. Nếu ROW_FORMAT được đặt, thì bảng sẽ sử dụng định dạng hàng đó. Nếu không, bảng sẽ sử dụng định dạng hàng TRANG mặc định. Trong trường hợp này, nếu bảng sử dụng định dạng hàng TRANG thì bảng sẽ an toàn. Nếu nó sử dụng một số định dạng hàng khác thì nó sẽ không an toàn với sự cố.
Cách sử dụng Công cụ lưu trữ Aria trên Máy chủ MariaDB
Trước tiên, bạn cần tạo một cơ sở dữ liệu (nếu bạn chưa tạo) và sử dụng nó:
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.003 sec)
MariaDB [(none)]> use db1
Database changed
Sau đó, tạo một bảng bằng công cụ "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)
Chúng tôi đã chỉ định giá trị GIAO DỊCH bằng 1 để xem nó ở đây, nhưng, như chúng tôi đã đề cập, không cần thiết vì nó sẽ là 1 theo mặc định nếu chúng tôi đang sử dụng Aria mà không chỉ định Định dạng hàng và giá trị Giao dịch. Bây giờ, bạn sẽ có bảng được tạo:
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)
Và ở trạng thái bảng, bạn có thể kiểm tra cả giá trị giao dịch và định dạng hàng:
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)
Có nhiều tham số để cấu hình liên quan đến Aria Storage Engine. Bạn có thể tìm thấy danh sách đầy đủ trong trang web tài liệu chính thức.
Aria Storage Engine Tools
Hãy xem một số công cụ để làm việc với công cụ lưu trữ này.
aria_chk
Aria_chk được sử dụng để kiểm tra, sửa chữa, tối ưu hóa, sắp xếp và lấy thông tin về bảng Aria. Với máy chủ MariaDB, bạn có thể sử dụng BẢNG KIỂM TRA, BẢNG SỬA CHỮA và BẢNG TỐI ƯU HÓA để thực hiện những việc tương tự.
Không nên sử dụng công cụ này khi MariaDB đang chạy vì nó giả định rằng bảng sẽ không bị thay đổi trong quá trình sử dụng của anh ấy.
$ aria_chk [OPTIONS] aria_tables[.MAI]
Tương tự như MyISAM, thông tin bảng Aria được lưu trữ trong 2 tệp khác nhau:
- Tệp MAI chứa thông tin bảng cơ sở và chỉ mục.
- Tệp MAD chứa dữ liệu.
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 là một công cụ để nén bảng Aria. Các bảng kết quả ở chế độ chỉ đọc và thường nhỏ hơn khoảng 40% đến 70%. Tên tệp được công cụ này sử dụng là tệp chỉ mục .MAI.
$ aria_pack [options] file_name [file_name2...]
Aria_pack nén từng cột riêng biệt và khi dữ liệu kết quả được đọc, chỉ các hàng và cột riêng lẻ cần được giải nén, cho phép đọc nhanh hơn.
$ 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
Khi một bảng đã được đóng gói, hãy sử dụng lệnh aria_chk -rq để xây dựng lại các chỉ mục của nó.
$ 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 là một công cụ để hiển thị và áp dụng các bản ghi nhật ký từ nhật ký giao dịch Aria.
$ aria_read_log OPTIONS
Bạn cần sử dụng một trong các tùy chọn “-d” hoặc “-a”:
- a:Áp dụng nhật ký cho các bảng:sửa đổi các bảng. Bạn nên tạo một bản sao lưu trước. Hiển thị nhiều thông tin nếu bạn không sử dụng thông số --silent.
- d:Hiển thị thông tin ngắn gọn được đọc từ tiêu đề của bản ghi.
$ 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
...
Kết luận
Như bạn có thể thấy, Aria Storage Engine có nhiều cải tiến chống lại MyISAM và nó là một công cụ thay thế lưu trữ tuyệt vời được sử dụng. Nó cũng dễ sử dụng vì nó là một phần của cài đặt Máy chủ MariaDB, vì vậy chỉ cần chỉ định tham số bảng ENGINE là đủ để kích hoạt nó.
MariaDB vẫn đang làm việc trên công cụ lưu trữ này, vì vậy có lẽ chúng ta sẽ sớm thấy những cải tiến mới trong các phiên bản tương lai.