尚矽谷Mysql高階day12 p54 62

2021-10-14 09:35:26 字數 1942 閱讀 6314

今天是2021-1-10。

1.偏向於myisam引擎,開銷小,加鎖快,發生鎖衝突的概率較高。不會產生死鎖,加鎖的粒度較大,所以併發效率也較低

2.**show open tables;**檢視所有庫的鎖

3.lock table 表名 read/write,給表新增讀鎖或者寫鎖

4.會話s1對book表加了讀鎖以後。s1可以查詢book表的資料,不能修改book表的資料,並且也不能對s1會話中的其他表進行任何操作。此時s2可以操作其他沒有加鎖的表,也可以查詢book表的資料,但是如果去更新book表的資料,則必須一直阻塞等待s1釋放掉對book的讀鎖,才能進行操作。

5.會話s1對book表加了寫鎖以後。s1可以查詢book表的資料,也能修改book表的資料,但不能對s1會話中的其他表進行任何操作。s2查詢或者更新book表的資料,需要一直阻塞等待s1釋放寫鎖,可以操作其他沒有加鎖的表

6.myiasm引擎,在執行select語句之前,會對目標表加讀鎖。執行增刪改操作之前。會對目標表加寫鎖

1.偏向於innodb引擎,開銷較大,加鎖慢,會出現死鎖,加鎖的粒度較小,發生鎖衝突的概率較低,併發效率較高。

2.innodb支援事務,預設的隔離級別為可重複讀。此時我們有兩個會話s1和s2,都關閉了事務自動提交,s1對記錄1的字段a加了100並提交,s2在不提交時,只能讀到a的原值,提交後才能讀到a+100後的值。

3.行讀鎖s:當乙個事務讀取一條記錄的時候,不會阻塞其他事務對同一記錄的讀請求,但會阻塞對其的寫請求。當讀鎖釋放後,才會執行其他事務的寫操作。

4.行寫鎖x:當乙個事務對一條記錄進行寫操作時,會阻塞其他事務對同一表的讀寫操作,當該鎖釋放後,才會執行其他事務的讀寫操作。

5.如果多個事務都去更新同一行記錄,會造成效能問題,可以通過 innodb_lock_wait_timeout 來解決。innodb_lock_wait_timeout 是事務等待獲取資源的最長時間,單位為秒。如果超過時間還未分配到資源,則會返回應用失敗。

6.注意,innodb在試圖給一行記錄上行鎖之前,必須先獲得記錄所在表的同型別鎖,比如給行1上行讀鎖,那麼就得先獲取表讀鎖。表讀鎖即is,表寫鎖即ix

7.注意,如果sql語句中的字段沒有使用到索引,那麼innodb就無法通過索引給對應的記錄加行鎖,需要全表掃瞄,就會導致原本的行鎖公升級為表鎖,影響其他事務對錶的操作,所以字段盡量使用索引。

當使用範圍條件索引資料時,對於需要加鎖的一行記錄,innodb 會對符合條件的資料索引項加鎖。對於鍵值在條件範圍內但並不存在的記錄,叫做「間隙(gap)」,innodb 也會對這個「間隙」加鎖,這就是間隙鎖。間隙鎖和行鎖合稱(next-key鎖)。

比如s1執行了一條sql:....where a>1 and a<6,然後尚未提交事務。此時另乙個事務s2希望插入a=2的一條記錄,但是此時欄位a沒有2這個值,所以s2這個插入操作進入阻塞等待s1釋放鎖。

可以說間隙鎖也保證了資料的一致性,對於上例來說,如果在還沒提交事務之前,s2插入了本不存在的記錄,s1再次執行select語句,就會產生幻讀。

1.盡可能讓資料檢索通過索引完成,避免 innodb 因為無法通過索引加行鎖,而導致公升級為表鎖的情況。換句話說就是,多用行鎖,少用表鎖。

2.加索引的時候盡量準確,避免造成不必要的鎖定影響其他查詢。

3.儘量減少給予範圍的資料檢索(間隙鎖),避免因為間隙鎖帶來的影響,鎖定了不該鎖定的記錄。

4.盡量控制事務的大小,減少鎖定的資源量和鎖定時間。

5.盡量使用較低階別的事務隔離,減少 mysql 因為事務隔離帶來的成本。

開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般。

主從複製目前還用不太到,就結束了,跟著陽哥一路走下來也是收穫良多,至於主從複製,以後負責資料庫這方面再看吧。實習了以後,這也是畢業之前最後乙個自己自主去學習的東西了,接下來就是根據公司的需求去學習了,redis、kafka見。

2021-1-10 20:59

尚矽谷Mysql高階day3 p21 23

今天是2020 12 29 explain關鍵字,寫在sql語句最前面,執行sql語句後可以顯示該語句的執 況 一。explain id select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序,有如下情況 1.id相同,執行順序由上至下 2.如果使用了子查詢,id不同時...

尚矽谷Mysql高階day4 p24 28

今天是2020 12 30。一。explain type 1.顯示查詢使用了何種型別,從最好到最差依次是 system,const,eq ref,ref,range,index,all 2.需要保證查詢至少到range級別,最好能到ref 3.system 表只有一行記錄,等於是系統表,是const...

day12 裝飾器高階

day12 裝飾器高階 裝飾器高階 functools.wraps 帶引數的裝飾器 多個裝飾器裝飾用乙個函式 def outer args,kwargs 接收的時候是聚合 成元祖的形式 print args print args def inner args print inner args inn...