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ファイアウォールを閉じる
    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パフォーマンスを実現します.使用するブロックがより大きくなり、データがより圧縮されます.
    メリット
  • は高圧縮比で、デフォルトでは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ストレージを長くする必要があるシーン.
  • 小規模メタデータのアクセス;