高效能MySQL之架構篇

2022-06-05 23:54:12 字數 2289 閱讀 5442

mysql伺服器邏輯架構圖:

1.四個特性:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)。

2.隔離級別

(1)read uncommitted(未提交讀)

事務中的修改,即使沒有提交,對其他事務也都是可見的。事務可以讀取未提交的資料,這也被稱為髒讀。這個級別會導致很多問題,從效能上來說,這個級別不會比其他的級別好太多,但卻缺乏其他級別的很多好處,除非真的有非常必要的理由,在實際應用中一般很少使用。

(2)read committed(提交讀)

乙個事務從開始直到提交之前,所做的任何修改對其他事務都是不可見的。

(3)repeatable read(可重複讀)

該級別解決了髒讀的問題。該級別保證了在同乙個事務中多次讀取同樣記錄的結果是一致的。但理論上,可重複讀隔離級別還是無法解決另外乙個幻讀的問題。所謂幻讀,指的是當某個事務在讀取某個範圍的記錄時,另外乙個事務又在該範圍內插入了新的記錄,當之前的事務再次讀取該範圍的記錄時,會產生幻行。可重複讀是mysql的預設事務隔離級別。

(4)serializable(可序列化)

最高的隔離級別。它通過強制事務序列執行,避免了前面說的幻讀的問題。簡單來說,會在讀取的每一行資料上都加鎖,所以可能導致大量的超時和鎖爭用的問題。實際應用中也很少用到這個隔離級別,只有在非常需要確保資料的一致性而且可以接受沒有併發的情況下,才考慮採用該級別。

1.innodb儲存引擎

innodb是mysql的預設事務性引擎,也是最重要、使用最廣泛的儲存引擎。它被設計用來處理大量的短期事務,很少會被回滾。innodb的效能和自動崩潰恢復特性,使得它在非事務型儲存的需求中也很流行。

2.myisam儲存引擎

myisam提供了大量的特性,包括全文索引、壓縮、空間函式等,但myisam不支援事務和行級鎖,而且有乙個毫無疑問的缺陷是崩潰後無法安全恢復。myisam對整張表加鎖,而不是針對行。

3.mysql內建的其他儲存引擎

archive引擎:該儲存引擎只支援insert和select操作。

blackhole引擎:該引擎沒有實現任何的儲存機制,它會丟棄所有插入的資料,不做任何儲存。

csv引擎:該引擎可以將普通的csv檔案作為mysql的表來處理,但這種表不支援索引。

federated引擎:該引擎是訪問其他mysql伺服器的乙個**,它會建立乙個到遠端mysql伺服器的客戶端連線,並將查詢傳輸到遠端伺服器執行,然後提取或者傳送需要的資料。

memory引擎:如果需要快速的訪問資料,並且這些資料不會被修改,重啟後丟失也沒有關係,那麼使用memory表是非常有用的。

merge引擎:merge表是由多個myisam表合併而來的虛擬表。

ndb集群引擎:作為sql和ndb原生協議之間的介面。

4.選擇合適的引擎

可以簡單地歸納為一句話:「除非需要用到某些innodb不具備的特性,並且沒有其他辦法可以替代,否則都應該優先選擇innodb引擎。」

5.轉換表的引擎(三種方法)

(1)alter table:alter table mytable engine = innodb; 這個語法可以使用任何的儲存引擎。但有乙個問題:需要執行很長時間。mysql會按行將資料從原表複製到一張新的表中,在複製期間可能會消耗系統所有的i/o能力,同時原表上會加上讀鎖。可以採用匯入匯出的方法替代。如果轉換表的儲存引擎,將會失去和原引擎相關的所有特性。

(2)匯出與匯入:可以使用mysqldump工具將資料匯出到檔案,然後修改檔案中的create table語句的儲存引擎選項,注意同時修改表名,因為同乙個資料庫中不能存在相同的表名,即使它們使用的是不同的儲存引擎。

(3)建立與查詢(create和select):這種轉換綜合了第一種方法的高效和第二種方法的安全。不需要匯出整個表的資料,而是先建立乙個新的儲存引擎的表,然後利用insert...select語法來導資料

資料量不大的話,這樣做工作得很好。如果資料量很大,則可以考慮做分批處理,針對每一段資料執行事務提交操作,以避免大事務產生過多的undo。假設有主鍵欄位id,重複執行以下語句,將資料匯入到新錶:

高效能MySQL學習筆記一 MySQL架構

mysql最與眾不同的特性是 它的儲存引擎架構,這種架構的設計將查詢處理以及其他系統任務和資料的儲存 提取相分離。這種處理和儲存相分離的設計可以在使用時根據效能 特性,以及其他需求來選擇資料儲存的方式。mysql預設採用自動提交模式。設定是否自動提交 1為自動提交,0禁用,禁用後,使用commit或...

《高效能MySql》一 MYSQL架構和歷史

mysql邏輯架構 1.mysql架構圖 併發控制 1.讀寫鎖 1 共享鎖 和 排他鎖 也叫讀鎖 和 寫鎖 2 寫鎖是排他的,也就是說乙個寫鎖會阻塞其他的寫鎖和讀鎖,這是出於安全策略的考慮。2.鎖粒度 1 一種提高共享資源併發性的方式就是讓鎖定的物件更有選擇性。盡量只鎖定需要修改的部分資料,而不是所...

《高效能MySQL》之MySQL查詢效能優化

響應時間過長。如果把查詢看做是乙個任務,那麼它由一系列子任務組成,每個子任務都會消耗一定的時間。如果要優化查詢,實際上優化其子任務,要麼消除其中一些子任務,要麼減少子任務的執行次數,要麼讓子任務執行得更快。查詢的生命週期 客戶端 伺服器 伺服器上解析 生成執行計畫 執行 返回結果給客戶端。其中 執行...