成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Flink CDC 引起的 MySQL 元數據鎖

數據庫 MySQL
某天上午,收到系統的告警信息,告警提示:同步Mysql的某張表數據到Elasticsearch異常,提示連不上Mysql,當時沒有太上心,以為可能是偶爾網絡異常。

記一次Flink CDC引起的MySQL元數據鎖事故,總結經驗教訓。后續在編寫Flink CDC任務時,要處理好異常,避免產生長時間的元數據鎖。同時出現生產問題時要及時排查,不能抱有僥幸心理。

一、事件經過

某天上午,收到系統的告警信息,告警提示:同步MySQL的某張表數據到Elasticsearch異常,提示連不上Mysql,當時沒有太上心,以為可能是偶爾網絡異常。

然后立馬大量用戶開始投訴系統使用有問題,同時聽到有同事反饋內部系統數據導不出來。此時我慌了。

立馬看了微服務網關、用戶中心服務、部分流量比較大的BFF層服務,CPU、內存、磁盤等都是正常的。但是Pod出現了健康檢查失敗的情況。

于是又趕緊看了日志,出現了大量拿不到MySQL Connection異常。

又趕緊看了MySQL情況,CPU、內存、磁盤都是正常的,但是出現了許多奇怪的慢SQL。

此時我大概猜測到了可能是什么操作鎖表了,導致大量Connection無法釋放,又趕緊看了Mysql鎖的情況,果然發現了大量的元數據鎖,高達400多個Connection沒釋放。

二、處理步驟

既然出現了元數據鎖,導致這么多Connection沒有釋放,那就找出占用時間最長的那個會話kill掉。陸續kill了幾個會話后,系統恢復了。

系統恢復后,又去看了慢SQL,發現主要有兩塊高頻慢SQL,一塊是Flink相關的,另一塊是Nacos相關的。后來經過分析:元數據鎖是因為Flink CDC執行FLUSH TABLES WITH READ LOCK導致的,跟Nacos無關,Nacos只是個煙霧彈。

# Flink相關的:
SHOW CREATE TABLE `xxx_db`.`xxx_table`;
FLUSH TABLES WITH READ LOCK;

# Nacos相關的:
DELETE FROM config_info WHERE data_id='com.alibaba.nacos.testMasterDB';

防止事故再次發生,又把Flink CDC任務里的SQL方式換成了API方式。Flink CDC使用SQL方式時,會產生大量任務,占用更多的資源,也容易出現任務異常。

三、原因分析

1.元數據鎖

(1) 以上關于鎖的截圖,可以看到是元數據鎖引發的Connection被耗盡,那什么是元數據鎖:

  • 元數據鎖(Meta Data Lock,MDL),用于鎖定數據庫對象的元數據,例如:表、索引、視圖等的結構信息。通常用于保證并發的數據定義語言(DDL)操作的一致性,防止在修改表結構的過程中出現并發問題。
  • 其作用是用于解決DDL操作與DML操作的一致性;通常,DDL操作需要獲取MDL寫鎖,并且MDL鎖一旦發生,就可能會對數據庫的性能影響,因為后續對該表的任何Select、DML、DDL操作都會被阻塞,造成Connection積壓。

(2) 為什么要有元數據鎖:

主要為了保證元數據的一致性,用于處理不同線程操作同一數據對象的同步與互斥問題。比如需要事務隔離場景、主從同步場景。

(3) 元數據鎖和Innodb鎖的區別:

  • 元數據鎖主要關注數據庫對象的元信息,而InnoDB鎖主要關注數據的一致性和隔離性。
  • MDL鎖還能實現其他粒度級別的鎖,比如:全局鎖、庫級別的鎖、表空間級別的鎖。這是InnoDB存儲引擎不能直接實現的。

(4) 鎖表的原理是數據庫使用獨占式鎖機制。鎖表發生在 insert、update、delete中。比如:A程序執行了對table_1的insert、update、delete,并還未commit時,B程序也對table_1進行insert、update、delete時會發生資鎖表。

2.Flink CDC為什么引起元數據鎖事故

筆者使用Flink場景是,利用Flink CDC同步數據,然后做匯總統計。

