supremum pseudo-record鎖影響
在開發中,經常會做這類的判斷:根據主鍵值查詢,如果不存在,則插入;否則更新。
例如
表結構
使用方式
當N超過表裡的最大值時,兩種方式都會對primary索引的 supremum pseudo-record加一個X鎖,導致其他的insert會被阻塞
supremum pseudo-record :相當於比索引中所有值都大,但卻不存在索引中,相當於最後一行之後的間隙鎖
For the last interval, the next-key lock locks the gap above the largest value in the index and the “supremum”pseudo-record having a value higher than any value actually in the index. The supremum is not a real index record, so, in effect, this next-key lock locks only the gap following the largest index value.
建議改成原子操作, 不會阻塞其他insert
例如
表結構
點選(此處)摺疊或開啟
-
CREATE TABLE `t` (
-
`id` INT(11) NOT NULL AUTO_INCREMENT,
-
`val` BIGINT(20) NOT NULL,
-
PRIMARY KEY (`id`)
- ) ENGINE=INNODB DEFAULT CHARSET=utf8;
使用方式
點選(此處)摺疊或開啟
-
START TRANSACTION;
-
-
-- 方式一
-
SELECT id FROM `t` WHERE `id` ='N' LOCK IN SHARE MODE;
-
IF (FOUND_ROWS() <= 0) THEN
-
-- do insert
-
end if;
-
-
-- 方式二
-
UPDATE `t` SET `val` = 'XX' WHERE `id` ='N';
-
IF (ROW_COUNT() <= 0) THEN
-
-- do insert
-
end if;
-
- commit;
當N超過表裡的最大值時,兩種方式都會對primary索引的 supremum pseudo-record加一個X鎖,導致其他的insert會被阻塞
supremum pseudo-record :相當於比索引中所有值都大,但卻不存在索引中,相當於最後一行之後的間隙鎖
For the last interval, the next-key lock locks the gap above the largest value in the index and the “supremum”pseudo-record having a value higher than any value actually in the index. The supremum is not a real index record, so, in effect, this next-key lock locks only the gap following the largest index value.
建議改成原子操作, 不會阻塞其他insert
點選(此處)摺疊或開啟
- START TRANSACTION;
- insert into ... on duplicate key update `val`='XX';
-
- commit;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-1070422/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- infimum,supremum鎖二REM
- Oracle六大鎖模式級別越高影響越多Oracle模式
- 使用者被鎖定不影響JOB的執行
- 獨家揭秘丨GreatSQL 的MDL鎖策略升級對執行的影響SQL
- “影響者研究”系列(一):社會網路化時代影響者對營銷創新的影響
- hive NULL值影響HiveNull
- IO多路複用和多執行緒會影響Redis分散式鎖嗎?執行緒Redis分散式
- 處處遭遇尷尬,國行Switch鎖卡將會造成怎樣的影響
- return false影響事件冒泡False事件
- 影響力的靜模式模式
- 影響flashback table的操作!
- “影響者研究”系列(三):如何藉助網路影響者做營銷?
- IMF:AI將影響全球約40%的工作 技能要求越高的工作影響越大AI
- 【Oracle】-【COMMIT對索引的影響】-從trace看COMMIT對索引的影響OracleMIT索引
- HTTP會影響網速嗎HTTP
- 業務資料抓取的影響
- OSS支援HTTP/2已知影響HTTP
- 勒索軟體攻擊影響
- [zt] 影響SQL效能的原因SQL
- Docker 到底影響了什麼?Docker
- 別讓工作影響生活薦
- 批操作效能影響診斷
- shrink 操作對索引的影響索引
- Update操作對索引的影響索引
- 《影響力》閱讀筆記筆記
- “影響者研究”系列(四):從關係和表達的角度發現影響者
- 一部影響美國網路安全政策的電影
- react引入相同元件時互不影響React元件
- 如何打造個人技術影響力
- 影響mysql效能的因素都有哪些MySql
- 影響HTTP效能的常見因素HTTP
- unusable index對DML/QUERY的影響Index
- 海外伺服器對SEO影響?伺服器
- MySQL alter 新增列對dml影響MySql
- 影響MySQL效能的硬體因素MySql
- 影響MySQL效能的硬體因MySql
- margin-top影響父元素定位
- Arraysize 對consistent get的影響