MySQLエンジン——TokuDBとRocksDB
9005 ワード
文書ディレクトリ 一、環境配置 1.1 OS構成 1.1.1ファイアウォール を閉じる 1.1.2 selinux を閉じる 1.1.3大きなページを閉じる 1.2データベース配置 1.3 tokudbとrocksdb を有効にする
二、エンジン対比 2.1 TokuDB 2.2 RocksDB
一、環境配置
1.1 OS構成
1.1.1ファイアウォールを閉じる
1.1.2 selinuxを閉じる
1.1.3大きなページを閉じる
1.2データベースの配置
1.3 tokudbとrocksdbの有効化
二、エンジンの比較
2.1 TokuDB
TokuDBは、MySQLとMariaDBに対応した高同時挿入ストレージエンジンです.独自のフラクタルツリーインデックス:ランダムな読み書きを「順序読み書き」にする機能を提供し、高いinsertパフォーマンスを実現します.使用するブロックがより大きくなり、データがより圧縮されます.
メリットは高圧縮比で、デフォルトではzlibを使用して圧縮され、特に文字列(varchar、textなど)タイプに対して非常に高い圧縮比があり、ログ、元のデータなどを格納するのに適しています.公式には1:12に達すると発表されています. オンラインインデックスを追加し、読み書き操作 に影響しません. HCADER特性、オンラインフィールドの増加、削除、拡張、名前変更操作をサポートし、(瞬時または秒レベルで完了) は完全なACID特性とトランザクションメカニズム をサポートする.は非常に速い書き込み性能で、Fractal-treeはトランザクションの実現に優位で、undo logがなく、公式にはinnodbより少なくとも9倍高いと言われています. show processlist進捗表示 をサポートデータ量はいくつかのTBに拡張できる. はインデックスフラグメントを生成しません.
欠点では外部キー機能はサポートされていません.テーブルに外部キーがある場合は、TokuDBエンジンに切り替えると、この制約は無視されます. TokuDBは、圧縮解凍のため、大量に読み込まれたシーンに適していません.CPUの占有量は2-3倍になるが,圧縮後の空間が小さいためIOオーバーヘッドが低く,平均応答時間は2倍程度である. online ddl対text,blobなどのフィールドは に適用されません.には完全なホットスペアツールがなくmysqldumpでしか論理バックアップできません 適用シーンアクセス頻度の低いデータまたは履歴データアーカイブ データテーブルは非常に大きい、時々DDL操作 を行う必要がある.
2.2 RocksDB
RocksDBは、FacebookがLevelDBに基づいて開発したキー値格納と読み書き機能を提供するLSM-treeアーキテクチャエンジンです.ユーザが書き込んだキー値ペアは、まずディスク上のWAL(Write Ahead Log)に書き込まれ、メモリ内のホップテーブル(SkipList)に書き込まれます.この構造はMemTableとも呼ばれます.LSM-treeエンジンは、ユーザのランダムな修正(挿入)をWALファイルの順序書きに変換するため、Bツリークラスストレージエンジンよりも高い書き込みスループットを有する.メモリ内のデータが一定のしきい値に達すると、ディスクにブラシをかけてSSTファイル(Sorted String Table)が生成され、SSTは多層(デフォルトでは6層まで)に分けられ、各層のデータが一定のしきい値に達すると、SSTの一部を選択して次の層に統合され、各層のデータは前の層の10倍(したがって、90%のデータは最後の層に格納される)になる.RocksDBでは、ユーザーが複数のColumnFamilyを作成できます.これらのColumnFamilyはそれぞれ独立したメモリホップテーブルとSSTファイルを持っていますが、同じWALファイルを共有しています.このような利点は、アプリケーションの特徴に応じて異なるColumnFamilyのために異なる構成を選択することができますが、WALへの書き込み回数を増やすことはできません.
メリット innodb空間浪費,B tree分裂によりpage内に空きが多く,page利用率は高くなかった.innodbの既存の圧縮効率も高くなく、圧縮はblock単位で、無駄になります. 書き込み拡大:innodb更新はページ単位で、最悪の場合N行を更新するとNページが更新されます.RocksDB append only方式また、innodbがdouble writeを開くと書き込みが増加します. RocksDB整列オーバーヘッド小:SST file(デフォルト2 MB)整列が必要ですが、4 kよりはるかに大きく、RocksDB_block_size(デフォルト4 k)は位置合わせを必要としないため、位置合わせの無駄なスペースは より少ない. RocksDBインデックス接頭辞同値圧縮記憶、省スペース RocksDBは総データ量の90%を占める最下層データであり、行内にはストレージシステム列seqid(innodbクラスタインデックス列にはtrxid、roll_ptrなどの情報が含む) を必要としない.
欠点大valueのシーンは友好的ではありません は、大規模なデータへのアクセス に適していない.
適用シーンは書き込み性能に高い要求があり、同時にSSTブロックをキャッシュして高速読み取りのシーンを提供するメモリが大きい. SSDなどの書き込み増幅に敏感なシーンや、ディスクなどのランダム書き込みに敏感なシーン. kvストレージを長くする必要があるシーン. 小規模メタデータのアクセス;
一、環境配置
1.1 OS構成
1.1.1ファイアウォールを閉じる
systemctl stop firewalld.service #
systemctl disable firewalld.service #
1.1.2 selinuxを閉じる
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
cat /etc/sysconfig/selinux
1.1.3大きなページを閉じる
echo never > /sys/kernel/mm/transparent_hugepage/enabled
1.2データベースの配置
tar xf Percona-Server-8.0.21-12-r7ddfdfe-el7-x86_64-bundle.tar
yum localinstall percona-server-*
...
Installing : percona-server-server-8.0.21-12.2.el7.x86_64 4/9
Percona Server is distributed with several useful UDF (User Defined Function) from Percona Toolkit.
Run the following commands to create these functions:
mysql -e "CREATE FUNCTION fnv1a_64 RETURNS INTEGER SONAME 'libfnv1a_udf.so'"
mysql -e "CREATE FUNCTION fnv_64 RETURNS INTEGER SONAME 'libfnv_udf.so'"
mysql -e "CREATE FUNCTION murmur_hash RETURNS INTEGER SONAME 'libmurmur_udf.so'"
See http://www.percona.com/doc/percona-server/8.0/management/udf_percona_toolkit.html for more details
Installing : percona-server-rocksdb-8.0.21-12.2.el7.x86_64 5/9
* This release of Percona Server is distributed with RocksDB storage engine.
* Run the following script to enable the RocksDB storage engine in Percona Server:
ps-admin --enable-rocksdb -u -p[mysql_admin_pass] [-S ] [-h -P ]
Installing : percona-server-test-8.0.21-12.2.el7.x86_64 6/9
Installing : percona-server-tokudb-8.0.21-12.2.el7.x86_64 7/9
* This release of Percona Server is distributed with TokuDB storage engine.
* Run the following script to enable the TokuDB storage engine in Percona Server:
ps-admin --enable-tokudb -u -p[mysql_admin_pass] [-S ] [-h -P ]
...
systemctl start mysqld
cat /data/mysql/logs/error.log | grep 'temporary password'
1.3 tokudbとrocksdbの有効化
[root@zijie lib]# ps-admin --enable-tokudb -uroot -pZIjie@97125
Checking SELinux status...
INFO: SELinux is disabled.
Checking if TokuDB plugin is available for installation ...
INFO: ha_tokudb.so library for TokuDB found at /usr/lib64/mysql/plugin/ha_tokudb.so.
Checking location of jemalloc library ...
INFO: jemalloc library needed for TokuDB found at /usr/lib64/libjemalloc.so.1
Checking transparent huge pages status on the system...
INFO: Transparent huge pages are currently disabled on the system.
Checking if THP_SETTING variable is set to never or madvise in /etc/sysconfig/mysql...
INFO: Variable THP_SETTING is set in /etc/sysconfig/mysql.
Checking if LD_PRELOAD variable is set for libjemalloc.so.1 in /etc/sysconfig/mysql...
INFO: Variable LD_PRELOAD for libjemalloc.so.1 is set in /etc/sysconfig/mysql.
Checking TokuDB engine plugin status...
INFO: TokuDB engine plugin is not installed.
Installing TokuDB engine...
INFO: Successfully installed TokuDB engine plugin.
[root@zijie lib]# ps-admin --enable-rocksdb -uroot -pZIjie@97125
Checking if RocksDB plugin is available for installation ...
INFO: ha_rocksdb.so library for RocksDB found at /usr/lib64/mysql/plugin/ha_rocksdb.so.
Checking RocksDB engine plugin status...
INFO: RocksDB engine plugin is not installed.
Installing RocksDB engine...
INFO: Successfully installed RocksDB engine plugin.
root@mysql 17:39: [(none)]> show engines;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| TokuDB | YES | Percona TokuDB Storage Engine with Fractal Tree(tm) Technology | YES | YES | YES |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| ROCKSDB | YES | RocksDB storage engine | YES | YES | YES |
| InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
11 rows in set (0.00 sec)
二、エンジンの比較
2.1 TokuDB
TokuDBは、MySQLとMariaDBに対応した高同時挿入ストレージエンジンです.独自のフラクタルツリーインデックス:ランダムな読み書きを「順序読み書き」にする機能を提供し、高いinsertパフォーマンスを実現します.使用するブロックがより大きくなり、データがより圧縮されます.
メリット
欠点
2.2 RocksDB
RocksDBは、FacebookがLevelDBに基づいて開発したキー値格納と読み書き機能を提供するLSM-treeアーキテクチャエンジンです.ユーザが書き込んだキー値ペアは、まずディスク上のWAL(Write Ahead Log)に書き込まれ、メモリ内のホップテーブル(SkipList)に書き込まれます.この構造はMemTableとも呼ばれます.LSM-treeエンジンは、ユーザのランダムな修正(挿入)をWALファイルの順序書きに変換するため、Bツリークラスストレージエンジンよりも高い書き込みスループットを有する.メモリ内のデータが一定のしきい値に達すると、ディスクにブラシをかけてSSTファイル(Sorted String Table)が生成され、SSTは多層(デフォルトでは6層まで)に分けられ、各層のデータが一定のしきい値に達すると、SSTの一部を選択して次の層に統合され、各層のデータは前の層の10倍(したがって、90%のデータは最後の層に格納される)になる.RocksDBでは、ユーザーが複数のColumnFamilyを作成できます.これらのColumnFamilyはそれぞれ独立したメモリホップテーブルとSSTファイルを持っていますが、同じWALファイルを共有しています.このような利点は、アプリケーションの特徴に応じて異なるColumnFamilyのために異なる構成を選択することができますが、WALへの書き込み回数を増やすことはできません.
メリット
欠点
適用シーン