MariaDB新特性剖析分析_第1頁(yè)
MariaDB新特性剖析分析_第2頁(yè)
MariaDB新特性剖析分析_第3頁(yè)
MariaDB新特性剖析分析_第4頁(yè)
MariaDB新特性剖析分析_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、MariaDB新特性剖析內(nèi)容提要1.MariaDB發(fā)展歷程2.MariaDB新特性概要3.線(xiàn)程池技術(shù)剖析4.binlog group commit技術(shù)剖析5.多源復(fù)制剖析6.MariaDB面臨的挑戰(zhàn)1、MariaDB發(fā)展歷程1.2008年1月, Sun以10億美元收購(gòu)MySQL AB。2.2009年4月,Oracle以74億美元收購(gòu)Sun。3.2009年,MySQL創(chuàng)始人Monty出于以下幾個(gè)原因創(chuàng)立了MySQL的分支MariaDB:l MySQL核心開(kāi)發(fā)團(tuán)隊(duì)是封閉的,完全沒(méi)有Oracle之外的成員參加。l MySQL新版本的發(fā)布速度,在Oracle收購(gòu)Sun之后大為減緩,有很多bugfix和

2、新的feature,都沒(méi)有及時(shí)加入到發(fā)布版本之中。4.維基百科、Google、Red Hat、SUSE等從MySQL遷移到MariaDB。2、MariaDB擴(kuò)展和新特性概要1. 更多的存儲(chǔ)引擎。除標(biāo)準(zhǔn)存儲(chǔ)引擎外還包含Aria、XtraDB、SphinxSE、FederatedX、TokuDB、Cassandra、CONNECT、Sequence、Spider等存儲(chǔ)引擎。2. 線(xiàn)程池技術(shù)。3. binlog group commit技術(shù)。4. 支持微秒級(jí)別的時(shí)間精度。5. 虛擬列、動(dòng)態(tài)列。6. 用戶(hù)統(tǒng)計(jì)功能。7. Kill某個(gè)用戶(hù)的所有Query。8. Query的執(zhí)行進(jìn)度提示。9. 多源復(fù)制。

