MariaDB10.0亮眼特性詳解-創(chuàng)新互聯(lián)

很多同學一定聽說過MariaDB。作為MySQL的重要分支之一,它繼續(xù)秉承完全開源的姿態(tài)(MySQL也有不少好用功能是收費的喲),被很多大型互聯(lián)網(wǎng)企業(yè)廣泛使用(如Google、Twitter)。同時,紅帽7(包括CentOS)也將默認數(shù)據(jù)庫由MySQL更改為MariaDB。在這種情況下,一定要了解一下這個逆生長的MariaDB。
本文,著重介紹MariaDB 10.0 GA版中的非常吸引人的若干特性,方便大家和MySQL進行比較。
1. Feedback插件--不推薦:

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,湖口企業(yè)網(wǎng)站建設,湖口品牌網(wǎng)站建設,網(wǎng)站定制,湖口網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,湖口網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

a) 開啟方式:my.cnf配置文件的[mysqld]模塊,加入feedback=on

b) 作用:會發(fā)送使用數(shù)據(jù)給開發(fā)人員,幫助其優(yōu)化代碼。

2. InnoDB和XtraDB轉(zhuǎn)換:

a) MDB默認使用XtraDB。

b) 開啟方式:

1) 停止mysql服務。

2) 在my.cnf配置文件的[mysqld]模塊,加入ignore_builtin_innodb、 

plugin_load=innodb=ha_innodb.so

3. MYSQL客戶端報告:

a) 控制參數(shù):global.progress_report_time 值范圍要大于5.單位秒。5以下的值被忽略。

b) 關(guān)閉的方法:

1) 啟動服務時加入--disable-progress-reports

2) 設置global.progress_report_time 值等于0.

c) MariaDB附帶的mytop腳本一樣也支持此功能

4. SHOW EXPLAIN FOR query_id:Explain命令的變種。

可以在得知QID的情況下查詢執(zhí)行計劃。

5. LIMIT ROWS EXAMINED:LIMIT命令的進化版本。

語法:LIMIT [m] ROWS EXAMINED n (m可選)

作用:普通的LIMIT語句在查詢到指定數(shù)量的分頁結(jié)果后還會繼續(xù)執(zhí)行。如果是大表的話這樣的分頁操作會消耗過多的資源。

舉例:LIMIT 100 ROWS EXAMINED 10000 將從一個含有10000條記錄的分頁中再次篩選出前100條記錄。

6. INSTALL SONAME:安裝指定插件、引擎。INSTALL PLUGIN命令變種。

語法:INSTALL SONAME engine_name.

舉例:安裝BLACKHOLE引擎。

INSTALL SONAME ‘ha_blackhole’;

INSTALL PLUGIN Blackhole SONAME ‘ha_blackhole’;

卸載某插件使用UNINSTALL替換INSTALL

7. 生成HTML/XML文件:

舉例:mysql --html/--xml isfdb < isfdb-001.sql > isfdb-001.html/ isfdb-001.xml

會將isfdb-001.sql中的查詢語句返回的結(jié)果生成相應的html或者xml文件。

8. MYISAM引擎轉(zhuǎn)換為ARIA引擎:

ARIA引擎與MYISAM引擎的主要區(qū)別是ARIA引擎自帶crash safe功能,在災難性斷電或其他意想不到的表錯誤導致的表損壞時,可以恢復數(shù)據(jù)。

使用ALTER TABLE命令轉(zhuǎn)換引擎。

轉(zhuǎn)換引擎操作步驟和MYSQL一致:

a) 首先創(chuàng)建新表

b) 導入數(shù)據(jù)

c) Rename操作

因此對于千萬級的大表來說這一過程將相當漫長。建議不要在生產(chǎn)數(shù)據(jù)庫上進行此操作。

9. 控制MariaDB查詢優(yōu)化器策略:

a) 查看當前查詢優(yōu)化器中的優(yōu)化策略狀態(tài):

SELECT @@optimizer_switch\G

開啟或關(guān)閉某個優(yōu)化策略:

如:SET [GLOBAL] optimizer_switch="mrr=on";

或者在my.cnf配置文件中的[mysqld]模塊中添加:

[mysqld] 

