国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL InnoDB如何應(yīng)對死鎖

2024-07-24 12:34:39
字體:
供稿:網(wǎng)友
  死鎖是事務(wù)處理型數(shù)據(jù)庫系統(tǒng)的一個經(jīng)典問題,但是它們并不是很危險的, 除非它們?nèi)绱说仡l繁以至于你根本處理不了幾個事務(wù)。 當(dāng)因死鎖而產(chǎn)生了回滾時,你通常可以在你的應(yīng)用程序中重新發(fā)出一個事務(wù)即可。
 
  InnoDB 使用自動地行級鎖定。你可能恰好在插入或刪除單一一條記錄時產(chǎn)生死鎖。 這是因?yàn)檫@些操作并不是真正“原子(atomic)”級的:他們會自動地在鎖定 inserted/deleted 行的索引記錄(可能有幾個)。
  
  可以通過下面所示的技巧來應(yīng)付死鎖或減少死鎖的次數(shù):
 
  在 MySQL >=3.23.52 和 >= 4.0.3 的版本中使用 SHOW INNODB STATUS 來確定引起最后一個死鎖的原因。這可以幫助你調(diào)整你的應(yīng)用程序來避免死鎖。
  總是準(zhǔn)備在因死鎖而發(fā)生錯誤時重新發(fā)出一個事務(wù)。死鎖并不危險。僅僅只需重試一遍。
  經(jīng)常提交你的事務(wù)。小的事務(wù)有較少的碰撞可能。
 
  死鎖檢測與回滾
  InnoDB 會自動檢測一個事務(wù)的死鎖并回滾一個或多個事務(wù)來防止死鎖。從 4.0.5 版開始,InnoDB 將設(shè)法提取小的事務(wù)來進(jìn)行回滾。一個事務(wù)的大小由它所插入(insert)、更新(update)和刪除(delete)的數(shù)據(jù)行數(shù)決定。 Previous to 4.0.5, InnoDB always rolled back the transaction whose lock request was the last one to build a deadlock, that is, a cycle in the waits-for graph of transactions.
 
  InnoDB 不能檢測出由 MySQL 的 LOCK TABLES 語句引起的死鎖,或其它的表類型中的鎖定所引起的死鎖。你不得不通過在 my.cnf 中設(shè)置 innodb_lock_wait_timeout 參數(shù)來解決這些情形。
 
  當(dāng) InnoDB 執(zhí)行一個事務(wù)完整的回滾,這個事務(wù)所有所加的鎖將被釋放。然而,如果只一句的 SQL 語句因結(jié)果返回錯誤而進(jìn)行回滾的,由這條 SQL 語句所設(shè)置的鎖定可能會被保持。這是因?yàn)?InnoDB r的行鎖存儲格式無法知道鎖定是由哪個 SQL 語句所設(shè)置。

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜兴市| 利川市| 安陆市| 丰顺县| 宁蒗| 拉孜县| 板桥市| 江川县| 麻城市| 类乌齐县| 长宁县| 修文县| 临城县| 天长市| 章丘市| 九台市| 淮阳县| 祁东县| 万全县| 陕西省| 南郑县| 河西区| 嘉义市| 门头沟区| 观塘区| 苗栗市| 文安县| 平泉县| 米脂县| 进贤县| 成武县| 甘谷县| 三台县| 新田县| 民县| 民权县| 红原县| 高雄市| 渝中区| 襄汾县| 白朗县|