最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql添加字段或索引導(dǎo)致鎖表的處理方式

 更新時(shí)間:2023年05月23日 10:51:49   作者:james東  
我們后端開(kāi)發(fā)人員在實(shí)現(xiàn)業(yè)務(wù)修改時(shí),經(jīng)常需要更新數(shù)據(jù)庫(kù)表結(jié)構(gòu),如增加字段、修改字段長(zhǎng)度等等,下面這篇文章主要給大家介紹了關(guān)于Mysql添加字段或索引導(dǎo)致鎖表的處理方式,需要的朋友可以參考下

mysql添加字段或索引為什么會(huì)鎖表

前幾天,在生產(chǎn)環(huán)境對(duì)數(shù)據(jù)庫(kù)的一張大表進(jìn)行新增字段的操作,結(jié)果直接導(dǎo)致該表被鎖,所有該表的增刪改查操作全部阻塞,服務(wù)器負(fù)載飆高,進(jìn)而影響到了線上業(yè)務(wù)。

鎖表時(shí)查看服務(wù)器日志,發(fā)現(xiàn)有大量如下圖所示的報(bào)錯(cuò)信息

從上圖分析可得數(shù)據(jù)庫(kù)連接池已經(jīng)沒(méi)有空閑的連接可用了,為了快速能夠解決這個(gè)問(wèn)題,使用show processlist顯示 數(shù)據(jù)庫(kù)所有正在運(yùn)行的線程相關(guān)信息,根據(jù)執(zhí)行時(shí)間可以準(zhǔn)確判斷出新增字段對(duì)應(yīng)的線程(如下圖所示),由于新增字段鎖表導(dǎo)致其他增刪改該表語(yǔ)句處于等待狀態(tài),通過(guò) kill processId 殺掉修改表結(jié)構(gòu)的語(yǔ)句,馬上恢復(fù)了正常。

事后,通過(guò)網(wǎng)上查閱資料,對(duì)于造成數(shù)據(jù)庫(kù)鎖表原因分析和復(fù)盤,不同的mysql版本對(duì)于添加字段導(dǎo)致鎖表有著不同的處理方式。

mysql版本5.6之前的處理 :

  • 首先創(chuàng)建新的臨時(shí)表,復(fù)制原表結(jié)構(gòu),并新增新字段
  • 然后把原表中數(shù)據(jù)導(dǎo)入到臨時(shí)表
  • 刪除原表
  • 最后重命名臨時(shí)表為原表名

通過(guò)mysql官網(wǎng)得知,MySQL 5.6后支持Online DDL(在線DDL),Online DDL就是允許在表上執(zhí)行DDL的操作(例如創(chuàng)建字段)的同時(shí)不阻塞并發(fā)的DML(SELECT、UPDATE、INSERT、DELETE)操作,也就是說(shuō)在執(zhí)行DDL語(yǔ)句時(shí),提供無(wú)鎖加字段或索引的機(jī)制,即在DDL語(yǔ)句后加 ALGORITHM=INPLACE,LOCK=NONE。

mysql版本5.6之后的處理 :

  • 例子:ALTER TABLE 表名ADD COLUMN …(此處省略),ALGORITHM = INPLACE, LOCK = NONE;

ALGORITHM 描述的是DDL的實(shí)現(xiàn)方式,LOCK 描述的是執(zhí)行DDL是否加鎖

ALGORITHM 有三個(gè)參數(shù):
Default (默認(rèn),由mysql自行決定) ,
INPLACE (對(duì)當(dāng)前表在引擎層對(duì)數(shù)據(jù)改動(dòng))
COPY (采用拷表方式進(jìn)行表變更,缺點(diǎn):需要多一倍存儲(chǔ),表很大的時(shí)候,可能因?yàn)榇疟P的容量不足而操作失敗)

LOCK 有四個(gè)參數(shù)
NONE (無(wú)鎖)
SHARED (共享鎖)
DEFAULT (默認(rèn),由mysql自行決定)
EXCLUSIVE (互斥鎖)

總結(jié):

mysql 5.6后為了避免mysql添加字段或索引鎖表的問(wèn)題只需要在添加字段或索引的執(zhí)行語(yǔ)句后加 ALGORITHM = INPLACE, LOCK = NONE;

對(duì)于大表的修改最好滿足以下條件:

盡量選擇流量小的時(shí)候才執(zhí)行sql執(zhí)行前需要查看是否有未提交的事務(wù)預(yù)先在預(yù)發(fā)布環(huán)境先行模擬對(duì)應(yīng)的場(chǎng)景,評(píng)估風(fēng)險(xiǎn)