optimizer_switch = "mrr=on, mrr_cost_based=on,mrr_sort_keys=on"

b) 在INNODB和XTRADB上打開優(yōu)化器extended keys策略:

1) 打開方法如上文所示,參數(shù)名為:extended_keys=on

2) 作用:由于優(yōu)化器是基于成本的(CBO),因此執(zhí)行計劃中會出現(xiàn)有很多索引但是優(yōu)化器無法使用的查詢。打開優(yōu)化器extended keys策略將會使優(yōu)化器在出現(xiàn)這一情況時,盡量使用索引來返回,而不是掃描全表。

10. 配置Aria引擎兩步死鎖監(jiān)測:

a) 原理:

當Aria引擎無法在表上創(chuàng)建鎖時,它首先會依據(jù)deadlock_search_depth_short的值為可能出現(xiàn)的死鎖創(chuàng)建一個深度搜索等待圖(WFG)。當搜索結(jié)束后如果還無法創(chuàng)建鎖,那么Aria引擎并不急著判斷出死鎖,而是會等待deadlock_timeout_short定義的微秒后,再搜索一遍。如果還是無法創(chuàng)建鎖,那么Aria引擎會使用deadlock_search_depth_long參數(shù)的值,創(chuàng)建一個深度搜索等待圖。當搜索結(jié)束后,如果還沒有定義死鎖,那么Aria引擎將等待deadlock_timeout_long定義的微秒后,返回超時錯誤。

b) 查看當前設置:SHOW VARIABLES LIKE ‘deadlock_%’\G

c) 修改參數(shù)值,如:

MariaDB 10.0 亮眼特性詳解

d) 或?qū)懭肱渲梦募y.cnf的[mysqld]模塊中。

e) 注意:上述timeout參數(shù)中的單位是微秒。

11. 配置MYISAM引擎鍵緩存段(key_cache_segments):

作用:增強MYISAM引擎表性能。高并發(fā)環(huán)境中提高MYISAM引擎性能。

a) 原理:

當MYISAM引擎的線程使用鍵緩存時(key cache),線程將首先獲得一把鎖。在高并發(fā)場景中,大量的線程同時申請鎖。對大表或者熱點表來說,完整的鍵緩存會成為性能瓶頸。分割后的鍵緩存可以減少鎖競爭,獲得鎖的線程只需要鎖定相應的鍵緩存段就可以了,無需鎖定整個鍵緩存。

b) 查看當前設置:SHOW VARIABLES LIKE ‘key_cache_segments’\G

c) 修改參數(shù)值:

MariaDB 10.0 亮眼特性詳解

d) 或?qū)懭肱渲梦募y.cnf的[mysqld]模塊中。

12. 配置線程池(重中之重啊,核心功能啊):

MariaDB的線程池提供了更強大的將線程集中使用的功能。并替換了mysql之前的one tread per client connection方法。該方法在典型的web壓力場景(數(shù)量多但是返回結(jié)果小的場景)中對線程的復用效果并不理想。

a) 修改參數(shù)值:

在my.cnf中的[mysqld]模塊中添加thread_handling = pool-of-threads。

b) 重啟服務

c) 作用:

生產(chǎn)場景中出現(xiàn)大量的短查詢或者CPUload過高時,線程池是處理這一問題的最好方案。但是在短時間出現(xiàn)的大量長查詢時,就不適用了。通常這種情況,linux下可以使用thread_pool_idle_timeout參數(shù)來緩解壓力。

d) 其他重要的參數(shù):

1) thread_pool_stall_limit:單位毫秒。

用于出現(xiàn)大量長連接查詢,該參數(shù)控制線程被stall的時間。默認值500。如果查詢已經(jīng)被stall,MDB將創(chuàng)建一個新線程,線程池中的大線程數(shù)由thread_pool_max_threads參數(shù)控制。默認值500。當線程池中的線程數(shù)達到大值后,將不會在創(chuàng)建新線程,即使線程已經(jīng)被stall。

這一情況可以使用參數(shù)extra_port來解決。該參數(shù)將打開一個額外的端口,來保持查詢進行連接。該參數(shù)的值必須和默認端口不同。

2) thread_pool_idle_timeout:單位秒。

