欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql添加字段或索引導致鎖表的處理方式

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

mysql添加字段或索引為什么會鎖表

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

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

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

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

mysql版本5.6之前的處理 :

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

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

mysql版本5.6之后的處理 :

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

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

ALGORITHM 有三個參數(shù):
Default (默認,由mysql自行決定) ,
INPLACE (對當前表在引擎層對數(shù)據(jù)改動)
COPY (采用拷表方式進行表變更,缺點:需要多一倍存儲,表很大的時候,可能因為磁盤的容量不足而操作失敗)

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

總結(jié):

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

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

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

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

相關(guān)文章

  • Mysql5.7.11綠色版安裝教程圖文詳解

    Mysql5.7.11綠色版安裝教程圖文詳解

    本文通過圖文并茂的形式給大家展示Mysql5.7.11綠色版安裝教程,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-01-01
  • MySQL聯(lián)表查詢基本操作之left-join常見的坑

    MySQL聯(lián)表查詢基本操作之left-join常見的坑

    這篇文章主要給大家介紹了關(guān)于MySQL聯(lián)表查詢基本操作之left-join的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-05-05
  • MySQL正則表達式regexp_replace函數(shù)的用法實例

    MySQL正則表達式regexp_replace函數(shù)的用法實例

    regexp_replace的使用非常靈活,且容易忘記,故做此筆記,下面這篇文章主要給大家介紹了關(guān)于MySQL正則表達式regexp_replace函數(shù)的用法實例,需要的朋友可以參考下
    2022-09-09
  • IDEA連接mysql時區(qū)問題解決

    IDEA連接mysql時區(qū)問題解決

    在使用MySQL數(shù)據(jù)庫時,經(jīng)常會遇到需要設(shè)置時區(qū)的情況,本文主要介紹了IDEA連接mysql時區(qū)問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • mysql如何將時間格式化為yyyy-MM-dd或yyyy-MM-dd?HH:mm:ss

    mysql如何將時間格式化為yyyy-MM-dd或yyyy-MM-dd?HH:mm:ss

    這篇文章主要介紹了mysql如何將時間格式化為yyyy-MM-dd或yyyy-MM-dd?HH:mm:ss問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • MySQL8 全文索引的實現(xiàn)方法

    MySQL8 全文索引的實現(xiàn)方法

    MySQL8支持全文索引和全文搜索,本文主要介紹了MySQL8全文索引的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • Centos7安裝和配置Mysql5.7

    Centos7安裝和配置Mysql5.7

    網(wǎng)上關(guān)于Linux安裝mysql數(shù)據(jù)庫的教程數(shù)不勝數(shù),但是,大多教程都是漏洞百出。今天,為了幫助各位需要的人,從而寫下Centos7安裝配置mysql5.7的教程。
    2018-02-02
  • 如何用workbench導出mysql數(shù)據(jù)庫關(guān)系圖

    如何用workbench導出mysql數(shù)據(jù)庫關(guān)系圖

    用workbench導出mysql數(shù)據(jù)庫關(guān)系圖的解決方法,需要的朋友請往下閱讀
    2013-03-03
  • mysql之過濾分組的具體實現(xiàn)

    mysql之過濾分組的具體實現(xiàn)

    在MySQL中過濾分組數(shù)據(jù)通常使用GROUP BY結(jié)合HAVING子句和WHERE子句,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • Mysql多主一從數(shù)據(jù)備份的方法教程

    Mysql多主一從數(shù)據(jù)備份的方法教程

    這篇文章主要給大家介紹了關(guān)于Mysql多主一從數(shù)據(jù)備份的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧
    2018-12-12

最新評論