帶你認識MySQL sys schema

来源:https://www.cnblogs.com/kunjian/archive/2019/10/11/11653853.html
-Advertisement-
Play Games

前言: MySQL 5.7中引入了一個新的sys schema,sys是一個MySQL自帶的系統庫,在安裝MySQL 5.7以後的版本,使用mysqld進行初始化時,會自動創建sys庫。 sys庫裡面的表、視圖、函數、存儲過程可以使我們更方便、快捷的瞭解到MySQL的一些信息,比如哪些語句使用了臨時 ...


前言: 

MySQL 5.7中引入了一個新的sys schema,sys是一個MySQL自帶的系統庫,在安裝MySQL 5.7以後的版本,使用mysqld進行初始化時,會自動創建sys庫。

sys庫裡面的表、視圖、函數、存儲過程可以使我們更方便、快捷的瞭解到MySQL的一些信息,比如哪些語句使用了臨時表、哪個SQL沒有使用索引、哪個schema中有冗餘索引、查找使用全表掃描的SQL、查找用戶占用的IO等,sys庫里這些視圖中的數據,大多是從performance_schema裡面獲得的。目標是把performance_schema的複雜度降低,讓我們更快的瞭解DB的運行情況。

1.sys庫總覽

本篇文章是基於MySQL 5.7.23版本實驗的。打開sys庫(希望你跟著我一起做哦),我們會發現sys schema里包含1個表,100個視圖,存儲過程及函數共48個,如下圖所示:

image.png
image.png
image.png

其實我們經常用到的是sys schema下的視圖,下麵將主要介紹各個視圖的作用,我們發現sys schema里的視圖主要分為兩類,一類是正常以字母開頭的,共52個,一類是以 x$ 開頭的,共48個。字母開頭的視圖顯示的是格式化數據,更易讀,而 x$ 開頭的視圖適合工具採集數據,顯示的是原始未處理過的數據。

下麵我們將按類別來分析以字母開頭的52個視圖:

  • host_summary:這個是伺服器層面的,以IP分組,比如裡面的視圖host_summary_by_file_io;
  • user_summary:這個是用戶層級的,以用戶分組,比如裡面的視圖user_summary_by_file_io;
  • innodb:這個是InnoDB層面的,比如視圖innodb_buffer_stats_by_schema;
  • io:這個是I/O層的統計,比如視圖io_global_by_file_by_bytes;
  • memory:關於記憶體的使用情況,比如視圖memory_by_host_by_current_bytes;
  • schema:關於schema級別的統計信息,比如schema_table_lock_waits;
  • session:關於會話級別的,這類視圖少一些,只有session和session_ssl_status;
  • statement:關於語句級別的,比如statements_with_errors_or_warnings;
  • wait:關於等待的,比如視圖waits_by_host_by_latency。

2.常用查詢介紹

1,查看每個客戶端IP過來的連接消耗了多少資源。
mysql> select * from host_summary;

2,查看某個數據文件上發生了多少IO請求。
mysql> select * from io_global_by_file_by_bytes;

3,查看每個用戶消耗了多少資源。
mysql> select * from user_summary;

4,查看總共分配了多少記憶體。
mysql> select * from memory_global_total;

5,資料庫連接來自哪裡,以及這些連接對資料庫的請求情況是怎樣的?
查看當前連接情況。
mysql> select host, current_connections, statements from host_summary;

6,查看當前正在執行的SQL和執行show full processlist的效果相當。
mysql> select conn_id, user, current_statement, last_statement from session;

7,資料庫中哪些SQL被頻繁執行?
執行下麵命令查詢TOP 10最熱SQL。
mysql> select db,exec_count,query from statement_analysis order by exec_count desc limit 10;

8,哪個文件產生了最多的IO,讀多,還是寫的多?
mysql> select * from io_global_by_file_by_bytes limit 10;

9,哪個表上的IO請求最多?
mysql> select * from io_global_by_file_by_bytes where file like ‘%ibd’ order by total desc limit 10;

