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

MYSQL刪除視圖時視圖被lock的解決方案

 更新時間:2026年01月14日 09:16:21   作者:壹米飯  
在MySQL 8.0中執(zhí)行DROP VIEW時遇到"Waiting for table metadata lock"錯誤,因?yàn)橐晥D或其依賴的表被其他會話持有元數(shù)據(jù)鎖,解決方法包括查找阻塞的會話,終止會話,并采取預(yù)防措施以避免未來出現(xiàn)類似問題,需要的朋友可以參考下

背景

mysql 8.0 刪除視圖時 DROP VIEW dev_licos_kmlc_yt.view_pro_product_distribution_cathode_copper_details_v2 報(bào)錯? Waiting for table metadata lock

解決方案

你在 MySQL 8.0 中執(zhí)行 DROP VIEW 時遇到 “Waiting for table metadata lock” 錯誤,說明該視圖(或其依賴的表)當(dāng)前被其他會話持有元數(shù)據(jù)鎖(metadata lock),導(dǎo)致你的 DROP 操作被阻塞。

原因分析

在 MySQL 中,任何對表結(jié)構(gòu)或視圖的操作(如 DROP、ALTER、CREATE)都需要獲取元數(shù)據(jù)鎖(MDL) 。如果另一個會話正在:

  • 執(zhí)行一個長時間運(yùn)行的查詢(SELECT/INSERT/UPDATE/DELETE)涉及該視圖或其基表;
  • 開啟了一個事務(wù)但未提交,并且事務(wù)中使用了該視圖或相關(guān)表;
  • 正在執(zhí)行 DDL(如 ALTER TABLE)等操作;

那么你的 DROP VIEW 就會一直等待,直到那個會話釋放鎖。

注意:即使視圖本身不包含數(shù)據(jù),只要它引用的基表被鎖定,DROP VIEW 也會被阻塞。

解決方法

1.查找阻塞的會話

登錄 MySQL,執(zhí)行以下語句查看當(dāng)前元數(shù)據(jù)鎖等待情況:

SELECT * FROM performance_schema.metadata_locks 
WHERE OBJECT_SCHEMA = 'dev_licos_kmlc_yt' 
  AND OBJECT_NAME = 'view_pro_product_distribution_cathode_copper_details_v2';

或者更通用的方式:查看所有等待或持有 MDL 的線程:

SELECT 
    r.trx_id waiting_trx_id,
    r.trx_mysql_thread_id waiting_thread,
    r.trx_query waiting_query,
    b.trx_id blocking_trx_id,
    b.trx_mysql_thread_id blocking_thread,
    b.trx_query blocking_query
FROM 
    information_schema.innodb_lock_waits w
INNER JOIN 
    information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id
INNER JOIN 
    information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id;

注意:上面這個查的是 InnoDB 行鎖,不一定適用于元數(shù)據(jù)鎖。更準(zhǔn)確的是用 performance_schema:

-- 啟用 performance_schema(默認(rèn)已啟用)
SELECT 
    pl.processlist_id AS blocked_pid,
    pl.info AS blocked_sql,
    ml.lock_type,
    ml.lock_status,
    ml.owner_thread_id
FROM 
    performance_schema.metadata_locks ml
JOIN 
    performance_schema.threads t ON ml.owner_thread_id = t.thread_id
JOIN 
    information_schema.processlist pl ON t.processlist_id = pl.id
WHERE 
    ml.object_schema = 'dev_licos_kmlc_yt'
    AND ml.object_name = 'view_pro_product_distribution_cathode_copper_details_v2'
    AND ml.lock_status = 'PENDING';

也可以直接看誰持有該對象的鎖:

SELECT 
    pl.id AS process_id,
    pl.user,
    pl.host,
    pl.db,
    pl.command,
    pl.time AS duration_seconds,
    pl.state,
    pl.info AS current_sql
FROM 
    performance_schema.metadata_locks ml
JOIN 
    performance_schema.threads t ON ml.owner_thread_id = t.thread_id
JOIN 
    information_schema.processlist pl ON t.processlist_id = pl.id
WHERE 
    ml.object_schema = 'dev_licos_kmlc_yt'
    AND ml.object_name = 'view_pro_product_distribution_cathode_copper_details_v2'
    AND ml.lock_status = 'GRANTED';

2.終止阻塞的會話

找到阻塞的 process_id(即 pl.id),然后 kill 它:

KILL <process_id>;

例如:

KILL 12345;

謹(jǐn)慎操作!確保該會話可以被安全終止(比如是空閑連接、測試查詢等)。

3.預(yù)防措施

  • 避免在業(yè)務(wù)高峰期執(zhí)行 DDL(包括 DROP VIEW)。
  • 確保應(yīng)用中的事務(wù)及時提交,不要長時間開啟事務(wù)。
  • 對于只讀查詢,盡量使用短連接或設(shè)置 autocommit=1。
  • 監(jiān)控長時間運(yùn)行的查詢:SHOW PROCESSLIST;

補(bǔ)充說明

  • 視圖本身不存儲數(shù)據(jù),但 MySQL 在 DROP VIEW 時仍需檢查其定義和依賴關(guān)系,因此需要對基表加共享元數(shù)據(jù)鎖。
  • 即使視圖未被直接使用,只要其基表被某個會話鎖定,DROP VIEW 也可能被阻塞。

總結(jié)

你遇到的問題是典型的 元數(shù)據(jù)鎖等待。解決步驟:

  1. 使用 performance_schema.metadata_locks 找出誰持有了鎖;
  2. 通過 information_schema.processlist 找到對應(yīng)會話 ID;
  3. 必要時 KILL 阻塞會話;
  4. 再次執(zhí)行 DROP VIEW。