定義線程在撤銷之前的等待時間。默認值60.

如果發(fā)現(xiàn)在某線程被撤銷后會定期的創(chuàng)建新的線程,那么應當增加該參數(shù)的值。

3) thread_pool_size:LINUX平臺定義線程池大小。

13. 配置Aria引擎pagecache:

Aria引擎的PAGE是row format型。它的pagecache由三個參數(shù)控制:

MariaDB 10.0 亮眼特性詳解

a) aria_pagecache_buffer_size:單位byte。默認值128M-512M。

該參數(shù)不能動態(tài)修改。

b) aria_pagecache_age_threshold:定義在pagecache中的數(shù)據(jù)塊留存長度。

c) aria_pagecache_division_limit:單位百分比。定義pagecache中溫數(shù)據(jù)所占的百分比。

14. 使用子查詢緩存(subquery cache)優(yōu)化查詢:MariaDB獨占功能!

a) subquery cache極大提升子查詢性能。

b) 默認開啟.

c) 兩個狀態(tài)值變量:

1) subquery_cache_hit:子查詢緩存命中次數(shù)

2) subquery_cache_miss:未命中次數(shù)

15. 優(yōu)化半連接子查詢(semijoin query):

半連接子查詢中常見的是帶where條件的IN子句。這種子句在MYSQL中是很難被優(yōu)化的。而MDB提供了一個可以開啟的優(yōu)化器參數(shù),指導優(yōu)化器對這種類型的查詢進行優(yōu)化。

a) 參數(shù):exists_to_in=on。默認不開啟。

b) 對EXISTS 型的查詢也可以起到優(yōu)化作用。

c) 修改參數(shù)值:

1) SET optimizer_switch='exists_to_in=on';

2) 或者修改配置文件:

MariaDB 10.0 亮眼特性詳解

16. 創(chuàng)建全文索引(full-text index)--不推薦:

a) full-text index是一個特殊類型的索引,用來搜索基于text類型的列.

b) 只可以為char, varchar, text類型創(chuàng)建全文索引.

c) 全文索引允許我們使用"MATCH() ... AGAINST"語法來查詢數(shù)據(jù).

語法的MATCH部分包含一個以逗號分隔的待查詢columns列表.

語法的AGAINST部分包含需要搜索的字符串也包含一個可選的修飾符來表明所執(zhí)行查詢的類型.

查詢類型有:

IN NATURAL LANGUAGE MODE, IN BOOLEAN MODE, WITH QUERY EXPANSION

默認類型為: IN NATURAL LANGUAGE MODE.

17. 開啟用戶統(tǒng)計:

a) 修改配置文件:

MariaDB 10.0 亮眼特性詳解

b) 或SET GLOBAL USERSTAT = 1;

c) 開啟后可以查看統(tǒng)計數(shù)據(jù)。如:

SHOW INDEX_STATISTICS;

18. 使用全局事務ID(global transaction IDs):
更直觀的全局事務。比5.6逗比般的GTID更容易理解。

a) 全局事務ID(GTID)是在10.0.2版本中新添加的特性,它將使復制機能更穩(wěn)定、更靈活。這里需要注意的是:MariaDB和MYSQL 5.6中提到的GTID不能通用,而且差別較大。

b) GTID信息的存放位置在mysql.gtid_slave_pos表,在更新數(shù)據(jù)的同一事務中更新此表的最新位置信息。

c) GTID的組成:0-1-12345

1) 第一位是domain ID。這是由MariaDB特有的多源復制場景決定的。是32位的無符號整型。單源場景下,該值為0.domain id 的值在my.cnf中設定,如gtid-domain-id = 1。

2) 第二位是server_id。是32位的無符號整型。

3) 第三位是Commit_id。是64位的無符號整型。事務在master提交階段指定的提交id號,這是一個遞增的值,每次提交都不一樣,而在group commit中所有被group的事務所指定的commit id都是相同的。

d) 默認開啟,查看GTID的值使用show binlog events命令,結(jié)果如下所示:

MariaDB 10.0 亮眼特性詳解

GTID_LIST列中的值就是GTID。

其實值為[]。

查看從庫的當前GTID 值,使用命令 SELECT @@global.gtid_slave_pos,主庫上返回空值。

