MySQL Online DDL與DML併發是否阻塞總結

来源:https://www.cnblogs.com/wy123/archive/2019/11/05/11798261.html
-Advertisement-
Play Games

MySQL DDL操作執行的三種方式 1,INPLACE,在進行DDL操作時,不影響表的讀&寫,可以正常執行表上的DML操作,避免與COPY方法相關的磁碟I/O和CPU周期,從而最小化資料庫的總體負載。 最小化負載有助於在DDL操作期間保持良好的性能和高吞吐量。 2,COPY,不允許併發執行過多個D ...


MySQL DDL操作執行的三種方式 1,INPLACE,在進行DDL操作時,不影響表的讀&寫,可以正常執行表上的DML操作,避免與COPY方法相關的磁碟I/O和CPU周期,從而最小化資料庫的總體負載。 最小化負載有助於在DDL操作期間保持良好的性能和高吞吐量。 2,COPY,不允許併發執行過多個DDL,執行過程中表不允許寫但可讀。 過程是通過創建一個新結構的臨時表,將數據copy到臨時表,完成後刪除原表,重命名新表的方式,需要拷貝原始表, 3,INSTANT,從 MySQL 8.0.12 開始被引入並預設使用。目前 INSTANT 演算法只支持增加列等少量 DDL 類型的操作,其他類型仍然會預設使用 INPLACE。
以下是MySQL 5.7版本中各種DDL操作的執行方式,總結一下: 1,如果DDL的執行方式是InPlace = YES ,那麼改DDL的執行會支持併發DML,不會影響表的增刪查改,
  1.1,如果DDL的執行方式是InPlace = YES &  Rebuilds Table = No,那麼Only Modifies Metadata一定為Yes,也即僅僅修改元數據,類似於INSTANT    1.2,如果DDL的執行方式是InPlace = YES  & Rebuilds Table = Yes,那麼Only Modifies Metadata一定為No,需要考慮Rebuilds Table對IO和CPU等資源的消耗 2,如果DDL的執行方式是InPlace = NO,那麼改DDL的執行期間表只讀,阻塞寫(增刪改),同時需要考慮對IO和CPU等資源的消耗 3,如果是INSTANT方式,類似於1.1   如下,對於執行期間不支持併發DML的操作,標記了出來,如果不是影響併發DML的操作,就不需要考慮第三方工具了,只需要考慮IO和CPU等資源的消耗。
因為用第三方工具同樣需要消耗IO以及CPU等資源。
正常來說操作,修改欄位數據類型,以及增加衍生列,修改衍生列欄位順序這三種,以及多數分區相關的操作的同時,不支持併發DML,其他DDL執行時都支持併發DML。   索引操作
CREATE INDEX name ON table (col_list);(ALTER TABLE tbl_name ADD INDEX name (col_list);)
DROP INDEX name ON table;(ALTER TABLE tbl_name DROP INDEX name;)
ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name, ALGORITHM=INPLACE, LOCK=NONE;
CREATE FULLTEXT INDEX name ON table(column);
CREATE TABLE geom (g GEOMETRY NOT NULL);ALTER TABLE geom ADD SPATIAL INDEX(g), ALGORITHM=INPLACE, LOCK=SHARED;
ALTER TABLE tbl_name DROP INDEX i1, ADD INDEX i1(key_part,...) USING BTREE, ALGORITHM=INPLACE;
  主鍵操作
ALTER TABLE tbl_name ADD PRIMARY KEY (column)
ALTER TABLE tbl_name DROP PRIMARY KEY
ALTER TABLE tbl_name DROP PRIMARY KEY, ADD PRIMARY KEY (column)

列操作

ALTER TABLE tbl_name ADD COLUMN column_name column_definition,
ALTER TABLE tbl_name DROP COLUMN column_name
ALTER TABLE tbl CHANGE old_col_name new_col_name data_type
ALTER TABLE tbl_name MODIFY COLUMN col_name column_definition FIRST
ALTER TABLE tbl_name CHANGE c1 c1 BIGINT
ALTER TABLE tbl_name CHANGE COLUMN c1 c1 VARCHAR(255)
ALTER TABLE tbl_name ALTER COLUMN col SET DEFAULT literal
ALTER TABLE tbl ALTER COLUMN col DROP DEFAULT
ALTER TABLE table AUTO_INCREMENT=next_value
ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NULL
ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NOT NULL
ALTER TABLE t1 MODIFY COLUMN c1 ENUM('a', 'b', 'c', 'd')
  衍生列(generated column)操作
ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) STORED)
ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED FIRST
ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL)
ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL FIRST
ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE
  外鍵操作