我使用的的是這個語句:

SELECT 
    pl.id AS process_id,
    pl.user,
    pl.host,
    pl.db,
    pl.command,
    pl.time AS duration_seconds,
    pl.state,
    pl.info AS current_sql
FROM 
    performance_schema.metadata_locks ml
JOIN 
    performance_schema.threads t ON ml.owner_thread_id = t.thread_id
JOIN 
    information_schema.processlist pl ON t.processlist_id = pl.id
WHERE 
    ml.object_schema = 'dev_licos_kmlc_yt'
    AND ml.object_name = 'view_pro_product_distribution_cathode_copper_details_v2'
    AND ml.lock_status = 'GRANTED';

然后查詢出process_id,最終使用kill把阻塞會話殺掉,問題解決。

以上就是MYSQL刪除視圖時視圖被lock的解決方案的詳細(xì)內(nèi)容,更多關(guān)于MYSQL刪除視圖時視圖被lock的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL高級查詢示例詳細(xì)介紹

    MySQL高級查詢示例詳細(xì)介紹

    這篇文章主要介紹了MySQL高級查詢示例,在面試過程中經(jīng)常會遇到sq查詢問題,今天小編通過本文給大家介紹下MySQL高級查詢語法分析,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • mysql單字段多值分割和合并的處理方法

    mysql單字段多值分割和合并的處理方法

    這篇文章主要給大家介紹了關(guān)于mysql單字段多值分割和合并的處理方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • MySQL數(shù)據(jù)庫中刪除重復(fù)記錄簡單步驟

    MySQL數(shù)據(jù)庫中刪除重復(fù)記錄簡單步驟

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫中刪除重復(fù)記錄的相關(guān)資料,在使用數(shù)據(jù)庫時,出現(xiàn)重復(fù)數(shù)據(jù)是常有的情況,但有些情況是允許數(shù)據(jù)重復(fù)的,而有些情況是不允許的,當(dāng)出現(xiàn)不允許的情況,我們就需要對重復(fù)數(shù)據(jù)進(jìn)行刪除處理,需要的朋友可以參考下
    2023-08-08
  • 淺談訂單重構(gòu)之 MySQL 分庫分表實(shí)戰(zhàn)篇

    淺談訂單重構(gòu)之 MySQL 分庫分表實(shí)戰(zhàn)篇

    這篇文章主要介紹了 MySQL 分庫分表方法的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容,希望能幫助到你
    2021-09-09
  • Mysql中DATEDIFF函數(shù)的基礎(chǔ)語法及練習(xí)案例

    Mysql中DATEDIFF函數(shù)的基礎(chǔ)語法及練習(xí)案例

    Datediff函數(shù),最大的作用就是計(jì)算日期差,能計(jì)算兩個格式相同的日期之間的差值,下面這篇文章主要給大家介紹了關(guān)于Mysql中DATEDIFF函數(shù)的基礎(chǔ)語法及練習(xí)案例?的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 一文帶你了解Mysql主從同步原理

    一文帶你了解Mysql主從同步原理

    本文主要講解了Mysql主從同步原理,主從同步可以擴(kuò)展數(shù)據(jù)庫的負(fù)載能力、容錯還可以數(shù)據(jù)備份等。想要了解相關(guān)內(nèi)容的朋友可以閱讀這篇文章
    2021-08-08
  • MySQL行列轉(zhuǎn)化方式

    MySQL行列轉(zhuǎn)化方式

    文章介紹了如何將行數(shù)據(jù)轉(zhuǎn)化為列數(shù)據(jù),并展示了如何使用UNION和UNION ALL的區(qū)別,作者分享了個人經(jīng)驗(yàn),希望能對大家有所幫助
    2026-01-01
  • MySQL查詢倒數(shù)第二條記錄實(shí)現(xiàn)方法

    MySQL查詢倒數(shù)第二條記錄實(shí)現(xiàn)方法

    這篇文章主要介紹了MySQL查詢倒數(shù)第二條記錄實(shí)現(xiàn)方法,本文直接給出代碼實(shí)例,重要部分已經(jīng)加紅提示,需要的朋友可以參考下
    2015-05-05
  • ?MySQL中?between and的基本用法?操作方法

    ?MySQL中?between and的基本用法?操作方法

    本文主要介紹了MySQL中BETWEEN AND操作符的基本用法,包括數(shù)值查詢和時間范圍查詢,同時還詳細(xì)解釋了NOT BETWEEN AND的使用方法,并通過實(shí)例進(jìn)行了詳細(xì)的演示,其中,BETWEEN AND可以用于數(shù)值、日期等類型的字段,包括邊界值
    2024-10-10
  • 解決Node.js mysql客戶端不支持認(rèn)證協(xié)議引發(fā)的問題

    解決Node.js mysql客戶端不支持認(rèn)證協(xié)議引發(fā)的問題

    這篇文章主要介紹了解決Node.js mysql客戶端不支持認(rèn)證協(xié)議引發(fā)的問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下
    2019-06-06

最新評論

定边县| 宣汉县| 西安市| 景泰县| 安义县| 和龙市| 涟水县| 吉安县| 张家港市| 博罗县| 大英县| 盐边县| 东源县| 高唐县| 长丰县| 榆社县| 玉树县| 耒阳市| 南充市| 星子县| 平罗县| 惠来县| 额济纳旗| 普兰县| 兰考县| 平乡县| 宜丰县| 玛沁县| 乐山市| 积石山| 洛阳市| 永年县| 玉山县| 正宁县| 吕梁市| 瑞昌市| 崇文区| 江川县| 武平县| 论坛| 长兴县|