MySQL(189)如何分析MySQL的鎖等待問題?

分析MySQL的鎖等待問題有助于發現和解決數據庫性能瓶頸。鎖等待問題通常會導致數據庫響應時間變長,影響系統的整體性能。以下是詳細深入的方法和代碼示例,幫助你分析和解決MySQL的鎖等待問題。

一、鎖的類型和概念

在MySQL中,主要有以下幾種鎖:

  1. 表鎖(Table Lock):針對整張表的鎖。
  2. 行鎖(Row Lock):針對表中某一行的鎖。
  3. 共享鎖(S Lock,也稱讀鎖):允許其他事務同時讀,但不能寫。
  4. 排他鎖(X Lock,也稱寫鎖):不允許其他事務讀或寫。

InnoDB存儲引擎主要使用行鎖,MyISAM存儲引擎使用表鎖。在分析鎖等待問題時,重點關注InnoDB的行鎖。

二、啟用和配置慢查詢日志

慢查詢日志可以記錄鎖等待時間較長的查詢。

2.1 編輯MySQL配置文件

my.cnfmy.ini文件中添加或修改以下配置:

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1  # 設置慢查詢的閾值,單位是秒
log_queries_not_using_indexes = 1  # 記錄未使用索引的查詢(可選)
2.2 重啟MySQL服務
sudo systemctl restart mysql  # 對于systemd系統
# 或者
sudo service mysql restart  # 對于init.d系統

三、動態監控鎖等待

MySQL提供了幾個動態監控鎖等待的工具和視圖。

3.1 使用SHOW ENGINE INNODB STATUS

該命令提供InnoDB存儲引擎內部狀態的詳細信息,包括鎖等待情況。

SHOW ENGINE INNODB STATUS;

輸出的部分示例:

------------------------
LATEST DETECTED DEADLOCK
------------------------
2021-10-01 10:25:34 0x7f8b0c3e3700
*** (1) TRANSACTION:
TRANSACTION 123456, ACTIVE 5 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 4 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 10, OS thread handle 140236724795136, query id 123 localhost root update
INSERT INTO orders (order_id, customer_id, order_date) VALUES (1, 123, '2021-10-01')
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 163 page no 3 n bits 72 index PRIMARY of table `test`.`orders` trx id 123456 lock_mode X locks rec but not gap waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 4; compact format; info bits 0
3.2 使用INFORMATION_SCHEMA

INFORMATION_SCHEMA中有幾個表可以提供鎖等待相關的信息:

  1. INNODB_TRX:當前運行的事務。
  2. INNODB_LOCKS:當前持有的和等待的鎖。
  3. INNODB_LOCK_WAITS:當前鎖等待情況。
-- 查找當前正在等待的鎖
SELECTr.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
FROMinformation_schema.innodb_lock_waits wJOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_idJOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id;

示例輸出:

+------------------+----------------+-----------------------------------+-----------------+----------------+-------------------------------------+
| waiting_trx_id   | waiting_thread | waiting_query                    | blocking_trx_id | blocking_thread| blocking_query                       |
+------------------+----------------+-----------------------------------+-----------------+----------------+-------------------------------------+
| CDC123456        | 8              | INSERT INTO orders...            | BAC987654       | 7              | UPDATE orders SET...                |
+------------------+----------------+-----------------------------------+-----------------+----------------+-------------------------------------+

四、分析和解決鎖等待問題

根據收集到的信息,可以采取以下措施來解決鎖等待問題:

4.1 優化查詢和索引

確保查詢使用了適當的索引,以減少鎖的范圍和時間。

-- 創建索引
CREATE INDEX idx_customer_id ON orders(customer_id);
4.2 分析和優化事務

減少事務的粒度,確保事務盡可能短,避免長時間持有鎖。

BEGIN;
-- 執行一些操作
COMMIT;
4.3 調整隔離級別

根據業務需求調整事務隔離級別,以減少鎖沖突。

-- 設置全局隔離級別
SET GLOBAL transaction_isolation='READ-COMMITTED';-- 設置當前會話的隔離級別
SET SESSION transaction_isolation='READ-COMMITTED';
4.4 使用鎖超時

