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

mysql使用 performance_schema 進(jìn)行性能監(jiān)控

 更新時間:2026年03月03日 09:54:58   作者:ruleslol  
MySQL5.7及以上版本引入的performance_schema是一個高效的性能監(jiān)控工具,替代了舊的SHOWPROFILES,它通過系統(tǒng)表實時收集SQL執(zhí)行、鎖等待、I/O等性能數(shù)據(jù),提供了詳細(xì)的監(jiān)控功能,下面就來詳細(xì)的介紹一下,感興趣的可以了解一下

在 MySQL 5.7 及以上版本中,performance_schema(簡稱 P_S) 是官方推薦的、用于替代 SHOW PROFILES 的低開銷性能監(jiān)控機(jī)制。

它默認(rèn)開啟(無需手動啟用),通過一系列系統(tǒng)表實時收集 SQL 執(zhí)行、鎖等待、I/O、內(nèi)存等詳細(xì)性能數(shù)據(jù)。

一、performance_schema是什么

performance_schema 是一個「數(shù)據(jù)庫」(Database / Schema)

在 MySQL 中,performance_schema 是 內(nèi)置的系統(tǒng)數(shù)據(jù)庫之一,和以下這些是同一類:

  • mysql:存儲用戶、權(quán)限等元數(shù)據(jù)
  • information_schema:提供元數(shù)據(jù)視圖(如表結(jié)構(gòu)、列信息)
  • sys:基于 performance_schema 的簡化視圖(MySQL 5.7+)
  • performance_schema:提供底層性能監(jiān)控數(shù)據(jù)

你可以用以下命令驗證:

輸出

編輯
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |  ← 看!它是一個數(shù)據(jù)庫!
| sys                |
| your_app_db        |
+--------------------+

它里面有很多「表」,但這些表是「內(nèi)存中的虛擬表」

進(jìn)入 performance_schema 數(shù)據(jù)庫后,你可以看到很多表:

USE performance_schema;
SHOW TABLES;

你會看到上百張表,例如:

  • events_statements_current
  • events_statements_history
  • events_statements_summary_by_digest
  • events_waits_history
  • file_summary_by_instance
  • ...

?? 注意:這些表 不是磁盤上的真實文件,而是 MySQL 內(nèi)存中動態(tài)生成的“視圖”或“接口”,用于暴露內(nèi)部性能數(shù)據(jù)。

  • 它們 沒有 .frm 或 .ibd 文件
  • 你不能 INSERT、UPDATE、DELETE(只讀)
  • 查詢它們時,MySQL 會實時從內(nèi)存結(jié)構(gòu)中收集數(shù)據(jù)返回

所以,performance_schema 是一個特殊的只讀系統(tǒng)數(shù)據(jù)庫,它的“表”其實是性能監(jiān)控的 API 接口。

二、高效性能分析

下面以 “監(jiān)控最近執(zhí)行的慢查詢及其耗時” 為例,手把手教你如何使用 performance_schema 進(jìn)行高效性能分析。

第一步:確認(rèn)performance_schema已啟用

SHOW VARIABLES LIKE 'performance_schema';
  • 如果返回 ON → 正??捎茫∕ySQL 5.7+ 默認(rèn)開啟)
  • 如果是 OFF → 需在 my.cnf 中添加 performance_schema=ON 并重啟 MySQL

第二步:查看最近執(zhí)行的 SQL 語句(類似SHOW PROFILES)

關(guān)鍵表:events_statements_history

它記錄了每個連接最近執(zhí)行的若干條 SQL(數(shù)量由 performance_schema_events_statements_history_size 控制,默認(rèn) 10 條/連接)。

查看所有最近執(zhí)行的語句(含耗時):
SELECT 
  THREAD_ID,
  EVENT_ID,
  SQL_TEXT,
  TIMER_WAIT / 1000000000000 AS exec_time_sec  -- 轉(zhuǎn)換為秒
FROM performance_schema.events_statements_history
WHERE SQL_TEXT IS NOT NULL
ORDER BY EVENT_ID DESC
LIMIT 10;

輸出示例:

THREAD_ID | EVENT_ID | SQL_TEXT                     | exec_time_sec
45        | 12345    | SELECT * FROM users WHERE id=1 | 0.0023

TIMER_WAIT 單位是皮秒(picoseconds),除以 10^12 得到秒。

第三步:查看某條 SQL 的詳細(xì)階段耗時(類似SHOW PROFILE)

關(guān)鍵表:events_stages_history

記錄每條 SQL 在各個執(zhí)行階段(如解析、優(yōu)化、執(zhí)行、發(fā)送結(jié)果等)的耗時。

