Percona TokuDB Percona TokuDB. 1 1. TokuDB說明... 1 2. TokuDB安裝... 1 3. 使用TokuDB. 1 3.1 快速插入和富索引... 1 3.2 聚集secondary索引... 1 3.3 線上索引創建... 1 3.4 線上添加,刪除 ...
Percona TokuDB
1. TokuDB說明
具體看:
https://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_intro.html
2. TokuDB安裝
Percona Server相容獨立可用的TokuDB存儲引擎包。TokuDB引擎必須分開下載然後以插件的形式啟用。這個包可以獨立安裝,不需要任何特定的版本的Percona Server。
TokuDB存儲引擎是可擴展,ACID,MVCC的存儲引擎,提供基於索引查詢,提供online的框架修改和減少slave延遲。這個存儲引擎設計師為了寫入性能,是基於fractal tree的。
警告:
目前percona提供的TokuDB被使用在Percona Server 5.7。TokuDB引擎從其他地方下載的不能被相容。TokuDB文件格式和MySQL變種不是一樣的。從一個變種到另外一個可能需要做數據導入導出。
前置需要
Libjemalloc庫
ToKuDB需要libjemalloc 3.3.0或者更高版本。可以從percona或者其他地方下載。如果libjemalloc,之前沒有安裝,TokuDB存儲引擎在使用apt,yum安裝的時候自動安裝,但是並不會被載入到mysql,可以使用如下配置導入。
[mysqld_safe]
malloc-lib= /path/to/jemalloc
大頁面轉化
TokuDB如果在大頁面轉化啟動的時候不會被啟動。大頁面轉化是新內核版本的功能。可以通過以下語句檢查時候啟動。
$ cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
如果啟動了大頁面轉化,啟動TokuDB引擎會受到錯誤日誌裡面有如下信息:
Transparent huge pages are enabled, according to /sys/kernel/mm/redhat_transparent_hugepage/enabled
Transparent huge pages are enabled, according to /sys/kernel/mm/transparent_hugepage/enabled
你也可以關閉大頁面轉化功能,把transparent_hugepage=never傳遞到內核bottloader工具。但是要重啟。也可以使用以下命令關閉:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
安裝
現在TukoDB可以使用Percona的源安裝:
如果為yum:
[root@centos ~]# yum install Percona-Server-tokudb-57.x86_64
如果為apt:
root@wheezy:~# apt-get install percona-server-tokudb-5.7
啟動TokuDB存儲引擎
一旦安裝好TokuDB就會有如下輸出:
* 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_tokudb_admin --enable -u <mysql_admin_user> -p[mysql_admin_pass] [-S <socket>] [-h <host> -P <port>]
* See http://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_installation.html for more installation details
* See http://www.percona.com/doc/percona-server/5.7/tokudb/tokudb_intro.html for an introduction to TokuDB
Percona Server實現了ps_tokudb_admin腳本啟動TokuDB存儲引擎。腳本會自動關閉大頁面轉化。需要sudo 運行一下語句:
ps_tokudb_admin --enable -uroot -pPassw0rd
運行後會輸出:
Checking if Percona server is running with jemalloc enabled...
>> Percona server is running with jemalloc enabled.
Checking transparent huge pages status on the system...
>> Transparent huge pages are currently disabled on the system.
Checking if thp-setting=never option is already set in config file...
>> Option thp-setting=never is not set in the config file.
>> (needed only if THP is not disabled permanently on the system)
Checking TokuDB plugin status...
>> TokuDB plugin is not installed.
Adding thp-setting=never option into /etc/mysql/my.cnf
>> Successfuly added thp-setting=never option into /etc/mysql/my.cnf
Installing TokuDB engine...
>> Successfuly installed TokuDB plugin.
如果腳本沒有返回錯誤,那麼TokuDB被成功安裝,可以使用show engins檢查:
mysql> SHOW ENGINES;
...
| TokuDB | YES | Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology | YES | YES | YES |
...
手動啟動TokuDB存儲引擎
如果你不想用ps_tokudb_admin腳本,就需要手動安裝存儲引擎,載入plugins:
INSTALL PLUGIN tokudb SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_file_map SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_fractal_tree_info SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_fractal_tree_block_map SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_trx SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_locks SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_lock_waits SONAME 'ha_tokudb.so';
INSTALL PLUGIN tokudb_background_job_status SONAME 'ha_tokudb.so';
然後獲取當前存儲引擎列表:
mysql> SHOW ENGINES;
...
| TokuDB | YES | Tokutek TokuDB Storage Engine with Fractal Tree(tm) Technology | YES | YES | YES |
...
然後show plugins檢查是否安裝正確:
mysql> SHOW PLUGINS;
...
| TokuDB | ACTIVE | STORAGE ENGINE | ha_tokudb.so | GPL |
| TokuDB_file_map | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_fractal_tree_info | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_fractal_tree_block_map | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_trx | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_locks | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_lock_waits | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_background_job_status | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
...
TokuDB版本
查看TokuDB版本:
mysql> SELECT @@tokudb_version;
+------------------+
| @@tokudb_version |
+------------------+
| 5.7.10-1rc1 |
+------------------+
1 row in set (0.00 sec)
3. 使用TokuDB
3.1 快速插入和富索引
TokuDB使用富索引,讓更快的索引,可以讓查詢更快。比如覆蓋或者聚集索引。
3.2 聚集secondary索引
TokuDB允許一個secondary索引定義為聚集索引。以為這所有的表上的列都在這個secondary索引上。Percona Server解析並且查詢優化的時候支持多聚集鍵,當TokuDB被使用的時候。也就是說在特定環境下,查詢優化器會避免主鍵聚集索引讀取,而是使用secondary 聚集索引讀取。
現在解析式支持一下語法:
CREATE TABLE ... ( ..., CLUSTERING KEY identifier (column list), ...
CREATE TABLE ... ( ..., UNIQUE CLUSTERING KEY identifier (column list), ...
CREATE TABLE ... ( ..., CLUSTERING UNIQUE KEY identifier (column list), ...
CREATE TABLE ... ( ..., CONSTRAINT identifier UNIQUE CLUSTERING KEY identifier (column list), ...
CREATE TABLE ... ( ..., CONSTRAINT identifier CLUSTERING UNIQUE KEY identifier (column list), ...
CREATE TABLE ... (... column type CLUSTERING [UNIQUE] [KEY], ...)
CREATE TABLE ... (... column type [UNIQUE] CLUSTERING [KEY], ...)
ALTER TABLE ..., ADD CLUSTERING INDEX identifier (column list), ...
ALTER TABLE ..., ADD UNIQUE CLUSTERING INDEX identifier (column list), ...
ALTER TABLE ..., ADD CLUSTERING UNIQUE INDEX identifier (column list), ...
ALTER TABLE ..., ADD CONSTRAINT identifier UNIQUE CLUSTERING INDEX identifier (column list), ...
ALTER TABLE ..., ADD CONSTRAINT identifier CLUSTERING UNIQUE INDEX identifier (column list), ...
CREATE CLUSTERING INDEX identifier ON ...
定義secondary聚集索引:
CREATE TABLE table (
column_a INT,
column_b INT,
column_c INT,
PRIMARY KEY index_a (column_a),
CLUSTERING KEY index_b (column_b)) ENGINE = TokuDB;
TokuDB可以使用聚集索引是因為它出色的壓縮和很高的索引率。
3.3 線上索引創建
TokuDB可以讓你線上的添加索引到已經存在的表中。不是使用online 關鍵字,還是使用tokudb_create_index_online的會話系統變數:
mysql> SET tokudb_create_index_online=on;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE INDEX index ON table (field_name);
也可以使用,alter table命令離線方式的創建索引,不管有沒有開啟tokudb_create_index_online都是離線的。只有create index方式可以線上的創建。
Online創建索引比offline 的滿,和服務繁忙程度有關。創建索引的精度可以通過命令show processlist查看。一旦索引創建完成,新的索引在下個查詢計劃中就會被使用。
如果在同一個表上有多餘一個的創建索引,索引會線性的被創建。索引創建會等待另外一個完成,在show processlist中會顯示被鎖定。推薦在創建索引完成之後再來執行下一個。