設置鎖等待超時時間,避免長時間等待鎖。

[mysqld]
innodb_lock_wait_timeout = 50  # 設置鎖等待超時時間,單位是秒

五、監控和調整

  1. 持續監控:使用監控工具(如Prometheus、Grafana、Percona Monitoring and Management)持續監控鎖等待情況。
  2. 定期檢查:定期檢查鎖等待日志和相關指標,及時發現和解決問題。
  3. 自動化調優:使用自動化調優工具(如MySQL Tuner、Percona Toolkit)定期進行優化。
# 使用MySQL Tuner
wget http://mysqltuner.pl/ -O mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl

六、總結

分析和解決MySQL鎖等待問題需要綜合利用慢查詢日志、MySQL內部狀態命令和INFORMATION_SCHEMA視圖。通過優化查詢和索引、分析和優化事務、調整隔離級別以及設置鎖超時,可以有效減少鎖等待問題。同時,持續監控和定期檢查有助于及時發現并解決潛在的鎖等待問題,從而提升數據庫性能和穩定性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92825.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92825.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92825.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

26.Scikit-learn實戰:機器學習的工具箱

Scikit-learn實戰:機器學習的工具箱 🎯 前言:機器學習界的"宜家家具" 還記得第一次逛宜家的感受嗎?琳瑯滿目的家具,每一件都有詳細的說明書,組裝簡單,樣式統一,關鍵是—…

wordpress文章摘要調用的3種方法

以下是WordPress文章摘要的3種調用方法: 1. 使用the_excerpt()函數 這是WordPress自帶的函數,用于調用文章摘要。如果文章有手動填寫的摘要,則會顯示手動摘要;如果沒有手動摘要,WordPress會自動從文章內容中提取前55個單詞作為摘…

java excel轉圖片常用的幾種方法

十分想念順店雜可。。。在 Java 中實現 Excel 轉圖片,常用的方法主要分為兩類:使用商業庫(簡單高效但可能收費)和使用開源庫組合(免費但實現復雜)。以下是幾種常用方案及實現思路:一、使用商業庫…

QT項目 -仿QQ音樂的音樂播放器(第五節)

