<table id="qs2qo"></table>
  • <bdo id="qs2qo"><center id="qs2qo"></center></bdo>
    • 自動秒收錄
    • 軟件:1973
    • 資訊:56157|
    • 收錄網站:175404|

    IT精英團

    緊急情況下數據庫表被鎖 抓瞎?

    緊急情況下數據庫表被鎖 抓瞎?

    瀏覽次數:
    評論次數:
    編輯: 溫瑜
    信息來源: ITPUB
    更新日期: 2022-05-07 18:32:30
    摘要

    以下文章來源于公眾號-程序新視界,作者二師兄在程序員的職業生涯中,總會遇到數據庫表被鎖的情況,前些天就又撞見一次。由于業務突發需求,各個部門都在批量操作、導出數據,而數據庫又未做讀寫分離,結果就是:數

    • 正文開始
    • 相關閱讀
    • 推薦作品

    以下文章來自微信官方賬號——節目新視界,兩位師兄撰寫。

    在程序員的職業生涯中,總有數據庫表被鎖的情況,前幾天又發生了一次。由于突發業務需求,各部門都在批量操作導出數據,數據庫讀寫不分離。結果,數據庫中的一個表被鎖定!

    反饋系統部分功能無法使用,鎖定數據庫表進行緊急排查定位,然后進行緊急處理。這篇文章告訴你類似突發事件的故障排除和解決過程。建議喜歡的收藏未雨綢繆。

    故障查尋

    用戶在某個功能頁面報錯502,于是先看服務是否正常,數據庫是否正常。在控制臺中,我看到數據庫的CPU猛增,堆積了大量未提交的事務,有些事務已經被阻塞很久了?;径ㄎ皇菙祿鞂佑袉栴}。

    看了一下被屏蔽的交易列表,發現里面有鎖。我本想用控制臺直接結束被阻塞的事務,但是控制臺賬號權限有限,所以我通過客戶端登錄相應的賬號來殺死被鎖定的事務,防止了情況惡化。

    大家說說吧。如果突然面臨類似情況,應該如何緊急應對?

    解決辦法

    想象一個場景,當然是軟件工程師職業生涯中會遇到的場景:一個本來正常運行的程序,有一天突然數據庫的表被鎖了,業務無法正常運行。那么如何快速定位哪個事務鎖了表,如何結束相應的事情呢?

    首先,最簡單粗暴的方法就是:重啟MySQL。沒錯,網管解決問題的神器——“重啟”。至于后果,能不能跑,三思而后行!

    重啟可以解決表鎖定的問題,但對于在線業務顯然不可行。

    讓我們來看看不跑步的解決方案:

    第一步:查看表使用

    當遇到數據庫阻塞的問題時,應該首先檢查表是否在使用中。

    showopentableswherein _ use

    如果查詢結果為空,說明表沒有被使用,說明不是鎖表的問題。

    mysqlshowopentableswherein _ use0

    清空設置(0.00秒)

    例如,如果查詢結果不為空,將出現以下結果:

    mysqlshowopentableswherein _ use

    - - - -

    |數據庫|表|使用中|名稱鎖定|

    - - - -

    |測試|t|1|0|

    - - - -

    1流動插圖(0.00秒)

    那么測試臺正在使用中,此時需要進一步調查。

    第二步:查看進程

    檢查數據庫的當前進程,查看是否有緩慢的SQL或阻塞的線程。

    執行命令:

    showprocesslist

    這個命令只顯示當前用戶正在運行的線程。當然,如果是root的話,可以全部看到。

    在上面的實踐中,阿里云控制臺之所以可以查看所有線程,是因為應該是root,但是我去殺的時候,因為登錄的用戶不是root的數據庫賬號,不能操作另一個用戶的線程,所以殺不了。

    第三步:查看當前運行的所有事務

    在緊急情況下,可以跳過這一步,主要用于檢查:

    SELECT*FROMinformation_schema。INNODB

    第四步:查看當前出現的鎖

    在緊急情況下,可以跳過這一步,主要用于檢查:

    SELECT*FROMinformation_schema

    .INNODB_LOCKs;

    第五步:查詢鎖等待的對應關系

    SELECT * FROM information_schema.INNODB_LOCK_waits;

    看事務表INNODB_TRX中是否有正在鎖定的事務線程,看看ID是否在show processlist的sleep線程中。如果在,說明這個sleep的線程事務一直沒有commit或者rollback,而是卡住了,需要手動kill掉。

    搜索的結果中,如果在事務表發現了很多任務,最好都kill掉。

    第六步:kill掉事務

    執行kill命令:

    kill 1011;

    對應的線程都執行完kill命令之后,后續事務便可正常處理。

    針對緊急情況,通常也會直接操作第一、第二、第六步。

    MySQL的鎖

    這里再補充一些MySQL鎖相關的知識點:數據庫鎖設計的初衷是處理并發問題,作為多用戶共享的資源,當出現并發訪問的時候,數據庫需要合理地控制資源的訪問規則,而鎖就是用來實現這些訪問規則的重要數據結構。

    根據加鎖的范圍,MySQL里面的鎖大致可以分成全局鎖、表級鎖和行鎖三類。MySQL中表級別的鎖有兩種:一種是表鎖,一種是元數據鎖(metadata lock,MDL)。

    表鎖是在Server層實現的,ALTER TABLE之類的語句會使用表鎖,忽略存儲引擎的鎖機制。表鎖通過lock tables... read/write來實現,而對于InnoDB來說,一般會采用行級鎖。畢竟鎖住整張表影響范圍太大了。

    另外一個表級鎖是MDL(metadata lock),用于并發情況下維護數據的一致性,保證讀寫的正確性,不需要顯式的使用,在訪問一張表時會被自動加上。

    MySQL鎖表場景

    常見的一種鎖表場景就是有事務操作處于:Waiting for table metadata lock狀態。

    Waiting for table metadata lock

    MySQL在進行alter table等DDL操作時,有時會出現Waiting for table metadata lock的等待場景。

    一旦alter table TableA的操作停滯在Waiting for table metadata lock狀態,后續對該表的任何操作(包括讀)都無法進行,因為它們也會在Opening tables的階段進入到Waiting for table metadata lock的鎖等待隊列。如果核心表出現了鎖等待隊列,就會造成災難性的后果。

    場景一:長事務運行,阻塞DDL,繼而阻塞所有同表的后續操作。

    通過show processlist可以看到表上有正在進行的操作(包括讀),此時alter table語句無法獲取到metadata 獨占鎖,會進行等待。

    場景二:為提交事務,阻塞DDL,繼而阻塞所有同表的后續操作。

    通過show processlist看不到表上有任何操作,但實際上存在有未提交的事務,可以在information_schema.innodb_trx中查看到。在事務沒有完成之前,表上的鎖不會釋放,alter table同樣獲取不到metadata的獨占鎖。

    處理方法:通過 select * from information_schema.innodb_trx\G, 找到未提交事物的sid,然后kill掉,讓其回滾。

    場景三:顯式事務失敗操作獲得鎖,未釋放

    通過show processlist看不到表上有任何操作,在information_schema.innodb_trx中也沒有任何進行中的事務。很可能是因為在一個顯式的事務中,對表進行了一個失敗的操作(比如查詢了一個不存在的字段),這時事務沒有開始,但是失敗語句獲取到的鎖依然有效,沒有釋放。從performance_schema.events_statements_current表中可以查到失敗的語句。

    處理方法:通過performance_schema.events_statements_current找到其sid,kill 掉該session,也可以kill掉DDL所在的session。

    總之,alter table的語句是很危險的(核心是未提交事務或者長事務導致的),在操作之前要確認對要操作的表沒有任何進行中的操作、沒有未提交事務、也沒有顯式事務中的報錯語句。

    如果有alter table的維護任務,在無人監管的時候運行,最好通過lock_wait_timeout設置好超時時間,避免長時間的metedata鎖等待。

    小結

    關于MySQL的鎖表其實還有很多其他場景,我們在實踐的過程中盡量避免鎖表情況的發生,當然這需要一定經驗的支撐。但更重要的是,如果發現鎖表我們要能夠快速的響應,快速的解決問題,避免影響正常業務,避免情況進一步惡化。所以,本文中的解決思路大家一定要收藏或記憶一下,做到有備無患,避免突然狀況下抓瞎。

    基礎鞏固——至少需要多少行代碼才能實現深度復制?
    ? 上一篇 2022-05-07
    服務器端高并發分布式架構的演進之路
    下一篇 ? 2022-05-07
    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    • 你見過的最全面的Python關鍵知識總結
      1閱讀 0條評論 個贊
      這是一份來自于SegmentFault上的開發者@二十一總結的Python重點。由于總結了太多的東西,所以篇幅有點長,這也是作者"縫縫補補"總結了好久的東西,強烈建議收藏再慢慢看~Py2……
    • 代碼| C語言根據可執行文件名獲取進程運行信息
      1閱讀 0條評論 個贊
      如下示例可根據可執行文件名獲得線程數、虛擬內存占用大小、物理內存占用大小、進程PID、CPU占用率和進程啟動次數等信息。1.程序源碼main.c:#include#include<……
    • 如何執行超過100M的SQL腳本?
      2閱讀 0條評論 個贊
      技術_菜鳥https://www.cnblogs.com/hai-ping/p/3939150.html最近遇到一個問題,在SQLServer的查詢分析器里面執行一個超過100MB的數據庫腳本,發現……
    • MYSQL VS POLARDB唯一索引死鎖及應用設計
      1閱讀 0條評論 個贊
      #issue68021MySQLuniquecheck問題-知乎(zhihu.com)事情的開始是這樣的,最近和阿里云密切聯系,也成為他們的大客戶,(我們當然是大客戶,BIGBIG……
    • 不容錯過的20個ES6技巧
      5閱讀 0條評論 個贊
      前言大家好,我是xieyezi,好久不見,我又重新回歸掘金啦,這次為大家整理了20個使用頻率很高的ES6代碼塊,希望大家喜歡……
    • JD.COM面試問題:ElasticSearch深度分頁解決方案
      0閱讀 0條評論 個贊
      以下文章來源于月伴飛魚,作者日常加油站前言Elasticsearch是一個實時的分布式搜索與分析引擎,在使用過程中,有一些典型的使用場景,比如分頁、遍歷等。在使用關系型數據庫中,我們被告知要注意甚至……
    • 透徹理解數據資產、數據資源、數據管理、數據治理等概念的區別
      1閱讀 0條評論 個贊
      以下文章來源于公眾號-大魚的數據人生,作者討厭的大魚先生數據成為生產要素后,各種跟數據相關的概念就出來了,其實很多概念沒有權威定義,大家各有各的理解,這導致了理解上的歧義。數據管理、數據治理、數據資源……
    • MySQL查詢語句的limit offset是如何實現的?
      1閱讀 0條評論 個贊
      在寫select語句的時候,使用limit,offset可能就像是我們吃飯喝水一樣自然了。剛開始工作的時候也經常聽前輩們教導:使用limit,offset,當offset變大的時候執……
    • 采訪者:告訴我們SpringAOP的底層代理模型
      2閱讀 0條評論 個贊
      來源|Java技術指北(ID:javanorth)代理模式相信大家經常聽說,在設計模式中相對而言是比較難理解的。這次指北君來給大家通俗的介紹介紹。1、什么是代理模式Provideasurrog……
    • 基礎鞏固——至少需要多少行代碼才能實現深度復制?
      1閱讀 0條評論 個贊
      前言深度克?。ㄉ羁截悾┮恢倍际浅?、中級前端面試中經常被問到的題目,網上介紹的實現方式也都各有千秋,大體可以概括為三種方式:JSON.stringify+JSON.parse,這個很好理解;全量判斷類……
    • SQL中的三種重復數據刪除方法 還有誰不行?
      0閱讀 0條評論 個贊
      SQL去重是數據分析工作中比較常見的一個場景,今天給大家具體介紹3種去重的方法。在使用SQL提數的時候,常會遇到表內有重復值的時候,比如我們想得到uv(獨立訪客),就需要做去重。在MySQL中……
    • 詳細解釋Linux中的diff命令和例子
      1閱讀 0條評論 個贊
      文件比較在Linux中起著重要的作用,特別是對于程序員和Linux系統管理員。例如,如果您想找到兩個源代碼文件之間的差異來開發補丁,那么您需要一個文件比較工具來簡化這個過程。Linux中有幾……
    • 緊急情況下數據庫表被鎖 抓瞎?
      4閱讀 0條評論 個贊
      以下文章來源于公眾號-程序新視界,作者二師兄在程序員的職業生涯中,總會遇到數據庫表被鎖的情況,前些天就又撞見一次。由于業務突發需求,各個部門都在批量操作、導出數據,而數據庫又未做讀寫分離,結果就是:數……
    • 談談復雜項目代碼的應用分層
      1閱讀 0條評論 個贊
      —1—背景說起應用分層,大部分人都會認為這個不是很簡單嘛就controller,service,mapper三層??雌饋砗唵?,很多人其實并沒有把他們職責劃分開,在很多代碼中,controller做……
    • 零入侵:一個注解 循環重試功能的優雅實現
      0閱讀 0條評論 個贊
      前言在實際工作中,重處理是一個非常常見的場景,比如:發送消息失敗。調用遠程服務失敗。爭搶鎖失敗。這些錯誤可能是因為網絡波動造成的,等待過后重處理就能成功。通常來說,會用try/catch,while循……
    • 管理數百個Kubernetes集群需要什么?
      0閱讀 0條評論 個贊
      文章轉載:進擊云原生(版權歸原作者所有,侵刪)要點:部署一個具備生產就緒所需所有依賴關系的Kubernetes集群需要數天時間。如果不自動化這個過程,管理Kubernetes集群的浮動是非常困難的。在……
    • 運行和維護監控中的采樣數據和統計數據
      8閱讀 0條評論 個贊
      2006年的時候,Oracle公司的《Oracle通訊》雜志向我約稿,那時候正好是Oracle公司在大力推廣Oracle10g的時候,當時我問編輯,對這篇文章有什么要求。編輯說,對于優化中數據采集工……
    • MySQL支持哈希索引嗎?(收藏)
      1閱讀 0條評論 個贊
      經常有朋友問,MySQL的InnoDB到底支不支持哈希索引?對于InnoDB的哈希索引,確切的應該這么說:(1)InnoDB用戶無法手動創建哈希索引,這一層上說,InnoDB確實不支持哈希索引;(2)……
    • MYSQL如果索引優化僅僅是添加索引 太年輕而不簡單
      0閱讀 0條評論 個贊
      MYSQL的索引優化,如果此時此刻看到索引的優化,僅僅想到添加適合的索引,是不完全的,索引的優化本身就具有很多的不確定性。1索引會隨著時間的推移,有性能的衰減2索引會隨著數據量的增加,有性能的衰……
    • 納尼?數據也是立法的嗎?
      1閱讀 0條評論 個贊
      編輯:彭文華來源:大數據架構師(ID:bigdata_arch)彭友們好,我是老彭。最近忙瘋了,天天給客戶寫方案,都沒時間寫文章了。趁著五一假期,跟彭友們嘮嘮新鮮事兒。今天這個,真的是顛覆我的認知,……
    • 起訴馬云?背景不簡單 美國打壓中國科技企業的新戰術
      0閱讀 0條評論 個贊
      觀察者網 陳濟深    據媒體報道,4月22日,繼3月美國證券交易委員會(SEC)將40余家中國企業列入“預摘牌清單”后,華爾街也加入到了對中國企業的圍剿中,4名美股投資人突然升級對阿里巴巴的訴訟,并將阿里巴巴創始人馬云列為新的起訴對象,而起訴理由則是——阿里股價暴跌,導致投資利益受損?!?/div>
    • 如何設計網站地圖?更有利于SEO優化的網站地圖設計方法
      6閱讀 0條評論 個贊
      網站地圖的設計是整個網站結構布局設計的一部分,做過SEO的站長應該深知網站地圖在SEO優化中的重要作用,那么網站地圖該如何設計?本文將提供更利于SEO優化的網站地圖設計方法供大家了解,希望對大家有所幫助和啟發……
    • 企業如何識別不同業務場景下的數據安全建設問題?
      3閱讀 0條評論 個贊
      以下文章來源于御數坊,作者御數坊前言數據安全建設的出發點和立足點,是在于對企業業務安全的保障,關鍵是企業是否具有業務場景的數據風險識別和解決的能力。那么,如何才能從業務場景的角度出發,做好數據安全的……
    • Spring云應用的優雅下線和灰度發布
      2閱讀 0條評論 個贊
      前言在生產環境中,如何保證在服務升級的時候,不影響用戶的體驗,這個是一個非常重要的問題。如果在我們升級服務的時候,會造成一段時間內的服務不可用,這就是不夠優雅的。那什么是優雅的呢?主要就是指在服務升級……
    • 上網關了 流量卻產生了?消費者質疑中國移動任意扣費
      4閱讀 0條評論 個贊
      自己從不用中國移動手機卡上網,且數據流量一直處于關閉狀態,手機自帶的流量監測系統的監測數據為零,9.35MB的流量是怎么產生的?未經用戶同意,中國移動為何自動開啟“安心包”服務?……
    • 萬事達卡在菲律賓推廣分期付款計劃:中國銀行正在籌建中
      1閱讀 0條評論 個贊
      目前,萬事達卡分期付款與Pine Labs可以在菲律賓超過20個商戶位置的消費者。目前,該計劃可在當地的實體店商戶使用,未來將惠及該國的持卡人,并擴大其范圍,增加在線和跨境商戶。目前有7家菲律賓銀行的持卡人可以參加該計劃,其中證券銀行公司率先試點,亞聯銀行、中國銀行、菲律賓土地銀行等正在籌建中?!?/div>
    • 天下沒有免費的午餐 有免費保險嗎?看螞蟻寶怎么玩“套路”
      1閱讀 0條評論 個贊
      互聯網保險中介平臺同樣需要嚴格遵守互聯網保險監管規則的要求……
    • 螞蟻集團供應鏈金融區塊鏈國際標準獲IEEE認證并發布
      0閱讀 0條評論 個贊
      IEEE宣布《基于區塊鏈的供應鏈金融標準》正式發布。中國電子技術標準化研究院區塊鏈研究室主任李鳴表示,“該標準的發布,不僅體現了區塊鏈助力供應鏈金融產業,為產業鏈上下游企業建立了互信的合作關系,而且進一步地將我國在區塊鏈賦能實體產業的經驗通過標準的渠道推向國際?!薄?/div>
    • 如何讓你的偽原創成為搜索引擎喜歡的內容?
      10閱讀 0條評論 個贊
      所謂偽原創就是把一篇文章進行再加工,使其讓搜索引擎認為是一篇原創文章,從而提高網站權重。那么如何讓你的偽原創成為搜素引擎青睞內容?下面我們來看看吧……
    • 大幅下降!‘郵區’消費信貸走弱 利率下降仍是消滅貨幣的主要目標
      7閱讀 0條評論 個贊
      進入2022年以來,上海等多地的疫情呈現反復趨勢。從今年一季度的情況來看,隨著各地疫情管控措施的升級,消費需求以及信貸表現有所減緩。而作為經濟活動最為繁華的“包郵區”,上海地區在內的江浙一帶的封控尚未有放松的機會,不少業內人士也對此表達了對今年二季度展業表現的忐忑?!?/div>
    • 杰瑞工作室發聲明否認“隱藏2.6億傭金”等傳聞
      3閱讀 0條評論 個贊
      24日,賈乃亮工作室發表聲明辟謠近日網絡不實言論,聲明稱,有關賈乃亮“隱匿2.6億傭金”“簽署陰陽合同”“偷稅漏稅”等言論均嚴重背離事實,屬于惡意捏造的謠言。同時正告相關主體及平臺對失實言論進行刪除、屏蔽。聲明指出律師團隊已完成公證取證工作,將啟動訴訟程序,追責到底?!?/div>
    • 納斯達克本周暴跌 損失近1萬億美元:蘋果失去最高市值 標題加密崩潰
      6閱讀 0條評論 個贊
      本周的暴跌使納斯達克100指數的市值蒸發了近9,820億美元,其中大型科技股占了很大一部分。微軟(Microsoft Corp.)市值蒸發約1,450億美元,市值跌破2萬億美元。亞馬遜的800億美元跌幅幾乎足以將其踢出1萬億美元的俱樂部。Alphabet Inc.目前市值不足1.5萬億美元?!?/div>
    • 涉案金額35億!一起“電子商務”非法集資案的審理
      3閱讀 0條評論 個贊
      在全國范圍內通過發展代理商、加盟店、會員等形式,吸引不特定投資群眾注冊成為會員,以每日簽到可獲高額返利的獎勵政策誘使會員預存資金,進行非法集資活動,截至2018年5月,該公司非法集資金額共計23億余元?!?/div>
    • Linux的10個最危險的命令
      0閱讀 0條評論 個贊
      rm-rf命令該命令可能導致不可恢復的系統崩壞。>rm-rf/#強制刪除根目錄下所有東西。>rm-rf*#強制刪除當前目錄的所有文件。>rm-rf.#強制刪除當前文件夾及其子文件夾。執行rm-r……
    • 實際年利率遠超承諾 收取2.3%服務費 “網銀”離不開貸款中介?
      1閱讀 0條評論 個贊
      近日,1818黃金眼報道,周老板在杭州開設備廠。一個多月前,她接到一個電話,對方問她有沒有融資需求。周老板說,當時還真的有這個需求,雙方一拍即合?,F在,她覺得自己過于輕信對方了,因為還款時發現年化利率是16.2%,當初說的是5%到5.3%?!?/div>
    • 工商銀行、光大銀行、中郵人壽因處理消費者投訴被點名通報
      1閱讀 0條評論 個贊
      近日,中國銀保監會消費者權益保護局發布2022年第7號通報《關于部分銀行保險機構違反<銀行業保險業消費投訴處理管理辦法>的情況通報》(以下簡稱《通報》),通報了工商銀行、光大銀行、中郵人壽違反《銀行業保險業消費投訴處理管理辦法》(以下簡稱《投訴辦法》)的情況?!?/div>
    • 2022年處置非法集資部際聯席會議:加大存量案件處置力度
      1閱讀 0條評論 個贊
      扎實推進《防范和處置非法集資條例》落地見效,嚴厲打擊非法集資違法犯罪活動,初步建成全國監測預警“一張網”,深入推進防非宣傳教育,非法集資風險防控取得明顯進展。但當前非法集資風險形勢依然復雜嚴峻。2022年打非處非工作要提高政治站位,緊扣防反彈、保穩定中心任務,堅持穩字當頭、穩中求進,加強系統治理、源頭治理,著力遏制增量、消化存量、管控變量?!?/div>
    • 密碼交易所KuCoin融資1.5億美元 估值100億美元 高管們表示 近1000名員工
      1閱讀 0條評論 個贊
      金融虎訊 5月11日消息,KuCoin是世界上最受歡迎的加密交易所之一,已從Jump Crypto牽頭的投資者那里籌集了1.5億美元,使其估值達……
    • 哪個省銀行業不良率最高?
      6閱讀 0條評論 個贊
      在披露了不良率數據的區域里,不良率最高的是海南,高達8.75%;其次是甘肅、大連,分別為6.06%、5.95%?!?/div>
    • 如何巧用百科增加網站排名 流量翻倍?
      1閱讀 0條評論 個贊
      怎么巧用百科讓網站排名上升流量倍增?很多朋友的網站優化以后還是沒有得到很好的排名,沒關系,今天給大家分享一個技巧,就是使用百科讓沒排名的網站迅速排名,需要的朋友可以參考下……
    最近發布資訊
    更多
    本地特级毛片,老师脱裙子让我看内裤,人妻av乱片aV出轨avApp
    <table id="qs2qo"></table>
  • <bdo id="qs2qo"><center id="qs2qo"></center></bdo>