理解MySQL——架構(gòu)與概念建站知識
導(dǎo)讀:1建站知識寫在前面:最早接觸的MySQL是在三年前,那時候MySQL還是4.x版本,很多功能都不支持,比如,存儲過程,視圖,觸發(fā)器,更別說分布式事務(wù)等復(fù)雜特性了。但從5.個業(yè)網(wǎng)站建設(shè)公司公司網(wǎng)站建設(shè)。
寫在前面:最早接觸的MySQL是在三年前,那時候MySQL還是4.x版本,很多功能都不支持,比如,存儲過程,視圖,觸發(fā)器,更別說分布式事務(wù)等復(fù)雜特性了。但從5.0(2005年10月)開始,MySQL漸漸步入企業(yè)級數(shù)據(jù)庫的行列了;復(fù)制、集群、分區(qū)、分布式事務(wù),這些企業(yè)級的特性,使得現(xiàn)在的MySQL,完全可以應(yīng)用于企業(yè)級應(yīng)用環(huán)境(很多互聯(lián)網(wǎng)公司都用其作為數(shù)據(jù)庫服務(wù)器,盡管節(jié)約成本是一個因素,但是沒有強大功能作后盾,則是不可想象的)。雖然,MySQL還有很多不足,比如,復(fù)制、分區(qū)的支持都十分有限、查詢優(yōu)化仍需要改進,但是MySQL已經(jīng)是一個足夠好的DBMS了,更何況它是opensource的。這段時間沒有事,出于好奇,略微的研究了一下MySQL,積累了一些資料,欲總結(jié)出來。這些資料打算分為兩部分,上部主要討論MySQL的優(yōu)化,其中主要參考了《MySQL Manual》和《High Performance MySQL》,如果有時間,以后在下部分析一下MySQL的源碼。如果你是MySQL高手,希望你不吝賜教;如果你是新手,希望對你有用。 第一章、MySQL架構(gòu)與概念 1、MySQL的邏輯架構(gòu) 最上面不是MySQL特有的,所有基于網(wǎng)絡(luò)的C/S的網(wǎng)絡(luò)應(yīng)用程序都應(yīng)該包括連接處理、認證、安全管理等。 中間層是MySQL的核心,包括查詢解析、分析、優(yōu)化和緩存等。同時它還提供跨存儲引擎的功能,包括存儲過程、觸發(fā)器和視圖等。 最下面是存儲引擎,它負責(zé)存取數(shù)據(jù)。服務(wù)器通過storage engine API可以和各種存儲引擎進行交互。 1.1、查詢優(yōu)化和執(zhí)行(Optimization and Execution) MySQL將用戶的查詢語句進行解析,并創(chuàng)建一個內(nèi)部的數(shù)據(jù)結(jié)構(gòu)——分析樹,然后進行各種優(yōu)化,例如重寫查詢、選擇讀取表的順序,以及使用哪個索引等。查詢優(yōu)化器不關(guān)心一個表所使用的存儲引擎,但是存儲引擎會影響服務(wù)器如何優(yōu)化查詢。優(yōu)化器通過存儲引擎獲取一些參數(shù)、某個操作的執(zhí)行代價、以及統(tǒng)計信息等。在解析查詢之前,服務(wù)器會先訪問查詢緩存(query cache)——它存儲SELECT語句以及相應(yīng)的查詢結(jié)果集。如果某個查詢結(jié)果已經(jīng)位于緩存中,服務(wù)器就不會再對查詢進行解析、優(yōu)化、以及執(zhí)行。它僅僅將緩存中的結(jié)果返回給用戶即可,這將大大提高系統(tǒng)的性能。 1.2、并發(fā)控制 MySQL提供兩個級別的并發(fā)控制:服務(wù)器級(the server level)和存儲引擎級(the storage engine level)。加鎖是實現(xiàn)并發(fā)控制的基本方法,MySQL中鎖的粒度: (1) 表級鎖:MySQL獨立于存儲引擎提供表鎖,例如,對于ALTER TABLE語句,服務(wù)器提供表鎖(table-level lock)。 (2) 行級鎖:InnoDB和Falcon存儲引擎提供行級鎖,此外,BDB支持頁級鎖。InnoDB的并發(fā)控制機制,下節(jié)詳細討論。 另外,值得一提的是,MySQL的一些存儲引擎(如InnoDB、BDB)除了使用封鎖機制外,還同時結(jié)合MVCC機制,即多版本兩階段封鎖協(xié)議(Multiversion two-phrase locking protocal),來實現(xiàn)事務(wù)的并發(fā)控制,從而使得只讀事務(wù)不用等待鎖,提高了事務(wù)的并發(fā)性。 注:并發(fā)控制是DBMS的核心技術(shù)之一(實際上,對于OS也一樣),它對系統(tǒng)性能有著至關(guān)重要的影響,以后再詳細討論。 1.3、事務(wù)處理 MySQL中,InnoDB和BDB都支持事務(wù)處理。這里主要討論InnoDB的事務(wù)處理(關(guān)于BDB的事務(wù)處理,也十分復(fù)雜,以前曾較為詳細看過其源碼,以后有機會再討論)。 1.3.1、事務(wù)的ACID特性 事務(wù)是由一組SQL語句組成的邏輯處理單元,事務(wù)具有以下4個屬性,通常簡稱為事務(wù)的ACID屬性(Jim Gray在《事務(wù)處理:概念與技術(shù)》中對事務(wù)進行了詳盡的討論)。 (1)原子性(Atomicity):事務(wù)是一個原子操作單元,其對數(shù)據(jù)的修改,要么全都執(zhí)行,要么全都不執(zhí)行。 (2)一致性(Consistent):在事務(wù)開始和完成時,數(shù)據(jù)都必須保持一致狀態(tài)。這意味著所有相關(guān)的數(shù)據(jù)規(guī)則都必須應(yīng)用于事務(wù)的修改,以保持數(shù)據(jù)的完整性;事務(wù)結(jié)束時,所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如B樹索引或雙向鏈表)也都必須是正確的。 (3)隔離性(Isolation):數(shù)據(jù)庫系統(tǒng)提供一定的隔離機制,保證事務(wù)在不受外部并發(fā)操作影響的“獨立”環(huán)境執(zhí)行。這意味著事務(wù)處理過程中的中間狀態(tài)對外部是不可見的,反之亦然。 (4)持久性(Durable):事務(wù)完成之后,它對于數(shù)據(jù)的修改是永久性的,即使出現(xiàn)系統(tǒng)故障也能夠保持。 1.3.2、事務(wù)處理帶來的相關(guān)問題 由于事務(wù)的并發(fā)執(zhí)行,帶來以下一些著名的問題: (1)更新丟失(Lost Update):當(dāng)兩個或多個事務(wù)選擇同一行,然后基于最初選定的值更新該行時,由于每個事務(wù)都不知道其他事務(wù)的存在,就會發(fā)生丟失更新問題--最后的更新覆蓋了由其他事務(wù)所做的更新。 (2)臟讀(Dirty Reads):一個事務(wù)正在對一條記錄做修改,在這個事務(wù)完成并提交前,這條記錄的數(shù)據(jù)就處于不一致狀態(tài);這時,另一個事務(wù)也來讀取同一條記錄,如果不加控制,第二個事務(wù)讀取了這些“臟”數(shù)據(jù),并據(jù)此做進一步的處理,就會產(chǎn)生未提交的數(shù)據(jù)依賴關(guān)系。這種現(xiàn)象被形象地叫做"臟讀"。 (3)不可重復(fù)讀(Non-Repeatable Reads):一個事務(wù)在讀取某些數(shù)據(jù)后的某個時間,再次讀取以前讀過的數(shù)據(jù),卻發(fā)現(xiàn)其讀出的數(shù)據(jù)已經(jīng)發(fā)生了改變、或某些記錄已經(jīng)被刪除了!這種現(xiàn)象就叫做“不可重復(fù)讀”。 (4)幻讀(Phantom Reads):一個事務(wù)按相同的查詢條件重新讀取以前檢索過的數(shù)據(jù),卻發(fā)現(xiàn)其他事務(wù)插入了滿足其查詢條件的新數(shù)據(jù),這種現(xiàn)象就稱為“幻讀”。 1.3.3、事務(wù)的隔離性 SQL2標(biāo)準(zhǔn)定義了四個隔離級別。定義語句如下: SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE ] 這與Jim Gray所提出的隔離級別有點差異。其中READ UNCOMMITTED即Jim的10(瀏覽);READ COMMITTED即20,游標(biāo)穩(wěn)定性;REPEATABLE READ為2.99990隔離(沒有幻像保護);SERIALIZABLE隔離級別為30,完全隔離。SQL2標(biāo)準(zhǔn)默認為完全隔離(30)。各個級別存在問題如下:
聲明: 本文由我的SEOUC技術(shù)文章主頁發(fā)布于:2023-05-24 ,文章理解MySQL——架構(gòu)與概念建站知識主要講述架構(gòu),概念,SQL網(wǎng)站建設(shè)源碼以及服務(wù)器配置搭建相關(guān)技術(shù)文章。轉(zhuǎn)載請保留鏈接: http://www.bifwcx.com/article/web_6807.html
為你推薦與理解MySQL——架構(gòu)與概念建站知識相關(guān)的文章
-
通王TWCMS 2.0.3網(wǎng)站模板程序下載
(126)人喜歡 2024-01-15 -
Windows官方原版在哪里下載
(175)人喜歡 2024-01-15 -
WordPress網(wǎng)站模板發(fā)帖標(biāo)題顏色設(shè)置
(131)人喜歡 2024-01-07 -
修改discuz論壇帖子標(biāo)題80字符的長度限制
(249)人喜歡 2024-01-07 -
wordpress程序調(diào)用不帶超鏈接的Tag標(biāo)簽
(234)人喜歡 2024-01-05 -
網(wǎng)站在不同時期需調(diào)整內(nèi)容更新的方向
(112)人喜歡 2023-08-12