讀msyql 高效能的點點滴滴 第一章

2021-08-19 17:20:13 字數 1101 閱讀 1423

1: 共享鎖和排他鎖,也稱讀鎖和寫鎖。  讀鎖是不阻塞的,多個客戶可以在同乙個時刻讀取同一資源,而不互相干擾。寫鎖是阻塞的,乙個寫鎖會阻塞其他的寫鎖和讀書。

2: 鎖力度: 表鎖,開銷小,併發支援度低(相對於行鎖); 行鎖,開銷大,併發支援度高。行鎖在儲存引擎層實現,而mysql 伺服器層沒有實現。

3: 事務的隔離級別:規定了乙個事務內的修改,哪些是在事務內或者事務間是可見的,哪些是不可見的。事務是在儲存引擎層實現的,所以同乙個事務在多個儲存引擎層之間操作是不可能的。

隔離級別

髒讀不可重複讀可能性

幻讀可能性

加鎖讀read uncommited

yesyes

yesno

read commited

noyes

yesno

repeatable read

nono

yesno

serializable

nono

noyes

4: 死鎖: 多個事務在同一資源上相互占用,請求鎖定對方的占用的資源,從而導致惡性迴圈的現象。當多個事務試圖以不同的順序鎖定同一資源的時候,就可能產生死鎖。多個事務同時鎖定同乙個資源的時候,也會產生死鎖。鎖的行為和順序是和儲存引擎相關的的,innodb 儲存引擎處理死鎖的方式,是通過回滾持有最小行級排他鎖的事物。

5: 多版本併發控制 mvcc

mvcc 可以理解為是行級鎖的乙個變種,但是它在很多情況下避免了加鎖的操作,因此開銷更低。雖然實現機制不同,但是大都實現了非堵塞的讀操作,寫操作也只鎖定必要的行。mysql 的mvcc 解決了預設隔離級別 可重複讀的幻讀的情況。

innodb mvcc 實現機制:是通過在每乙個行末尾增加兩個隱藏的列來實現。這兩個列實際儲存的是系統的版本號,乙個是建立事務的版本號,乙個是刪除事務的版本號。 每個事務開啟的版本號,是當前系統版本號自動遞增。

mvcc 只在可重複讀和提交讀兩個隔離級別下實現

疑問:1: 讀鎖是共享鎖,為什麼還要加鎖?

2:mysql 預設採用自動提交模式(auto commit),如果不是顯示開啟乙個事務,則每乙個查詢都被當作乙個事務執行提交操作。為什麼這麼做?開啟事務難道不影響效能?

3: 死鎖可以避免嗎?減少死鎖的方法有哪些?

C 的點點滴滴

函式傳值有三種方式 按值傳遞 pass by value 按位址傳遞 pass by address 和按引用傳遞 pass by reference 不同的是,按值傳遞方式中,函式部分不能改變主函式中實參的值。而按位址傳遞和按引用傳遞均可以改變主函式中實參的值。按值傳遞,實參和形參均為同一型別的物...

點點滴滴的積累

大學本科的四年裡,感覺過的很平庸。沒有學到什麼東西,就畢業了,那是放縱的大學生活。2005年,研2 時,因為要做畢業課題,我開始學習程式設計 因為師兄們畢業走了,我只能自己看書。當你知道該幹什麼,又沒人帶你的時候那是乙個痛苦的過程。半年mfc學到了一點皮毛,然後半年時間一直用在cplusplus上。...

實習的點點滴滴

markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細語法參考幫助?本編輯器支援markdown extra,擴充套件了很多好用的功能。具體請參考...