最全高效能MySQL筆記(共86頁)

2022-08-10 02:57:08 字數 2357 閱讀 2332

一、mysql架構與歷史a.併發控制

1.共享鎖(shared lock,讀鎖):共享的,相互不阻塞的

2.排他鎖(exclusive lock,寫鎖):排他的,乙個寫鎖會阻塞其他的寫鎖和讀鎖

b.事務

1.事務acid

* 原子性(atomicity)乙個事務必須被視為乙個不可分割的最小工作單元,整個事務中所有操作要麼全部提交成功,要麼全部失敗回滾,對於乙個事務來說,不可能只執行其中的一部分操作

* 一致性(consistency)資料庫總是從乙個一致性的狀態轉換到另外乙個一致性的狀態

* 隔離性(isolation)乙個事務所做的修改在最終提交以前,對其他事務是不可見的

* 永續性(durability)一旦事務提交,則其所做的修改就會永久儲存到資料庫中

2.四種隔離級別

* read uncommitted(未提交讀),事務中的修改,即使沒有提交,對其他事務也都是可見的,事務可以讀取未提交的資料,也被稱為髒讀(dirty read),這個級別會導致很多問題

* read committed(提交讀),大多數資料庫系統的預設隔離級別,乙個事務開始時,只能「看見」已經提交的事務所做的修改,乙個事務從開始直到提交之前,所做的任何修改對其他事務都是不可見的,也叫不可重複讀(nonrepeatable read),有可能出現幻讀(phantom read),指的是當某個事務在讀取某個範圍內的記錄時,另外乙個事務又在該範圍內插入了新的記錄,當之前的事務再次讀取該範圍的記錄時,會產生幻行(phantom row)

* repeatable read(可重複讀),通過innodb和xtradb儲存引擎,是mysql的預設事務隔離級別

* serializable(可序列化)最高端別,通過強制事務序列執行,避免了幻讀問題,會在讀取的每一行資料上都加鎖,可能導致大量的超時和鎖爭用的問題

3.死鎖:指兩個或多個事務在同一資源上相互占用,並請求鎖定對方占用的資源,從而導致惡性迴圈的現象

4.事務日誌:儲存引擎在修改表的資料時只需要修改其記憶體拷貝,再把該修改行為記錄到持久在硬碟上的事務日誌中,而不用每次都將修改的資料本身持久到磁碟。事務日誌持久以後,記憶體中被修改的資料在後台可以慢慢地刷回到磁碟,稱為預寫式日誌(write-ahead logging)

c.多版本併發控制

1.多版本併發控制(mvcc)是行級鎖的乙個變種,但是它在很多情況下避免了加鎖操作,因此開銷更低。雖然實現機制有所不同,但大都實現了非阻塞的讀操作,寫操作也只鎖定必要的行

2.mvcc的實現,是通過儲存資料在某個時間點的快照來實現的,有樂觀和悲觀兩種,只在repeatable read和read committed兩個隔離級別下工作

d.mysql的儲存引擎

1.mysql的.frm檔案儲存表的定義,show table status顯示表的相關資訊

2.除非有非常特別的原因需要使用其他的儲存引擎,否則應該優先考慮innodb引擎

3.不要輕易相信myisam比innodb快之類的經驗之談,這個結論並不是絕對的

二、mysql基準測試

a.為什麼需要基準測試

1.基準測試可以觀察系統在不同壓力下的行為,評估系統的容量,掌握哪些是重要的變化,或者觀察系統如何處理不同的資料

b.基準測試的策略

1.兩種主要的策略:

* 針對整個系統的整體測試(整合式full-stack)

* 單獨測試mysql(單元件式single-component)

2.測試何種指標:

* 吞吐量,指單位時間內的事務處理數,常用的測試單位是每秒事務數(tps),或每分鐘事務數(tpm)

* 響應時間或者延遲,用於測試任務所需的整體時間,根據具體的應用,測試的時間單位可能是微秒、毫秒、秒或者分鐘。通常使用百分比響應時間(percentile response time)來替代最大響應時間

* 併發性,需要關注的是正在工作中的併發操作,或者是同時工作中的執行緒數或者連線數,在測試期間記錄mysql資料庫的threads_running狀態值

* 可擴充套件性,給系統增加一倍的工作,在理想情況下就能獲得兩倍的效果(即吞吐量增加一倍),對於容量規範非常有用,可以提供其他測試無法提供的資訊,來幫助發現應用的瓶頸

最全高效能MySQL筆記(共86頁)

一 mysql架構與歷史a.併發控制 1.共享鎖 shared lock,讀鎖 共享的,相互不阻塞的 2.排他鎖 exclusive lock,寫鎖 排他的,乙個寫鎖會阻塞其他的寫鎖和讀鎖 b.事務 1.事務acid 原子性 atomicity 乙個事務必須被視為乙個不可分割的最小工作單元,整個事務...

建立高效能索引 《高效能Mysql》筆記2

crate table people last name varchar 50 not null,first name varchar 50 not null,dob date not null,gender enum m f not null,key last name,first name,do...

讀高效能mysql筆記

效能監控的好工具 newrelic 效能分析的好工具 percona toolkit show variables like slow show full processlist set profiling 1 select from score cal unsuccessed show profi...