若您需要在不鎖表的前提下變更大量表資料,您可使用Data Management的無鎖變更。該功能通過將單個SQL拆分成多個批次執行,以實現不鎖表進行表資料變更,同時也可以減少DML操作對資料庫效能,空間等的影響。本文介紹在DMS中進行無鎖資料變更的方法。
前提條件
支援的資料庫類型:
MySQL:RDS MySQL、PolarDB MySQL版、MyBase MySQL、PolarDB分布式版、其他來源MySQL
PostgreSQL:RDS PostgreSQL、PolarDB PostgreSQL版、MyBase PostgreSQL、其他來源PostgreSQL
MariaDB:RDS MariaDB、其他來源MariaDB
OceanBase MySQL模式
PolarDB PostgreSQL版(相容Oracle)
執行個體的管控模式為穩定變更或安全協同。更多資訊,請參見查看管控模式。
注意事項
DML無鎖變更僅支援單表、簡單的SQL操作(例如UPDATE、DELETE等)。
美國地區的DMS暫不支援此功能。
操作步驟
- 登入Data Management 5.0。
在頂部功能表列中,選擇。
說明若您使用的是極簡模式控制台,請單擊左上方的
表徵圖,在導覽列中選擇。配置無鎖變更工單,配置完成後,單擊提交申請。部分參數資訊說明如下:
說明以安全協同執行個體舉例配置。自由操作或穩定變更管控模式的執行個體,在配置時僅需設定資料庫與變更SQL。
配置項
是否必填
說明
資料庫
是
搜尋並選擇目標資料庫。
說明您需要有目標資料庫的變更許可權。更多資訊,請參見查看我的許可權。
業務背景
否
建議填入業務需求的背景資訊,以降低溝通成本。
執行方式
是
選擇工單的執行方式:
審批通過後,提交者執行。
審批通過後,自動執行。
最後一個審批人執行。
說明管理員可以在中,修改執行方式列表。具體操作,請參見組態管理。
影響行數
是
預估本次更新會影響的資料行數,可在SQL Console中使用
count統計。說明如果資料持續寫入,則統計當前已存在的資料行數即可。
變更SQL
是
輸入DML(Data Manipulation Language),例如
UPDATE、DELETE、INSERT_SELECT。說明如果變更SQL輸入的是DDL,則您進行的是DDL無鎖結構變更任務。更多資訊請參見通過無鎖變更工單實現無鎖結構變更。
復原SQL
否
可直接執行的SQL語句,變更指令碼對應的逆向指令碼。
SQL文本
否
復原SQL選擇了文本,才會出現該配置項。輸入復原SQL,復原SQL為變更SQL對應的逆向指令碼。
附件
否
復原SQL選擇了附件,才會出現該配置項。單擊上傳檔案,上傳復原SQL附件。
說明附件僅支援.txt、.zip和.sql的檔案類型,最大不能超過15 MB。
變更相關人
否
設定的相關人員都可查看工單,並協同工作,非相關人員則不能查看工單(管理員、DBA除外)。
工單附件
否
上傳工單附件,補充當前工單資訊。
提交申請後,您可以開啟主備延遲檢查並確定閾值、修改SQL。
(可選)開啟主備延遲檢查、設定閾值。設定主備延遲檢查並確定閾值,以避免主備延遲過大,從而影響主備執行個體切換。
您可以在基本資料地區,單擊分批執行配置,設定合理的主備延遲閾值(單位:秒)。如果主備延遲大於閾值時,將中斷SQL執行。
說明目前僅支援RDS MySQL資料庫使用該功能。
(可選)修改SQL。
提交申請後,系統將自動進行SQL預檢查。如果預檢查失敗,您可以根據失敗原因修改SQL,修改後重試。
單擊提交審批。安全協同執行個體會根據設定的審批規則進行審批,穩定變更執行個體將自動通過審批。
等待審批通過後,在工單詳情頁的執行地區,單擊執行變更。
說明您可以在工單詳情頁的審批地區,查看審批進展。
配置任務執行參數。
配置項
說明
執行策略
立即執行:系統預設,單擊確認執行後立即執行工單任務。
定時執行:選擇任務開始執行時間。單擊確認執行後,在指定的時間執行該任務。
說明定時任務的實際執行時間可能與設定執行時間之間存在±1分鐘的誤差。
指定結束時間
指定任務結束時間。如果任務在指定結束時間之前沒有執行完畢,則系統將不再繼續執行未完成的SQL任務,防止高峰期執行任務,影響業務運作。
說明任務的實際結束時間可能與指定結束時間之間存在±1分鐘的誤差。
是否開啟主備檢查
為該資料庫開啟主備檢查後,可即時保障主備資料同步、保障資料庫高可用性和故障快速恢複能力。
灰階類型
批次執行SQL策略。
無灰階:DMS自動執行任務中的所有SQL。
灰階第一條SQL成功後暫停:第一條SQL執行成功後,DMS將會自動暫停執行SQL。如您需要繼續執行SQL,請單擊重試,剩餘SQL將會一次性執行完成,中間再無暫停。
每條SQL執行成功後暫停:每條SQL執行後都會自動暫停,需要您手動單擊重試來執行下一條SQL。
單擊確定執行。
說明已暫停任務重啟後,會重新開始執行任務。
您可以在執行地區,查看任務執行狀態、任務設定、詳情和調度日誌。
相關文檔
在進行無鎖資料變更後,您還可能需要進行如下操作:
無鎖資料變更的相關API如下:
常見問題
Q:無鎖資料變更是否支援複雜的SQL操作?
A:不支援。例如CREATE_INDEX和多表操作(例如DELETE語句中包含JOIN)。更多支援的SQL類型,請參見使用限制。
Q:DMS無鎖變更會檢測表上有鎖阻塞嗎?
A:DMS在無鎖資料變更時,會把一條大SQL拆成多個小批次進行分批執行,每執行一批就sleep 緩衝暫停一下,避免長時間佔用資源;實際執行時,不會提前做行鎖檢測,MySQL 依然會對修改的行加鎖,只是因為“小批量 + 暫停”,所以整體影響較小,無法保證100%不鎖表。DMS無鎖結構變更,會使用一個暫存資料表來類比執行你的 DDL 語句,提前檢測這個操作是否會導致鎖表或阻塞,如檢測會造成鎖表,則校正會失敗並給出提示。
Q:DMS無鎖變更任務增量回放校正是否支援調整?
A:支援調整校正,首先需要在 頁面中,搜尋並開啟“是否允許調整無鎖結果變更的回放資料校正比例”功能。
通過控制台進入對應的DDL工單。
在執行部分,點擊詳情按鈕。
找到對應的指令碼,點擊執行進度。
最下面有個校正比例,可以根據業務需求調整校正比例,單位為‰。