查看master的當前gtid值,使用命令 select @@global.gtid_current_pos;

e) 從庫采用gtid的復制,語法為:CHANGE MASTER TO master_use_gtid = { slave_pos | current_pos | no }

f) 在一般的復制場景中,從庫使用的是slave_pos的值。如A是B的主庫,當A掛掉后B充當主庫,A重新上線后想要做B的從庫時,使用的是current_pos值。因為A之前是主庫,沒有做過從庫,所以不存在slave_pos值。注:沒有做過從庫的主庫沒有slave_pos

如果之前的從庫沒有開啟binlog,那么current_pos和slave_pos的值是相等的。

g) 可以使用set global gtid_slave_pos= ‘XXXX’修改slave_pos的值。

查詢slave_pos和current_pos:

select @@global.gtid_slave_pos / gtid_current_pos

h) 實測主庫在不停寫入時崩潰,當主庫重新上線后,從庫可以根據(jù)slave_pos追上主庫。

i) 理解current_pos和slave_pos概念:

Current_pos:值由主庫操作決定。當機器開啟binlog,在執(zhí)行事務時就會記錄該值。使用select @@gtid_current_pos中展示的是所有的pos值。

Slave_pos: 從庫上的該值與current_pos一致。使用select @@gtid_current_pos中展示的是本機復制到的GTID。

19. 多源復制:

a) 多源復制中應當注意的要點:

1) 各源my.cnf中應當增加relay-log參數(shù),如:relay_log = db01-relay-binlog。格式中建議增加主機名來區(qū)分。

2) 不同源的domain-id一定要不同。否則會出現(xiàn)復制失敗。配置domain-id在my.cnf文件中增加gtid-domain-id=n 參數(shù)。重啟服務。

3) change master 語法中可以增加源主機名來增加區(qū)分,如:

Change master [“connect_name”] to 

master_host = ‘xxx.xxx.xxx.xxx’,

master_port=3306,

master_user=’replication’,

master_password=’replication’,

master_use_gtid=current_pos;

注:使用源主機名來做change master后,只能只用start all slaves命令來啟動復制。其余命令也類似。

4) 啟動所有復制:start all slaves;

停止所有復制:stop all slaves;

查看所有連接復制狀態(tài):show all slaves status;

查看某連接復制狀態(tài):show slave [“connect_name”] status; 

清空某連接復制狀態(tài):reset slave [“connect_name”]; 

注意:這里的清空只是將relay_log從1開始重做。不能將復制信息從slave status的展示中清除。

清空某連接復制狀態(tài)并從slave status展示中刪除:

reset slave [“connect_name”] ALL

b) 多源復制的引用場景:

1) 將各主庫上的數(shù)據(jù)整合到一個slave上,方便查詢。

2) 將各主庫的數(shù)據(jù)整合到一個slave上,方便備份。

20. 增加基于行復制的binlog注釋:

在配置文件中增加binlog_ annotate_row_events參數(shù)。會在mysqlbinlog命令查看binlog時,在基于行復制的部分展示SQL語句。

21. 配置binlog事件總和檢查器(binlog event checksum):

a) 作用:用于在文件系統(tǒng)出現(xiàn)故障前快速發(fā)現(xiàn)。

b) 參數(shù)設置:
MariaDB 10.0 亮眼特性詳解

也可以通過在my.cnf配置文件中添加參數(shù)BINLOG_CHECKSUM開啟。

22. 在復制過程中跳過指定的binlog事件:

a) 參數(shù)設置:開啟。

MariaDB 10.0 亮眼特性詳解

b) 作用:

在開啟功能的這一階段中處理的所有事務都不會被從庫復制。類似的功能還有將binlog功能關(guān)閉:set @@sql_log_bin = 0。但是這樣的參數(shù)設置會停止所有事務記錄binlog。Skip_replication參數(shù)則不會。
Perry.Zhang
02.18.2016

網(wǎng)頁名稱:MariaDB10.0亮眼特性詳解-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://muchs.cn/article30/dcjjso.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、域名注冊、外貿(mào)建站網(wǎng)站制作、企業(yè)網(wǎng)站制作、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)