目錄 一、CommonPage界?設置和顯示 二、自定義ListItemBox 三、支持hover效果 四、自定義VolumeTool 五、界面設置 六、頁面創建及彈出 七、繪制三角 一、CommonPage界面設置和顯示 void CommonPage::setCommonPageUI(const QString &title, const QString &imag…

wstool和git submodule優劣勢對比

wstool 和 git submodule 都可以用來管理項目中的外部源代碼依賴,但它們的設計理念、工作流程和適用場景有很大不同。 我們來深入對比一下它們的優勢和劣勢。 核心理念比喻 git submodule:像是在你的汽車設計圖紙中,直接嵌入了另一家公司&…

六、RuoYi-Cloud-Plus OSS文件上傳配置

1.前面我們完成了RuoYi-Cloud-Plus 部署及啟動,此刻已經可以正常訪問。 前面文章的專欄內容在這,感興趣可以看看。 https://blog.csdn.net/weixin_42868605/category_13023920.html 2.但現在雖然已經啟動成功,但有很多功能我們依舊用不了&a…

達夢數據庫日常運維命令

查詢數據庫表空間數據文件使用大小限制DECLARE K INT:(SELECT cast(PAGE()/1024 as varchar)); BEGIN SELECTF."PATH" 數據文件 ,F.CLIENT_PATH,G.NAME 所屬表空間,F.MAX_SIZE||M 文件擴展限制,(CASE F.AUTO_EXTEND WHEN 1 THEN 是 ELSE 否 END) 文件…

使用線性降維方法進行數據降維

在數據科學與機器學習的領域中,維度災難問題經常導致模型的性能下降。線性降維方法是一種常見的技術,用于在保留盡可能多的原始數據特征的同時,減少數據集的維度。這些方法通過將高維數據映射到低維空間來減少特征數量,從而加速模…

OpenCV圖像裁剪與 ROI 操作

在圖像處理領域,ROI(Region of Interest)區域感興趣操作是非常基礎而重要的一環。無論是進行目標檢測、圖像分割,還是簡單的圖像處理,都離不開對圖像某一區域的選取與處理。本文將結合 OpenCV 的 C 接口,詳…

關于AI應用案例計算機視覺、自然語言處理、推薦系統和生成式AI四大領域的詳細技術分析。

一、計算機視覺應用:實時物體檢測 案例描述:使用YOLOv8模型實現實時物體檢測系統,應用于安防監控場景。 1. 代碼示例(Python) python from ultralytics import YOLO import cv2# 加載預訓練模型 model YOLO("…

各個網絡層擁有的協議簡寫

OSI 七層模型(從下到上分別為物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層)是網絡通信的經典理論框架,每層都有其核心功能和對應的協議。以下是各層的主要協議列舉:1. 物理層(Physical Layer&#xff…

django基于Python的設計師作品平臺的數據可視化系統設計與實現

django基于Python的設計師作品平臺的數據可視化系統設計與實現

等保測評-RabbitMQ中間件

RabbitMQ-docker部署查看版本:rabbitmqctl version、rabbitmqctl status | grep version配置文件:一般為rabbitmq.conf端口號:一般為15672一、身份鑒別a)應對登錄的用戶進行身份標識和鑒別,身份標識具有唯一性&#xf…

Linux操作系統從入門到實戰(十六)馮諾依曼體系結構,操作系統與系統調用和庫函數概念

Linux操作系統從入門到實戰(十六)馮諾依曼體系結構,操作系統與系統調用和庫函數概念前言一、馮諾依曼體系結構1. 馮諾依曼體系是什么?2. 核心部件有哪些?3. 數據是怎么跑的?4. 發文件的流程也一樣5. 為什么…

廣東省省考備考(第七十二天8.10)——言語理解與表達、判斷推理(強化訓練)

小模考(言語、常識) 錯題解析 本題可從第二空入手。轉折前后語意相反,轉折前指出“投資對經濟拉動只能發揮短期的作用”,故轉折后應表達“最終消費對經濟拉動才能發揮長期的作用”。A項“持久”、D項“長期”均符合文意&#xff0…

數據庫刪除術:邏輯刪除 vs 物理刪除,選錯毀所有

你以為刪除數據就是點個按鈕?背后藏著數據安全的生死抉擇! 本文揭秘兩種刪除方式的本質區別,用真實案例教你避免災難性數據丟失。一、刪除的本質:數據消失的兩種方式 🧪 #mermaid-svg-pVylRd9e5p4VE5G0 {font-family:"trebuc…

【Python 小腳本·大用途 · 第 3 篇】

1. 痛點 100 字 硬盤里散落著 IMG_2024(1).jpg、IMG_2024(1) (1).jpg、下載目錄里同名但大小不同的視頻…… 手動比對既耗時又容易誤刪。今天用 30 行 Python 腳本,基于「內容哈希」一鍵找出并刪除重復文件,支持多目錄遞歸、白名單、空目錄清理。2. 腳本…

【網絡與爬蟲 52】Scrapyd-k8s集群化爬蟲部署:Kubernetes原生分布式爬蟲管理平臺實戰指南

關鍵詞: Scrapyd-k8s, Kubernetes爬蟲部署, 容器化爬蟲管理, 云原生數據采集, 分布式爬蟲集群, Docker爬蟲, K8s工作負載, Scrapy部署自動化 摘要: 本文深入解析Scrapyd-k8s這一革命性的Kubernetes原生爬蟲管理平臺,通過費曼學習法從傳統部署痛點出發,詳…

Spring WebSocket安全認證與權限控制解析

一、認證架構設計 1.1 WebSocket安全認證流程 #mermaid-svg-23pyTyZe6teZy3Hg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-23pyTyZe6teZy3Hg .error-icon{fill:#552222;}#mermaid-svg-23pyTyZe6teZy3Hg .error-t…

復現論文《多無人機協同任務分配算法設計與實現》

1. 論文標題 多無人機協同任務分配算法設計與實現 The Design and Implementation of Multi-UAVs Cooperative Task Assignment Algorithm 2. 內容概括 該論文針對異構多無人機協同執行多目標多類型任務時的分配問題展開研究。首先提出“兩階段”任務分配結構:第一階段通過…