步驟:

  1. 先從 events_statements_history 中找到目標(biāo) EVENT_ID
  2. 用該 EVENT_ID 查詢對應(yīng)的階段信息:
-- 假設(shè)上一步查到 EVENT_ID = 12345
SELECT 
  EVENT_NAME AS stage,
  TIMER_WAIT / 1000000000000 AS duration_sec
FROM performance_schema.events_stages_history
WHERE NESTING_EVENT_ID = 12345
ORDER BY TIMER_START;

輸出示例:

stage                              | duration_sec
stage/sql/Opening tables           | 0.0001
stage/sql/System lock              | 0.00002
stage/sql/optimizing               | 0.0003
stage/sql/executing                | 0.0015

這就相當(dāng)于 SHOW PROFILE FOR QUERY ... 的效果,但更結(jié)構(gòu)化!

第四步:監(jiān)控“慢查詢”(自動捕獲耗時長的 SQL)

方法:使用events_statements_summary_by_digest

這個表會自動聚合相同模式的 SQL(如 SELECT * FROM t WHERE id=?),并統(tǒng)計平均耗時、最大耗時、執(zhí)行次數(shù)等。

SELECT 
  DIGEST_TEXT AS normalized_sql,     -- 參數(shù)化后的SQL模板
  COUNT_STAR AS exec_count,
  AVG_TIMER_WAIT / 1000000000000 AS avg_time_sec,
  MAX_TIMER_WAIT / 1000000000000 AS max_time_sec,
  SUM_ROWS_EXAMINED / COUNT_STAR AS avg_rows_examined
FROM performance_schema.events_statements_summary_by_digest
WHERE DIGEST_TEXT IS NOT NULL
ORDER BY avg_time_sec DESC
LIMIT 10;

這是 最實用的性能分析入口!可以快速發(fā)現(xiàn):

  • 哪些 SQL 平均耗時最長?
  • 哪些 SQL 掃描行數(shù)最多?
  • 哪些 SQL 執(zhí)行頻率最高?

第五步:實時監(jiān)控當(dāng)前正在執(zhí)行的 SQL

使用events_statements_current

SELECT 
  PROCESSLIST_ID AS conn_id,
  SQL_TEXT,
  TIMER_WAIT / 1000000000000 AS running_time_sec
FROM performance_schema.events_statements_current
WHERE SQL_TEXT IS NOT NULL;

結(jié)合 SHOW PROCESSLIST,可定位卡住的查詢。

三、實用技巧 & 注意事項

1. 清空歷史統(tǒng)計(重置計數(shù)器)

TRUNCATE TABLE performance_schema.events_statements_summary_by_digest;

2. 開啟更多監(jiān)控項(默認(rèn)已開啟大部分)

檢查是否啟用 statement 監(jiān)控:

SELECT * FROM performance_schema.setup_consumers 
WHERE NAME LIKE '%statement%';
-- 確保 events_statements_current/history/summary 都是 ENABLED

3. 性能開銷極低

  • performance_schema 使用環(huán)形緩沖區(qū)內(nèi)存,不寫磁盤
  • 開銷通常 < 5%,遠(yuǎn)低于 profiling=ON

4. 與慢查詢?nèi)罩净パa(bǔ)

  • slow_query_log:記錄超過閾值的 SQL(適合長期歸檔)
  • performance_schema:實時分析所有 SQL(適合開發(fā)調(diào)試)

四、總結(jié):如何替代SHOW PROFILES

舊方式 (SHOW PROFILES)新方式 (performance_schema)
SHOW PROFILES;SELECT * FROM events_statements_history;
SHOW PROFILE FOR QUERY N;SELECT * FROM events_stages_history WHERE NESTING_EVENT_ID=N;
手動開啟 SET profiling=1;默認(rèn)開啟,無需配置
僅當(dāng)前會話有效全局監(jiān)控,支持多會話
已廢棄(MySQL 8.0 移除)官方推薦,功能更強(qiáng)大

五、推薦日常使用命令

-- 1. 查看最近10條SQL及耗時
SELECT 
    SQL_TEXT, TIMER_WAIT/1e12 AS sec 
FROM 
    performance_schema.events_statements_history 
ORDER BY 
    EVENT_ID 
DESC LIMIT 10;

-- 2. 查找最慢的SQL模板
SELECT 
    DIGEST_TEXT, AVG_TIMER_WAIT/1e12 AS avg_sec 
FROM 
    performance_schema.events_statements_summary_by_digest 
ORDER BY 
    avg_sec 
DESC LIMIT 5;

通過 performance_schema,你不僅能獲得比 SHOW PROFILES 更豐富的信息,還能實現(xiàn)自動化監(jiān)控、告警和根因分析,是現(xiàn)代 MySQL 性能調(diào)優(yōu)的必備技能。