(1) MySQL CDC如何工作

  • 在 CDC 過程中,Flink 需要定期讀取數據源的變化并進行處理。需要元數據鎖 確保在讀取元數據(例如數據庫表的結構信息)時,沒有其他并發的操作修改了這些元數據,從而保證 Flink 的元數據和實際數據的一致性。
  • 啟動MySQL CDC源時,它將執行FLUSH TABLES WITH READ LOCK,獲取一個全局讀取鎖,防止其他會話對這些表進行寫操作,從而保證捕獲的數據的一致性和準確性。該鎖將阻止其他寫入操作。
  • 然后,它讀取當前binlog位置以及數據庫和表的schema。
  • 之后,將釋放全局讀取鎖。然后,它掃描數據庫表并從先前記錄的位置讀取binlog。
  • 如果發生故障,任務將重新啟動。

(2) 元數據鎖原因

因為Flink CDC啟動時執行FLUSH TABLES WITH READ LOCK直接上讀取鎖,由于時間較長,此時有大量的insert、update、delete操作一直處于等待,導致Mysql Connection無法釋放。

正好此時,Flink CDC執行同步任務時,又出現了異常,然后任務重啟,重啟后是上鎖,結果出現了惡性循環。導致更多的的insert、update、delete操作處于等待,導致更多的Myql Connection無法釋放,直接Connection全部耗盡。

然后所有應用都拿不到Mysql Connection,所以系統徹底不可用了。

至于Nacos為什么會執行DELETE FROM config_info WHERE data_id='com.alibaba.nacos.testMasterDB'呢?查閱資料后發現,Nacos也是從Mysql獲取Connection的,當Mysql出現問題時,比如死鎖、Connection耗盡、CPU打滿時,都會執行這個SQL。

責任編輯:趙寧寧 來源: 不焦躁程序員
相關推薦

2020-12-24 18:00:45

MySQL元數據鎖數據庫

2022-07-20 23:15:11

Flink數據集CDC

2021-06-04 07:24:14

Flink CDC數據

2022-06-09 14:19:46

順豐數據集成Flink

2022-06-10 15:21:15

MySQL CDCSqlServer數據庫

2022-06-21 14:02:29

MongoDB數據庫存儲

2024-04-09 10:02:13

Spring數據Redis

2022-11-04 15:21:24

2025-05-06 07:25:00

Chunk分片大數據Flink

2021-09-02 07:56:46

HDFSHIVE元數據

2018-06-21 13:50:33

MySQL主從信息元數據

2017-05-03 16:26:24

MySQL并發死鎖

2010-09-09 14:49:42

SQL更新數據

2025-02-11 10:13:05

2021-09-01 10:37:25

鴻蒙HarmonyOS應用

2022-01-05 18:18:01

Flink 數倉連接器

2020-02-06 10:02:45

MySQL數據庫全局鎖

2010-06-07 13:30:15

2023-12-06 07:33:20

MySQL鎖事間隙鎖

2015-08-26 09:54:50

大數據創業
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av黄色免费在线观看 | 久久69精品久久久久久久电影好 | 91精品国产综合久久香蕉麻豆 | 91精品久久久久久久久久入口 | 国产精品免费看 | 国产精品毛片av | 精品国产乱码久久久久久影片 | 国产色网站 | 天天曰夜夜操 | 日韩中文字幕视频在线观看 | 国产精品成人在线播放 | 中文字幕一区二区三区日韩精品 | 色成人免费网站 | 四虎影院在线免费观看 | 国产成人精品一区 | 日韩欧美在线视频播放 | 蜜桃久久 | 一区二区三区在线免费观看 | 一级全黄少妇性色生活免费看 | 欧美一区二区另类 | 国产日韩一区二区 | 久久99精品久久久97夜夜嗨 | 国产91黄色| 久久se精品一区精品二区 | 精品久久久久久久 | 天天爽天天操 | 国产精品一区二区在线 | 国产精品视频免费观看 | 国产成人自拍一区 | 日韩视频一区二区 | 久久国产精品久久久久久久久久 | 国产精品视频在线播放 | 在线观看深夜视频 | 97国产精品视频人人做人人爱 | 日韩精品一区二区三区 | 干干天天 | 日日艹夜夜艹 | 欧美日韩精选 | 91高清在线视频 | 欧美成人激情 | 成人免费一区二区三区视频网站 |