日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍

發布時間:2025/3/19 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

頁級:引擎 BDB。

表級:引擎 MyISAM , 理解為鎖住整個表,可以同時讀,寫不行

行級:引擎 INNODB , 單獨的一行記錄加鎖

表級,直接鎖定整張表,在你鎖定期間,其它進程無法對該表進行寫操作。如果你是寫鎖,則其它進程則讀也不允許

行級,,僅對指定的記錄進行加鎖,這樣其它進程還是可以對同一個表中的其它記錄進行操作。

頁級,表級鎖速度快,但沖突多,行級沖突少,但速度慢。所以取了折衷的頁級,一次鎖定相鄰的一組記錄。

MySQL 5.1支持對MyISAM和MEMORY表進行表級鎖定,對BDB表進行頁級鎖定,對InnoDB表進行行級鎖定。

對WRITE,MySQL使用的表鎖定方法原理如下:

如果在表上沒有鎖,在它上面放一個寫鎖。

否則,把鎖定請求放在寫鎖定隊列中。

對READ,MySQL使用的鎖定方法原理如下:

如果在表上沒有寫鎖定,把一個讀鎖定放在它上面

否則,把鎖請求放在讀鎖定隊列中。

InnoDB使用行鎖定,BDB使用頁鎖定。對于這兩種存儲引擎,都可能存在死鎖。這是因為,在SQL語句處理期間,InnoDB自動獲得行鎖定和BDB獲得頁鎖定,而不是在事務啟動時獲得。

行級鎖定的優點:

·???????? 當在許多線程中訪問不同的行時只存在少量鎖定沖突。

·???????? 回滾時只有少量的更改。

·???????? 可以長時間鎖定單一的行。

行級鎖定的缺點:

·???????? 比頁級或表級鎖定占用更多的內存。

·???????? 當在表的大部分中使用時,比頁級或表級鎖定速度慢,因為你必須獲取更多的鎖。

·???????? 如果你在大部分數據上經常進行GROUP BY操作或者必須經常掃描整個表,比其它鎖定明顯慢很多。

·???????? 用高級別鎖定,通過支持不同的類型鎖定,你也可以很容易地調節應用程序,因為其鎖成本小于行級鎖定。

在以下情況下,表鎖定優先于頁級或行級鎖定:

·???????? 表的大部分語句用于讀取。

·???????? 對嚴格的關鍵字進行讀取和更新,你可以更新或刪除可以用單一的讀取的關鍵字來提取的一行:

·??????????????? UPDATE tbl_name SET column=value WHERE unique_key_col=key_value;

·??????????????? DELETE FROM tbl_name WHERE unique_key_col=key_value;

·???????? SELECT 結合并行的INSERT語句,并且只有很少的UPDATE或DELETE語句。

·???????? 在整個表上有許多掃描或GROUP BY操作,沒有任何寫操作。

/* ========================= mysql 鎖表類型和解鎖語句 ========================= */

如果想要在一個表上做大量的 INSERT 和 SELECT 操作,但是并行的插入卻不可能時,可以將記錄插入到臨時表中,然后定期將臨時表中的數據更新到實際的表里。可以用以下命令實現:

mysql> LOCK TABLES real_table WRITE, insert_table WRITE;

mysql> INSERT INTO real_table SELECT * FROM insert_table;

mysql> TRUNCATE TABLE insert_table;

mysql> UNLOCK TABLES;

行級鎖的優點有:

在很多線程請求不同記錄時減少沖突鎖。

事務回滾時減少改變數據。

使長時間對單獨的一行記錄加鎖成為可能。

行級鎖的缺點有:

比頁級鎖和表級鎖消耗更多的內存。

鎖是計算機協調多個進程或線程并發訪問某一資源的機制,不同的數據庫的鎖機制大同小異。由于數據庫資源是一種供許多用戶共享的資源,所以如何保證數據并發訪問的一致性、有效性是所有數據庫必須解決的一個問題,鎖沖突也是影響數據庫并發訪問性能的一個重要因素。了解鎖機制不僅可以使我們更有效的開發利用數據庫資源,也使我們能夠更好地維護數據庫,從而提高數據庫的性能。

MySQL的鎖機制比較簡單,其最顯著的特點是不同的存儲引擎支持不同的鎖機制。

例如,MyISAM和MEMORY存儲引擎采用的是表級鎖(table-level-locking);BDB存儲引擎采用的是頁面鎖(page-level-locking),同時也支持表級鎖;InnoDB存儲引擎既支持行級鎖,也支持表級鎖,默認情況下是采用行級鎖。

上述三種鎖的特性可大致歸納如下:

1) 表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖沖突的概率最高,并發度最低。

2) 行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,并發度也最高。

3) 頁面鎖:開銷和加鎖時間界于表鎖和行鎖之間;會出現死鎖;鎖定粒度界于表鎖和行鎖之間,并發度一般。