10,哪個表被訪問的最多?先訪問statement_analysis,根據熱門SQL排序找到相應的數據表。
mysql> select * from statement_analysis order by avg_latency desc limit 10;

11,哪些SQL執行了全表掃描或執行了排序操作?
mysql> select * from statements_with_sorting;
mysql> select * from statements_with_full_table_scans;

12,哪些SQL語句使用了臨時表,又有哪些用到了磁碟臨時表?
查看statement_analysis中哪個SQL的tmp_tables 、tmp_disk_tables值大於0即可。
mysql> select db, query, tmp_tables, tmp_disk_tables from statement_analysis where tmp_tables>0 or tmp_disk_tables >0 order by (tmp_tables+tmp_disk_tables) desc limit 20;

13,哪個表占用了最多的buffer pool?
mysql> select * from innodb_buffer_stats_by_table order by allocated desc limit 10;

14,每個庫(database)占用多少buffer pool?
mysql> select * from innodb_buffer_stats_by_schema order by allocated desc limit 10;

15,每個連接分配多少記憶體?
利用session表和memory_by_thread_by_current_bytes分配表進行關聯查詢。
mysql> select b.user, current_count_used, current_allocated, current_avg_alloc, current_max_alloc, total_allocated,current_statement from memory_by_thread_by_current_bytes a, session b where a.thread_id = b.thd_id;

16,MySQL自增長欄位的最大值和當前已經使用到的值?
mysql> select * from schema_auto_increment_columns;

17,MySQL有哪些冗餘索引和無用索引?
mysql> select * from schema_redundant_indexes;
mysql> select * from schema_unused_indexes;

18,查看事務等待情況
mysql> select * from innodb_lock_waits;

總結: 

本文主要介紹sys庫相關內容,其實sys庫有很多有用的查詢,可以幫助你輕鬆瞭解資料庫的運行情況,原本需要查找performance_schema中多個表才能獲得的數據,現在查詢一個視圖即可滿足。當然,sys庫需要你詳細去瞭解,總結出你需要的查詢方法。

參考資料: 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 創建一個只讀用戶user2,只能查詢管理員用戶user1下的表,不能增刪改。 ...
  • mongodb中的全部數據: 查詢結果: 通過嵌入文檔中查詢指定title的數據,然後根據price排序,註意需要排序時將查詢的title也一併作為排序欄位,否則順序會錯亂。 查詢結果: ...
  • 建立索引常用的規則 表的主鍵、外鍵必須有索引; 數據量超過300的表應該有索引; 經常與其他表進行連接的表,在連接欄位上應該建立索引; 經常出現在Where子句中的欄位,特別是大表的欄位,應該建立索引; 索引應該建在選擇性高的欄位上; 索引應該建在小欄位上,對於大的文本欄位甚至超長欄位,不要建索引; ...
  • 1.這個異常是指,用戶向資料庫執行插入數據操作時,某條數據的某個欄位值過長,如果是varchar2類型的,當長度超過2000,--4000(最大值)之間的時候,oracle會自動將該欄位值轉為long型的(-_-||有點坑~),然後插入操作失敗。 2.改完數據類型之後還是報這個錯,原因是:當從dua ...
  • 大數據不是某個專業或一門編程語言,實際上它是一系列技術的組合運用。 有人通過下方的等式給出了大數據的定義。 大數據 = 編程技巧 + 數據結構和演算法 + 分析能力 + 資料庫技能 + 數學 + 機器學習 + NLP + OS + 密碼學 + 並行編程 雖然這個等式看起來很長,需要學習的東西很多,但付 ...
  • 問題描述 優化過程中遇到一個SQL: 其執行計劃為: 從執行計劃來看,使用Using index(覆蓋索引)已經是最優的執行計劃,但每次查詢掃描數據較多,影響整體查詢性能。 優化方案 查詢需要使用SUM計算user_value的總和,借用1+1+0+0+0+0+0=1+1=2的例子,進行如下測試: ...
  • 環境: ubuntu18.04.2 mysql5.7.21 恢復內容結束 ...
  • 環境: ubuntu18.04.2 mysql5.7.21 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...