mysql 写入400_MySQL5.7运行CPU达百分之400处理方案
用戶在使用 MySQL 實例時,會遇到 CPU 使用率過高甚至達到 100% 的情況。本文將介紹造成該狀況的常見原因以及解決方法,并通過 CPU 使用率為 100% 的典型場景,來分析引起該狀況的原因及其相應的解決方案。
常見原因
系統執行應用提交查詢(包括數據修改操作)時需要大量的邏輯讀(邏輯 IO,執行查詢所需訪問的表的數據行數),所以系統需要消耗大量的 CPU 資源以維護從存儲系統讀取到內存中的數據一致性。
說明:大量行鎖沖突、行鎖等待或后臺任務也有可能會導致實例的 CPU 使用率過高,但這些情況出現的概率非常低,本文不做討論。
一、定位問題SQL
數據庫CPU超頻,首要原因分析為執行SQL導致,先定位正在執行的SQL
# 進入數據庫連接工具,或者MySQL命令客戶端
# 查詢正在執行的SQL
select * from information_schema.`PROCESSLIST` where info is not null;
根據COMMAND、TIME、STATE、INFO三個字段查詢SQL信息
COMMAND - 執行的數據操作類型
TIME - 執行的時間
STATE - 執行的狀態
INFO - 執行的具體SQL
發現很長一段時間,查詢都處在 “Sending data”狀態
查詢一下“Sending data”狀態的含義,原來這個狀態的名稱很具有誤導性,所謂的“Sending data”并不是單純的發送數據,而是包括“收集 + 發送 數據”。
這里的關鍵是為什么要收集數據,原因在于:mysql使用“索引”完成查詢結束后,mysql得到了一堆的行id,如果有的列并不在索引中,mysql需要重新到“數據行”上將需要返回的數據讀取出來返回個客戶端。
二、使用explain查看SQL使用索引過程
explain顯示了MySQL如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優化的查詢語句
使用方法,在select語句前加上explain就可以了,下面是一個使用explain查詢SQL的例子
explain select * from user_info where tel = '17000000000';
三、show profile
為了進一步驗證查詢的時間分布,于是使用了show profile命令來查看詳細的時間分布
首先打開配置:set profiling=on;
執行完查詢后,使用show profiles查看query id;
使用show profile for query query_id查看詳細信息;
總結
以上是生活随笔為你收集整理的mysql 写入400_MySQL5.7运行CPU达百分之400处理方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多囊卵巢综可以做试管吗
- 下一篇: python 数组升序_python简单