3、10. 子查詢(xún)優(yōu)化。11. 虛擬列1.CREATE TABLE example_virtual_columns(a INT(11) PRIMARY KEY, b VARCHAR(32),c INT(11) AS (a mod 10) VIRTUAL,d VARCHAR(5) as (left(b, 5) PERSISTENT);虛擬列c的值將會(huì)在查詢(xún)時(shí)計(jì)算,而虛擬列d的值被存儲(chǔ)在表中,查詢(xún)的時(shí)候直接從表里取出。2.在執(zhí)行插入操作時(shí),虛擬列使用default關(guān)鍵字代替就可以。如果為虛擬列指定值,將會(huì)導(dǎo)致錯(cuò)誤的發(fā)生:mariadbdbtest INSERT INTO example_virtual

4、_columns VALUES (16, abcdefghijkl, default, default);Query OK, 1 row affected (0.01 sec)mariadbdbtest SELECT * FROM example_virtual_columns;+-+-+-+-+| a | b | c | d |+-+-+-+-+| 16 | abcdefghijkl | 6 | abcde |+-+-+-+-+1 row in set (0.00 sec)mariadbdbtest INSERT INTO example_virtual_columns VALUES (17

5、, abcdefghijkl, default, there);ERROR 1906 (HY000): The value specified for computed column d in table example_virtual_columns ignored動(dòng)態(tài)列(1)1.動(dòng)態(tài)列適合于某些不確定的場(chǎng)景,例如某個(gè)商品的屬性個(gè)數(shù)不確定并且將來(lái)可能還會(huì)添加。2.想要使用動(dòng)態(tài)列,首先表中必須包含blob類(lèi)型的列:create table assets (item_name varchar(32) primary key,dynamic_cols blob);3.接下來(lái),就可以使用MariaD

6、B定義的動(dòng)態(tài)列操作函數(shù)對(duì)動(dòng)態(tài)列進(jìn)行存取操作:INSERT INTO assets VALUES (MariaDB T-shirt, COLUMN_CREATE(color, blue, size, XL);INSERT INTO assets VALUES (Thinkpad Laptop, COLUMN_CREATE (color, black, price, 500);以上兩條語(yǔ)句往assets表中插入了兩行記錄,接下來(lái)查詢(xún)商品的顏色情況:mariadbdbtest SELECT item_name, COLUMN_GET(dynamic_cols, color as char) AS c

7、olor FROM assets;+-+-+| item_name | color |+-+-+| MariaDB T-shirt | blue | Thinkpad Laptop | black |+-+-+動(dòng)態(tài)列(2)1.此外,還可以動(dòng)態(tài)刪除或者增加某行的動(dòng)態(tài)列:mariadbdbtest UPDATE assets SET dynamic_cols = COLUMN_DELETE(dynamic_cols, price) WHERE COLUMN_GET(dynamic_cols,color as char)= black;mariadbdbtest UPDATE assets SET

8、dynamic_cols = COLUMN_ADD(dynamic_cols, warranty, 3 years) WHERE item_name=Thinkpad Laptop;2.你可以通過(guò)調(diào)用COLUMN_LIST函數(shù)來(lái)查看動(dòng)態(tài)列的情況,或者使用COLUMN_JSON函數(shù)以JSON的格式來(lái)查看動(dòng)態(tài)列以及它們對(duì)應(yīng)的值:mariadbdbtest SELECT item_name, COLUMN_LIST (dynamic_cols) FROM assets;+-+-+| item_name | column_list(dynamic_cols) |+-+-+| MariaDB T-shi

9、rt | size,color“ | Thinkpad Laptop | color,warranty“ |+-+-+mariadbdbtest SELECT item_name, COLUMN_JSON(dynamic_cols) FROM assets;+-+-+| item_name | COLUMN_JSON(dynamic_cols) |+-+-+| MariaDB T-shirt | size:XL,color:blue | Thinkpad Laptop | color:black,warranty:3 years |+-+-+3、MariaDB線(xiàn)程池技術(shù)MySQL每連接每線(xiàn)程模

10、式的局限性:A. 最大連接數(shù)限制。參數(shù)max_connections。B. 隨著連接數(shù)的上升,線(xiàn)程數(shù)上升。每個(gè)線(xiàn)程會(huì)占用一定系統(tǒng)資源的,線(xiàn)程數(shù)多了占用的系統(tǒng)資源也就多了。C. 線(xiàn)程的創(chuàng)建和銷(xiāo)毀是有一定開(kāi)銷(xiāo)的。D. 當(dāng)線(xiàn)程數(shù)過(guò)多時(shí),如果其中大部分線(xiàn)程都處于活躍狀態(tài),將會(huì)導(dǎo)致頻繁的上下文切換,從而造成巨大的系統(tǒng)開(kāi)銷(xiāo)。1.由多個(gè)分組組成。參數(shù)thread_pool_size指定了線(xiàn)程池分組的個(gè)數(shù),默認(rèn)值為當(dāng)前機(jī)器CPU的核心數(shù)。2.新來(lái)的連接會(huì)根據(jù)id的不同分配到不同的分組。3.每個(gè)分組有一個(gè)任務(wù)隊(duì)列,存儲(chǔ)待處理的連接。4.每個(gè)分組有一個(gè)listener線(xiàn)程,監(jiān)聽(tīng)對(duì)應(yīng)分組所有連接的網(wǎng)絡(luò)事件,將有事件

11、的連接添加到任務(wù)隊(duì)列中。5.worker線(xiàn)程負(fù)責(zé)處理任務(wù)隊(duì)列中待處理的連接。6.timer線(xiàn)程定期清理超時(shí)的客戶(hù)端連接,并且檢查各個(gè)分組是否處于“停滯”狀態(tài)。7.worker線(xiàn)程的數(shù)量會(huì)動(dòng)態(tài)伸縮。各個(gè)分組的worker線(xiàn)程的總數(shù)最大不超過(guò)thread_pool_max_threads設(shè)置的值。8.listener線(xiàn)程和worker線(xiàn)程之間可以進(jìn)行相互轉(zhuǎn)換。正常情況下當(dāng)listener線(xiàn)程監(jiān)聽(tīng)到分組中的某個(gè)連接需要處理的時(shí)候,會(huì)將其加入任務(wù)隊(duì)列,并且喚醒worker線(xiàn)程進(jìn)行處理。而在任務(wù)隊(duì)列沒(méi)有任務(wù)積壓并且最近一段時(shí)間網(wǎng)絡(luò)事件較少的情況下,listener線(xiàn)程不會(huì)喚醒worker線(xiàn)程去處理監(jiān)聽(tīng)到

12、的連接,而是自己作為worker線(xiàn)程處理該鏈接。worker線(xiàn)程在執(zhí)行完任務(wù)隊(duì)列的所有任務(wù)之后,在進(jìn)入睡眠之前會(huì)判斷當(dāng)前分組是否存在listener線(xiàn)程,如果不存在listener線(xiàn)程那么自己就轉(zhuǎn)化為listener線(xiàn)程。9.200,000+ connections4、MariaDB binlog group commit技術(shù)在開(kāi)啟binlog的情況下,MySQL/MariaDB事務(wù)的提交包括在binlog中的提交以及在存儲(chǔ)引擎內(nèi)部的提交。MySQL/MariaDB采用2PC保證事務(wù)的完整性。2PCMySQL/MariaDB事務(wù)兩階段提交1. 事務(wù)在存儲(chǔ)引擎內(nèi)部prepare(binlog也有

13、prepare方法,只不過(guò)該方法什么也不做)。2. 事務(wù)提交到binlog中。3. 事務(wù)在存儲(chǔ)引擎內(nèi)部進(jìn)行提交。當(dāng)系統(tǒng)在1和2期間崩潰了,事務(wù)僅僅在存儲(chǔ)引擎內(nèi)部prepare了,當(dāng)MySQL重新開(kāi)啟的時(shí)候,會(huì)將其進(jìn)行回滾。當(dāng)系統(tǒng)在2和3期間崩潰了,事務(wù)在存儲(chǔ)引擎內(nèi)部prepare了,在binlog中提交了,當(dāng)MySQL重新啟動(dòng)的時(shí)候,會(huì)把該事務(wù)在引擎內(nèi)部進(jìn)行commit。因?yàn)樵撌聞?wù)很可能已經(jīng)通過(guò)binlog傳播到了從庫(kù)上。多個(gè)并發(fā)提交的事務(wù)之間共享一次fsync操作對(duì)binlog進(jìn)行持久化多個(gè)并發(fā)需要提交的事務(wù)之間共享一次fsync操作對(duì)binlog文件進(jìn)行持久化。多個(gè)并發(fā)提交的事務(wù)在寫(xiě)bin

14、log之前會(huì)被加入到一個(gè)隊(duì)列中,位于隊(duì)列頭部的事務(wù)所在的線(xiàn)程稱(chēng)為leader線(xiàn)程,其他事務(wù)所在的線(xiàn)程稱(chēng)為follower線(xiàn)程。leader線(xiàn)程負(fù)責(zé)為隊(duì)列中所有的事務(wù)進(jìn)行寫(xiě)binlog操作,此時(shí)所有的follower線(xiàn)程處于等待狀態(tài),然后leader線(xiàn)程調(diào)用一次fsync操作,將binlog持久化,最后通知所有的follower線(xiàn)程可以繼續(xù)往下執(zhí)行。傳統(tǒng)寫(xiě)binlog流程與binlog group commit流程對(duì)比1.事務(wù)1p 獲取binlog鎖。p 將事務(wù)寫(xiě)入到binlog。p 調(diào)用fsync將對(duì)binlog的修改進(jìn)行持久化。2.事務(wù)2p獲取binlog鎖。p將事務(wù)寫(xiě)入到binlog。p調(diào)

15、用fsync將對(duì)binlog的修改進(jìn)行持久化。3.事務(wù)3p獲取binlog鎖。p將事務(wù)寫(xiě)入到binlog。p調(diào)用fsync將對(duì)binlog的修改進(jìn)行持久化。1.事務(wù)1進(jìn)入隊(duì)列,事務(wù)2進(jìn)入隊(duì)列,事務(wù)3進(jìn)入隊(duì)列。2.事務(wù)1作為leader獲取binlog鎖,同時(shí)事務(wù)2和事務(wù)3作為follower進(jìn)入等待狀態(tài)。3.leader(事務(wù)1)將隊(duì)列中所有事務(wù)(事務(wù)1、2、3)寫(xiě)入到binlog。4.leader(事務(wù)1)調(diào)用一次fsync將對(duì)binlog的修改進(jìn)行持久化。5.leader(事務(wù)1)喚醒所有等待的follower(事務(wù)2、3)。binlog group commit技術(shù)只有在有足夠多并發(fā)的需

16、要提交的事務(wù)時(shí), fsync操作成為事務(wù)的提交瓶頸的情況下才能帶來(lái)性能的提升。5、MariaDB多源復(fù)制MySQL傳統(tǒng)復(fù)制方式 MariaDB多源復(fù)制多源復(fù)制的作用:1.由于某些原因,數(shù)據(jù)被分片到多個(gè)數(shù)據(jù)庫(kù)實(shí)例上,你想把這些數(shù)據(jù)聚集到一塊進(jìn)行數(shù)據(jù)分析等工作。2.你有多個(gè)數(shù)據(jù)庫(kù)實(shí)例,想把這些實(shí)例的數(shù)據(jù)使用一臺(tái)機(jī)器進(jìn)行備份。MariaDB多源復(fù)制相關(guān)的命令:1. CHANGE MASTER connection-name TO 2. START SLAVE connection-name 3. START ALL SLAVE4. STOP SLAVE connection-name 5. STOP

17、 ALL SLAVE6. RESET SLAVE connection-name7. SHOW RELAYLOG connection-name EVENTS8. SHOW SLAVE connection-name STATUS9. SHOW ALL SLAVE STATUS普通復(fù)制:1.在主庫(kù)上會(huì)開(kāi)啟一個(gè)dump線(xiàn)程,在從庫(kù)上開(kāi)啟了一個(gè)IO線(xiàn)程,一個(gè)SQL線(xiàn)程,。2.從庫(kù)上有一個(gè)文件,存儲(chǔ)了連接到主庫(kù)所需的信息以及slave IO線(xiàn)程獲取主庫(kù)binlog的進(jìn)度。3.從庫(kù)上有一組relay-log,有一個(gè)relay_文件,記錄了slave SQL線(xiàn)程重放的進(jìn)度。MariaDB多源復(fù)制1.每增加一個(gè)主庫(kù),從庫(kù)上會(huì)創(chuàng)建一個(gè)IO線(xiàn)程和一個(gè)SQL線(xiàn)程。2.從庫(kù)上有多個(gè)文件,存儲(chǔ)了連接到對(duì)應(yīng)主庫(kù)所需的信息以及slave IO線(xiàn)程獲取主庫(kù)binlog的進(jìn)度。一個(gè)文件,存儲(chǔ)了所有連接名。3.從庫(kù)上有N組relay-log,有多個(gè)relay_文件,記錄了對(duì)應(yīng)slave SQL線(xiàn)程重放的進(jìn)度。6、MariaDB面臨的挑戰(zhàn)1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論