ALTER TABLE tbl1 ADD CONSTRAINT fk_name FOREIGN KEY index (col1)REFERENCES tbl2(col2) referential_actions;
ALTER TABLE tbl DROP FOREIGN KEY fk_name;
  表操作
ALTER TABLE tbl_name ROW_FORMAT = row_format
ALTER TABLE tbl_name KEY_BLOCK_SIZE = value
ALTER TABLE tbl_name STATS_PERSISTENT=0, STATS_SAMPLE_PAGES=20, STATS_AUTO_RECALC=1, ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE tbl_name CHARACTER SET = charset_name, ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name, ALGORITHM=COPY;
OPTIMIZE TABLE tbl_name;
ALTER TABLE tbl_name FORCE, ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE tbl_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE;
ALTER TABLE old_tbl_name RENAME TO new_tbl_name, ALGORITHM=INPLACE, LOCK=NONE;
  表空間操作
ALTER TABLE tbl_name ENCRYPTION='Y', ALGORITHM=COPY;

 

分區操作

 

    參考: https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html https://dbaplus.cn/news-11-2552-1.html    
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 昨天寫了使用 Dockerfile 定製鏡像。其中構建上下文這一塊沒有寫,今天把這一塊單獨拿出來寫一下。 Docker鏡像構建 簡單說下構建鏡像步驟: 1. cd Dockerfile 所在目錄; 2. 執行 docker build 構建命令: docker build t . 通過上面的工作流, ...
  • 1.ls 功能描述:用於顯示目錄內容,使用許可權是所有用戶 命令語法:ls [選項] [目錄] 選項含義: -a:列出目錄下的所有文件,包括以 . 開頭的隱含文件 -b:把文件名中不可輸出的字元用反斜杠加字元編號(就象在C語言里一樣)的形式列出 -c:輸出文件的 i 節點的修改時間,並以此排序 -d: ...
  • VMware vSphere克隆異常/dev/sda2:UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.(i.e.,without -a or -p options)[FAILED]***An error occurred during the file sy ...
  • 1.grep的作用 Global search regular expression(RE) ,簡稱grep;是一種強大的文本搜索工具,可以使用正則表達式搜索文本,並把匹配列印出來。 2.grep常用參數 -v #排除,取 -n #顯示行號 -E #支持擴展正則表達式(與egrep作用相同) -i ...
  • 寫在前面 之前寫了一篇arm linux gcc 5.4.0的安裝方法(https://www.cnblogs.com/fymeng/p/11637642.html),但是後來發現5.4.0這個版本可能有些太新了,所以又找了這個4.5.1版本(低版本),由FriendlyARM(友善之臂)提供,下麵 ...
  • 修改虛擬機的ip地址: 進入如下界面,直接修改子網ip即可。 查看網關: Linux網路環境配置: 第一種方式(自動獲取): 說明:登陸後,通過界面來設置自動獲取ip 我們先進入設置: 把自動連接勾上然後點應用。之後每次啟動系統的時候就可以自動連接網路了。 特點:Linux啟動後會自動獲取ip,缺點 ...
  • 本文依然是用的xftp上傳gz文件,然後在xShell上操作的,如果沒有安裝使用這兩個文件的請查閱之前的博客。 1.將下載好的文件用xftp上傳到對應的位置。 2.解壓文件:tar -zvxf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz 3.在/usr/lo ...
  • 工作中偶爾會出現:想用A數據表替換B數據表,然後把B數據表刪除。但是,又不知道B數據表在哪個視圖、存儲過程、函數、觸發器中使用過? 經過一番度娘,看到實現方法也不難,主要涉及兩個系統表:sysobjects及syscomments。 1、先來複習一下sysobjects表結構。 列名 數據類型 描述 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...