到此這篇關(guān)于mysql使用 performance_schema 進(jìn)行性能監(jiān)控的文章就介紹到這了,更多相關(guān)mysql使用performance_schema進(jìn)行性能監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL占用CPU過高,排查原因及解決方案

    MySQL占用CPU過高,排查原因及解決方案

    這篇文章主要介紹了MySQL占用CPU過高,排查原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • MySQL常見的存儲引擎和區(qū)別說明

    MySQL常見的存儲引擎和區(qū)別說明

    MySQL支持多種存儲引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每種引擎有其特點(diǎn)和適用場景,選擇存儲引擎時需根據(jù)業(yè)務(wù)需求考慮事務(wù)、性能、存儲成本等因素
    2025-03-03
  • mysql?sock文件存儲了什么信息

    mysql?sock文件存儲了什么信息

    這篇文章主要為大家介紹了mysql?sock文件存儲了什么信息的內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Mysql查看執(zhí)行計劃、explain關(guān)鍵字超詳細(xì)講解

    Mysql查看執(zhí)行計劃、explain關(guān)鍵字超詳細(xì)講解

    EXPLAIN 是 MySQL 提供的用于分析 SQL 查詢執(zhí)行計劃的工具,通過該命令可以獲取查詢優(yōu)化器選擇的執(zhí)行路徑,下面通過本文給大家介紹Mysql查看執(zhí)行計劃、explain關(guān)鍵字超詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2025-06-06
  • SQL語句執(zhí)行深入講解(MySQL架構(gòu)總覽->查詢執(zhí)行流程->SQL解析順序)

    SQL語句執(zhí)行深入講解(MySQL架構(gòu)總覽->查詢執(zhí)行流程->SQL解析順序)

    這篇文章主要給大家介紹了SQL語句執(zhí)行的相關(guān)內(nèi)容,文中一步步給大家深入的講解,包括MySQL架構(gòu)總覽->查詢執(zhí)行流程->SQL解析順序,需要的朋友可以參考下
    2019-01-01
  • MySQL使用C語言連接完整代碼樣例

    MySQL使用C語言連接完整代碼樣例

    這篇文章主要介紹了如何使用C語言連接MySQL數(shù)據(jù)庫,包括安裝MySQL連接庫、初始化MySQL、連接數(shù)據(jù)庫、執(zhí)行SQL查詢、獲取查詢結(jié)果、關(guān)閉連接等步驟,并提供了完整的代碼示例,需要的朋友可以參考下
    2025-03-03
  • Mysql數(shù)據(jù)庫名和表名在不同系統(tǒng)下的大小寫敏感問題

    Mysql數(shù)據(jù)庫名和表名在不同系統(tǒng)下的大小寫敏感問題

    在 MySQL 中,數(shù)據(jù)庫和表對應(yīng)于那些目錄下的目錄和文件。因而,操作系統(tǒng)的敏感性決定數(shù)據(jù)庫和表命名的大小寫敏感。
    2011-01-01
  • mariadb集群搭建---Galera Cluster+ProxySQL教程

    mariadb集群搭建---Galera Cluster+ProxySQL教程

    這篇文章主要介紹了mariadb集群搭建---Galera Cluster+ProxySQL教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 一文詳解MySQL如何設(shè)置自動備份任務(wù)

    一文詳解MySQL如何設(shè)置自動備份任務(wù)

    設(shè)置自動備份任務(wù)可以確保你的數(shù)據(jù)庫定期備份,防止數(shù)據(jù)丟失,下面我們就來詳細(xì)介紹一下如何使用 Bash 腳本和 Cron 任務(wù)在 Linux 系統(tǒng)上設(shè)置 MySQL 數(shù)據(jù)庫的自動備份任務(wù)
    2025-06-06
  • golang實現(xiàn)mysql數(shù)據(jù)庫備份的操作方法

    golang實現(xiàn)mysql數(shù)據(jù)庫備份的操作方法

    這篇文章主要介紹了golang實現(xiàn)mysql數(shù)據(jù)庫備份的操作方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06

最新評論

札达县| 周口市| 新巴尔虎左旗| 海晏县| 贞丰县| 德阳市| 措勤县| 栾川县| 萨嘎县| 玛曲县| 蒲江县| 濮阳市| 沾化县| 红安县| 和龙市| 嘉荫县| 呼图壁县| 开鲁县| 宁乡县| 车险| 广州市| 嘉荫县| 河北区| 隆安县| 磴口县| 溧水县| 织金县| 门源| 花垣县| 兴和县| 永修县| 盐池县| 晋江市| 罗平县| 南涧| 漯河市| 永顺县| 邵东县| 双牌县| 安宁市| 钦州市|