MariaDBサーバーは、最も人気のあるオープンソースデータベースサーバーの1つです。これはMySQLの最初の開発者によって作成され、高速、スケーラブル、および堅牢であることが一般的になりました。 MariaDBには、ストレージエンジン、プラグイン、その他のツールの豊富なエコシステムがあり、さまざまなユースケースに対応できます。
データベースのディスク容量とI/O効率の要件は、ますます高くなっています。これにより、情報の増加を正しい方法で管理できるようになります。
MariaDBストレージエンジンに関しては、XtraDB、InnoDB、Aria、MyISAMなどのさまざまなタイプから選択できます。 MariaDB 10.2.5バージョン以降、MyRocksも利用可能になりました。 MyRocksは、前述の要件を満たすのに本当に役立つタイプのストレージエンジンです。
このブログでは、新しいMyRocksエンジンの詳細と、MariaDBサーバーでの使用方法について説明します。
MyRocksとは何ですか?
MyRocksは、もともとFacebookによって開発されたRocksDBに基づくオープンソースのストレージエンジンです。
MyRocksは、より高い圧縮とI/O効率を必要とするワークロードがある場合に優れたストレージソリューションになる可能性があります。これは、InnoDBエンジンで使用されるBツリーアルゴリズムよりも優れた圧縮を備えたログ構造化マージ(LSM)アーキテクチャを使用します(InnoDBで圧縮されたデータと比較して2倍優れた圧縮)。また、書き込みが最適化されたストレージエンジン(InnoDBと比較して書き込み増幅が10分の1)であり、データの読み込みとレプリケーションが高速です。 MyRocksはデータを最下位レベルに直接書き込みます。これにより、セッションでより高速なデータ読み込みを有効にした場合に、すべての圧縮オーバーヘッドが回避されます。
LSMは、変更操作をバッファー(memtable)に格納し、このバッファーがいっぱいになったときにデータを並べ替えて格納することで機能します。
デフォルトでは、テーブルとデータベースはMySQLデータディレクトリ内の#rocksdbディレクトリに保存されます。この情報は、テーブルごとに分離せずに.sstファイルに保存されます。
MyRocksは、READCOMMITTEDおよびREPEATABLEREADの分離レベルをサポートしており、SERIALIZABLEはサポートしていません。
MariaDBサーバーにMyRocksを実装する方法
インストール
まず、MariaDBサーバーをインストールする必要があります。この例では、オペレーティングシステムとしてCentOSLinuxリリース7.6を使用します。
デフォルトでは、このOSバージョンはMariaDB 5.5をインストールしようとするため、MariaDBリポジトリを追加してMariaDBバージョン10.3をインストールします。
$ cat > /etc/yum.repos.d/MariaDB.repo <<- EOF
# MariaDB 10.3 CentOS repository
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
次に、MariaDBサーバーパッケージをインストールします:
$ yum install MariaDB-server
このコマンドは、MariaDBサーバーだけでなく、さまざまなパッケージの依存関係をインストールします。
==========================================================================================================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================================================================================================
Installing:
MariaDB-server x86_64 10.3.15-1.el7.centos mariadb 24 M
Installing for dependencies:
MariaDB-client x86_64 10.3.15-1.el7.centos mariadb 11 M
MariaDB-common x86_64 10.3.15-1.el7.centos mariadb 78 k
MariaDB-compat x86_64 10.3.15-1.el7.centos mariadb 2.8 M
boost-program-options x86_64 1.53.0-27.el7 base 156 k
galera x86_64 25.3.26-1.rhel7.el7.centos mariadb 8.1 M
libaio x86_64 0.3.109-13.el7 base 24 k
lsof x86_64 4.87-6.el7 base 331 k
make x86_64 1:3.82-23.el7 base 420 k
openssl x86_64 1:1.0.2k-16.el7_6.1 updates 493 k
perl-Compress-Raw-Bzip2 x86_64 2.061-3.el7 base 32 k
perl-Compress-Raw-Zlib x86_64 1:2.061-4.el7 base 57 k
perl-DBI x86_64 1.627-4.el7 base 802 k
perl-Data-Dumper x86_64 2.145-3.el7 base 47 k
perl-IO-Compress noarch 2.061-2.el7 base 260 k
perl-Net-Daemon noarch 0.48-5.el7 base 51 k
perl-PlRPC noarch 0.2020-14.el7 base 36 k
Transaction Summary
==========================================================================================================================================================================================================
Install 1 Package (+16 Dependent packages)
デフォルトでは、MariaDBサーバーはInnoDBストレージエンジンとともにインストールされるため、それを利用できるようにするにはRocksDBエンジンをインストールする必要があります。
$ yum install MariaDB-rocksdb-engine
==========================================================================================================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================================================================================================
Installing:
MariaDB-rocksdb-engine x86_64 10.3.15-1.el7.centos mariadb 4.4 M
Installing for dependencies:
libzstd x86_64 1.3.4-1.el7 mariadb 211 k
snappy x86_64 1.1.0-3.el7 base 40 k
Transaction Summary
==========================================================================================================================================================================================================
Install 1 Package (+2 Dependent packages)
このコマンドは、いくつかの必要な依存関係をインストールし、MariaDBサーバーでプラグインを有効にします。また、/ etc / my.cnf.d / rocksdb.cnfに構成ファイルを作成します:
[mariadb]
plugin-load-add=ha_rocksdb.so
このインストールを確認するには、コマンドSHOWPLUGINSをMariaDBサーバーに実行します。
$ MariaDB> SHOW PLUGINS;
+-------------------------------+----------+--------------------+---------------+---------+
| Name | Status | Type | Library | License |
+-------------------------------+----------+--------------------+---------------+---------+
...
| ROCKSDB | ACTIVE | STORAGE ENGINE | ha_rocksdb.so | GPL |
| ROCKSDB_CFSTATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DBSTATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_PERF_CONTEXT | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_PERF_CONTEXT_GLOBAL | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_CF_OPTIONS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_COMPACTION_STATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_GLOBAL_INFO | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DDL | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_SST_PROPS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_INDEX_FILE_MAP | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_LOCKS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_TRX | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DEADLOCK | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
+-------------------------------+----------+--------------------+---------------+---------+
何らかの理由でプラグインが有効になっていない場合は、INSTALLSONAMEまたはINSTALLPLUGINコマンドを実行してプラグインを動的にインストールできます。
$ MariaDB> INSTALL SONAME 'ha_rocksdb';
別のオプションは、データベースサービスを再起動することです。このアクションでは、/ etc / my.cnf.d / rocksdb.cnfファイルを読み取り、プラグインを有効にする必要があります。
$ service mariadb restart
次のコマンドを使用して、RocksDBエンジンに関する詳細情報を見つけることができます。
$ SHOW ENGINE ROCKSDB STATUS
構成
構成ファイルについては、メインのファイルは/etc/my.cnfです。これには、残りの構成ファイルを見つけることができるディレクトリ/etc/my.cnf.dが含まれています。このディレクトリには、デフォルトで次の構成ファイルがあります。
- enable_encryption.preset:保存データの暗号化を有効にします。
- mysql-clients.cnf:ここには、[mysqladmin]、[mysqlcheck]、[mysqldump]などのさまざまなグループの構成があります。
- rocksdb.cnf:このファイルでは、default-storage-engineやrocksdb_block_sizeなどのMyRocksの特定の構成を追加します。
- server.cnf:ここにbind-addressやbinlog_formatなどのデータベースサーバーに関連する構成があります。
すべてのMyRocksシステム変数とステータス変数の前には「rocksdb」が付いています。これを見てみましょう。
システム変数:
$ MariaDB> SHOW VARIABLES LIKE 'rocksdb%';
+-------------------------------------------------+------------------------------------------+
| Variable_name | Value |
+-------------------------------------------------+------------------------------------------+
| rocksdb_access_hint_on_compaction_start | 1 |
| rocksdb_advise_random_on_open | ON |
| rocksdb_allow_concurrent_memtable_write | OFF |
| rocksdb_allow_mmap_reads | OFF |
| rocksdb_allow_mmap_writes | OFF |
| rocksdb_allow_to_start_after_corruption | OFF |
| rocksdb_blind_delete_primary_key | OFF |
| rocksdb_block_cache_size | 536870912 |
| rocksdb_block_restart_interval | 16 |
| rocksdb_block_size | 4096 |
…
+-------------------------------------------------+------------------------------------------+
ステータス変数:
$ MariaDB> SHOW STATUS LIKE 'rocksdb%';
+----------------------------------------------------+-------+
| Variable_name | Value |
+----------------------------------------------------+-------+
| Rocksdb_rows_deleted | 0 |
| Rocksdb_rows_inserted | 0 |
| Rocksdb_rows_read | 0 |
| Rocksdb_rows_updated | 0 |
| Rocksdb_rows_deleted_blind | 0 |
| Rocksdb_rows_expired | 0 |
| Rocksdb_rows_filtered | 0 |
| Rocksdb_system_rows_deleted | 0 |
| Rocksdb_system_rows_inserted | 0 |
| Rocksdb_system_rows_read | 0 |
…
+----------------------------------------------------+-------+
ステータスとシステム変数の詳細については、MariaDBのWebサイトを参照してください。
MyRocksを使用したMariaDBのバックアップ
バックアップは、すべてのデータベース環境で必須です。これらは、システムのリカバリ、移行、監査、テストなどに不可欠です。
バックアップは、論理と物理の2つの異なるタイプに分類できます。論理バックアップはSQLのような人間が読める形式で保存され、物理バックアップには追加のバイナリデータが含まれます。
MyRocksをデータベースエンジンとして使用するMariaDBでの論理バックアップの場合、最も一般的なバックアップツールは従来のmysqldumpです。
$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL
また、物理バックアップには、MyRocksと互換性のあるMariabackupを使用できます。
$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST
もう1つのオプションは、Facebookによって作成されたmyrocks_hotbackupです。ソースインスタンスを停止することなく、実行中のMyRocksインスタンスからローカルサーバーまたはリモートサーバーに物理コピーを取得するために使用できます。
MariaDBでのMyRocksの使用の制限
MyRocksエンジンを使用する際の制限のいくつかを見てみましょう...
- MariaDBの楽観的な並列レプリケーションはサポートされていない可能性があります
- MyRocksは32ビットプラットフォームでは使用できません
- MariaDBクラスター(Galeraクラスター)はMyRocksでは機能しません(InnoDBまたはXtraDBストレージエンジンのみ)
- トランザクションはメモリに収まる必要があります
- データの読み込みには特別な設定が必要です
- SERIALIZABLEはサポートされていません
- トランスポータブル表スペース、外部キー、空間インデックス、およびフルテキストインデックスはサポートされていません
結論
MyRocksは、10.2.5以降のバージョンからMariaDBで利用できます。前述したように、このストレージエンジンは、高いデータ圧縮とより高いレベルのI/O効率を必要とするワークロードがある場合に役立つことがあります。 MyRocksの詳細については、こちらをご覧ください。