文章目錄
- 一、環境部署
- 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 <mysql_admin_user> -p[mysql_admin_pass] [-S <socket>] [-h <host> -P <port>]
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 <mysql_admin_user> -p[mysql_admin_pass] [-S <socket>] [-h <host> -P <port>]
...
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;
-
不會產生索引碎片;
缺點
-
不支持外鍵(foreign key)功能,如果表有外鍵,切換到 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 (默認2MB)需要對齊,但遠大于4k, RocksDB_block_size(默認4k) 不需要對齊,因此對齊浪費空間較少
- RocksDB索引前綴相同值壓縮存盤,節省空間
- RocksDB占總資料量90%的最底層資料,行內不需要存盤系統列seqid (innodb聚簇索引列包含trxid,roll_ptr等資訊)
缺點
- 大value的場景不友好
- 不適于大規模資料的存取
適用場景
- 對寫性能要求很高,同時有較大記憶體來快取SST塊以提供快速讀的場景;
- SSD等對寫放大比較敏感以及磁盤等對隨機寫比較敏感的場景;
- 需要變長kv存盤的場景;
- 小規模元資料的存取;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/234345.html
標籤:其他
下一篇:同時有線內網無線外網的解決方案