三種鎖各有各的特點,若僅從鎖的角度來說,表級鎖更適合于以查詢為主,只有少量按索引條件更新數據的應用,如WEB應用;行級鎖更適合于有大量按索引條件并發更新少量不同數據,同時又有并發查詢的應用,如一些在線事務處理(OLTP)系統。

MySQL表級鎖有兩種模式:表共享讀鎖(Table Read Lock)和表獨占寫鎖(Table Write Lock)。什么意思呢,就是說對MyISAM表進行讀操作時,它不會阻塞其他用戶對同一表的讀請求,但會阻塞 對同一表的寫操作;而對MyISAM表的寫操作,則會阻塞其他用戶對同一表的讀和寫操作。

MyISAM表的讀和寫是串行的,即在進行讀操作時不能進行寫操作,反之也是一樣。但在一定條件下MyISAM表也支持查詢和插入的操作的并發進行,其機制是通過控制一個系統變量(concurrent_insert)來進行的,當其值設置為0時,不允許并發插入;當其值設置為1 時,如果MyISAM表中沒有空洞(即表中沒有被刪除的行),MyISAM允許在一個進程讀表的同時,另一個進程從表尾插入記錄;當其值設置為2時,無論MyISAM表中有沒有空洞,都允許在表尾并發插入記錄。

MyISAM鎖調度是如何實現的呢,這也是一個很關鍵的問題。例如,當一個進程請求某個MyISAM表的讀鎖,同時另一個進程也請求同一表的寫鎖,此時MySQL將會如優先處理進程呢?通過研究表明,寫進程將先獲得鎖(即使讀請求先到鎖等待隊列)。但這也造成一個很大的缺陷,即大量的寫操作會造成查詢操作很難獲得讀鎖,從而可能造成永遠阻塞。所幸我們可以通過一些設置來調節MyISAM的調度行為。我們可通過指定參數low-priority-updates,使MyISAM默認引擎給予讀請求以優先的權利,設置其值為1(set low_priority_updates=1),使優先級降低。

InnoDB鎖與MyISAM鎖的最大不同在于:一是支持事務(TRANCSACTION),二是采用了行級鎖。我們知道事務是由一組SQL語句組成的邏輯處理單元,其有四個屬性(簡稱ACID屬性),分別為:

原子性(Atomicity):事務是一個原子操作單元,其對數據的修改,要么全部執行,要么全都不執行;

一致性(Consistent):在事務開始和完成時,數據都必須保持一致狀態;

隔離性(Isolation):數據庫系統提供一定的隔離機制,保證事務在不受外部并發操作影響的“獨立”環境執行;

持久性(Durable):事務完成之后,它對于數據的修改是永久性的,即使出現系統故障也能夠保持。

InnoDB有兩種模式的行鎖:

1)共享鎖:允許一個事務去讀一行,阻止其他事務獲得相同數據集的排他鎖。

( Select * from table_name where ......lock in share mode)

2)排他鎖:允許獲得排他鎖的事務更新數據,阻止其他事務取得相同數據集的共享讀鎖和? 排他寫鎖。(select * from table_name where.....for update)

為了允許行鎖和表鎖共存,實現多粒度鎖機制;同時還有兩種內部使用的意向鎖(都是表鎖),分別為意向共享鎖和意向排他鎖。

InnoDB行鎖是通過給索引項加鎖來實現的,即只有通過索引條件檢索數據,InnoDB才使用行級鎖,否則將使用表鎖!

另外:插入,更新性能優化的幾個重要參數

bulk_insert_buffer_size

批量插入緩存大小, 這個參數是針對MyISAM存儲引擎來說的.適用于在一次性插入100-1000+條記錄時, 提高效率.默認值是8M.可以針對數據量的大小,翻倍增加.

concurrent_insert

并發插入, 當表沒有空洞(刪除過記錄), 在某進程獲取讀鎖的情況下,其他進程可以在表尾部進行插入.

值可以設0不允許并發插入, 1當表沒有空洞時, 執行并發插入, 2不管是否有空洞都執行并發插入.

默認是1 針對表的刪除頻率來設置.

delay_key_write

針對MyISAM存儲引擎,延遲更新索引.意思是說,update記錄時,先將數據up到磁盤,但不up索引,將索引存在內存里,當表關閉時,將內存索引,寫到磁盤. 值為 0不開啟, 1開啟. 默認開啟.

delayed_insert_limit, delayed_insert_timeout, delayed_queue_size

延遲插入, 將數據先交給內存隊列, 然后慢慢地插入.但是這些配置,不是所有的存儲引擎都支持, 目前來看, 常用的InnoDB不支持, MyISAM支持. 根據實際情況調大, 一般默認夠用了

/* ==================== MySQL InnoDB 鎖表與鎖行 ======================== */

由于InnoDB預設是Row-Level Lock,所以只有「明確」的指定主鍵,MySQL才會執行Row lock (只鎖住被選取的資料例) ,否則MySQL將會執行Table Lock (將整個資料表單給鎖住)。