到此這篇關(guān)于Mysql添加字段或索引導(dǎo)致鎖表的處理方式的文章就介紹到這了,更多相關(guān)Mysql添加字段導(dǎo)致鎖表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mysql中distinct與group by的去重方面的區(qū)別

    Mysql中distinct與group by的去重方面的區(qū)別

    distinct簡(jiǎn)單來(lái)說(shuō)就是用來(lái)去重的,而group by的設(shè)計(jì)目的則是用來(lái)聚合統(tǒng)計(jì)的,兩者在能夠?qū)崿F(xiàn)的功能上有些相同之處,但應(yīng)該仔細(xì)區(qū)分,因?yàn)橛缅e(cuò)場(chǎng)景的話,效率相差可以倍計(jì)。
    2020-03-03
  • mysql表分區(qū)的方式和實(shí)現(xiàn)代碼示例

    mysql表分區(qū)的方式和實(shí)現(xiàn)代碼示例

    通俗地講表分區(qū)是將一個(gè)大表,根據(jù)條件分割成若干個(gè)小表,下面這篇文章主要給大家介紹了關(guān)于mysql表分區(qū)的方式和實(shí)現(xiàn)代碼,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • mysql 隊(duì)列 實(shí)現(xiàn)并發(fā)讀

    mysql 隊(duì)列 實(shí)現(xiàn)并發(fā)讀

    隊(duì)列是常用的數(shù)據(jù)結(jié)構(gòu),基本特點(diǎn)就是先入先出,在事務(wù)處理等方面都要用到它,有的時(shí)候是帶有優(yōu)先級(jí)的隊(duì)列。當(dāng)隊(duì)列存在并發(fā)訪問(wèn)的時(shí)候,比如多線程情況下,就需要鎖機(jī)制來(lái)保證隊(duì)列中的同一個(gè)元素不被多次獲取
    2012-04-04
  • 如何解決mysql深度分頁(yè)問(wèn)題

    如何解決mysql深度分頁(yè)問(wèn)題

    這篇文章主要介紹了如何解決mysql深度分頁(yè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 安裝MySQL 5.7出現(xiàn)報(bào)錯(cuò):unknown variable ‘mysqlx_port=0.0‘的解決方法

    安裝MySQL 5.7出現(xiàn)報(bào)錯(cuò):unknown variable ‘mysqlx_port

    這篇文章主要介紹了安裝MySQL 5.7出現(xiàn)報(bào)錯(cuò):unknown variable ‘mysqlx_port=0.0‘的解決方法,文中通過(guò)圖文結(jié)合的方式介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • MySQL計(jì)劃任務(wù)(事件調(diào)度器) Event Scheduler介紹

    MySQL計(jì)劃任務(wù)(事件調(diào)度器) Event Scheduler介紹

    MySQL5.1.x版本中引入了一項(xiàng)新特性EVENT,顧名思義就是事件、定時(shí)任務(wù)機(jī)制,在指定的時(shí)間單元內(nèi)執(zhí)行特定的任務(wù),因此今后一些對(duì)數(shù)據(jù)定時(shí)性操作不再依賴外部程序,而直接使用數(shù)據(jù)庫(kù)本身提供的功能
    2013-10-10
  • 通過(guò)兩種方式增加從庫(kù)——不停止mysql服務(wù)

    通過(guò)兩種方式增加從庫(kù)——不停止mysql服務(wù)

    現(xiàn)在生產(chǎn)環(huán)境MySQL數(shù)據(jù)庫(kù)是一主一從,由于業(yè)務(wù)量訪問(wèn)不斷增大,故再增加一臺(tái)從庫(kù)。前提是不能影響線上業(yè)務(wù)使用,也就是說(shuō)不能重啟MySQL服務(wù),為了避免出現(xiàn)其他情況,選擇在網(wǎng)站訪問(wèn)量低峰期時(shí)間段操作
    2015-11-11
  • Mysql自增鎖(Auto-inc Locks)用法及說(shuō)明

    Mysql自增鎖(Auto-inc Locks)用法及說(shuō)明

    自增鎖是MySQL中用于控制自增值分配的機(jī)制,保證并發(fā)插入時(shí)不產(chǎn)生重復(fù)ID,MySQL 5.1引入了innodb_autoinc_lock_mode參數(shù)來(lái)控制自增鎖模式,包括傳統(tǒng)模式、連續(xù)模式和交錯(cuò)模式
    2025-12-12
  • web方式的mysql管理工具詳解

    web方式的mysql管理工具詳解

    這篇文章主要介紹了web方式的mysql管理工具,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • MySQL-MMM安裝指南(Multi-Master Replication Manager for MySQL)

    MySQL-MMM安裝指南(Multi-Master Replication Manager for MySQL)

    這篇文章主要介紹了mysql Multi-Master Replication Manager for MySQL的安裝方法,需要的朋友可以參考下
    2014-02-02

最新評(píng)論

呈贡县| 天柱县| 乳源| 洞头县| 晋城| 外汇| 琼中| 开远市| 宜宾县| 突泉县| 通道| 广平县| 威信县| 商都县| 泰顺县| 桐城市| 郯城县| 禹城市| 尚义县| 延长县| 盐源县| 英德市| 虞城县| 郯城县| 印江| 壶关县| 瓮安县| 红桥区| 汽车| 兰考县| 无锡市| 陈巴尔虎旗| 夹江县| 华阴市| 陆河县| 汶川县| 岱山县| 丽江市| 视频| 孟津县| 陇南市|