舉個例子: 假設有個表單products ,里面有id跟name二個欄位,id是主鍵。

例1: (明確指定主鍵,并且有此筆資料,row lock)

SELECT * FROM products WHERE id='3' FOR UPDATE;

SELECT * FROM products WHERE id='3' and type=1 FOR UPDATE;

例2: (明確指定主鍵,若查無此筆資料,無lock)

SELECT * FROM products WHERE id='-1' FOR UPDATE;

例3: (無主鍵,table lock)

SELECT * FROM products WHERE name='Mouse' FOR UPDATE;

例4: (主鍵不明確,table lock)

SELECT * FROM products WHERE id<>'3' FOR UPDATE;

例5: (主鍵不明確,table lock)

SELECT * FROM products WHERE id LIKE '3' FOR UPDATE;

注1: FOR UPDATE僅適用于InnoDB,且必須在交易區塊(BEGIN/COMMIT)中才能生效。

注2: 要測試鎖定的狀況,可以利用MySQL的Command Mode ,開二個視窗來做測試。

在MySql 5.0中測試確實是這樣的

另外:MyAsim 只支持表級鎖,InnerDB支持行級鎖 添加了(行級鎖/表級鎖)鎖的數據不能被其它事務再鎖定,也不被其它事務修改(修改、刪除) 是表級鎖時,不管是否查詢到記錄,都會鎖定表 此外,如果A與B都對表id進行查詢但查詢不到記錄,則A與B在查詢上不會進行row鎖,但A與B都會獲取排它鎖,此時A再插入一條記錄的話則會因為B已經有鎖而處于等待中,此時B再插入一條同樣的數據則會拋出Deadlock found when trying to get lock; try restarting transaction然后釋放鎖,此時A就獲得了鎖而插入成功

總結

以上是生活随笔為你收集整理的mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 草一色| 人与嘼交av免费 | 午夜尤物 | 末路1997全集免费观看完整版 | 国产精品88久久久久久妇女 | 五月婷婷导航 | 5566毛片 | 国产av一区二区不卡 | 黄色一级二级 | av在线看片 | 中文字幕视频一区二区 | 美女露胸软件 | 五月天精品在线 | 欧美亚洲综合另类 | 天堂av资源网 | 国产精品丝袜在线观看 | 黄色不卡av | 欧美另类极品 | 999成人网| 无码人妻精品一区二 | 在线不卡中文字幕 | 人人妻人人澡人人爽精品日本 | 国产精品毛片va一区二区三区 | 成人av一区二区在线观看 | 日本a天堂 | 911成人网| 狠狠躁夜夜躁 | 乱岳| 久久五十路 | 一区二区免费视频 | 在线观看日本 | 超碰在线进入 | 2019天天干 | 欧美一级黄色录像 | 成人综合婷婷国产精品久久 | 国产一区二区色 | 日韩在线激情视频 | 人体内射精一区二区三区 | 高清久久久 | 成人三级在线播放 | 亚洲欧美视频二区 | 欧洲精品视频在线观看 | 视频免费在线观看 | 看黄色小视频 | 亚洲欧美日韩在线一区 | 亚洲色图激情 | 一区二区国产电影 | 亚洲九区 | 一个人在线观看www软件 | 免费无码毛片一区二区app | 91九色国产ts另类人妖 | 久久艹精品视频 | 麻豆视频入口 | 无码人妻熟妇av又粗又大 | 国内精品久久久久久 | 久久久精品视频免费 | 99精品久久久久久 | 国产99免费视频 | 国产精品va无码一区二区三区 | 一区二区三区视频在线 | 欧美极品喷水 | 领导揉我胸亲奶揉下面 | 四虎视频国产精品免费 | 日韩一区免费观看 | 一区二区福利电影 | 日本骚少妇 | 亚洲综合插 | 青青草网址 | 大胸喷奶水www视频妖精网站 | 污污内射在线观看一区二区少妇 | 一级片免费观看视频 | 免费看欧美黑人毛片 | 亚洲黄网站在线观看 | 好吊妞视频在线观看 | 精品无码久久久久 | 中文字幕一区二区三区精彩视频 | 精品国产一区二区三区久久久蜜臀 | 男男全肉变态重口高h | 午夜一区二区三区免费 | 黄色污污网站 | 天堂网在线资源 | 在线中文字幕网站 | 欧美成人精品一区二区三区 | 黄色国产 | 国产91精品久久久久久久网曝门 | 一级做a视频| 九九免费 | 在线精品免费视频 | www国产亚洲精品久久网站 | 中文字幕免| 91视频日本| 亚洲一区二区三区四 | 波多野结衣丝袜 | av无码精品一区二区三区 | 一级日韩片| 亚洲在线天堂 | 欧美一级网站 | 99这里有精品视频 | 欧美一区二区三区免费视频 |