MySQL-性能分析

1、數據庫服務器的優化步驟

在這里插入圖片描述

2、查看系統性能參數

  • 可以使用show status語句查詢一些MySQL數據庫服務器的性能參數 執行頻率
  • 語法格式:show [ global | session ] status like '參數'
  • 常用性能參數如下所示
參數名說明
connection連接MySQL服務器的次數
uptimeMySQL服務器上線時間
slow_queries慢查詢的次數
innodb_rows_readselect 查詢返回行數
innodb_rows_inserted執行insert操作插入的行數
innodb_rows_updated執行update操作更新的行數
innodb_rows_delete執行delete操作刪除的行數
com_select查詢操作的次數
com_insert插入操作的次數。對于批量插入的insert操作,只累加一次
com_update更新操作的次數
com_delete刪除操作的次數
last_query_costSQL查詢成本

3、慢查詢日志(定位執行慢的SQL)

  • MySQL慢查詢日志用來記錄MySQL中響應時間超過設定閾值的語句,具體運行時間超過 long_query_time 值的SQL將會被記錄到慢查詢日志中。long_query_time的默認值為 10

  • 默認情況下,MySQL數據庫 沒有開啟慢查詢日志,需要手動設置參數。

  • 是調優需要一般不建議啟動該參數,因為開啟慢查詢日志或多或少會對性能造成一定影響。

  • 查詢慢查詢日志是否開啟

mysql> show variables like 'slow_query_log';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | OFF   |
+----------------+-------+
1 row in set (0.01 sec)
  • 開啟 slow_query_log
mysql> set global slow_query_log = on;
Query OK, 0 rows affected (0.12 sec)mysql> show variables like 'slow_query_log%';
+---------------------+--------------------------------+
| Variable_name       | Value                          |
+---------------------+--------------------------------+
| slow_query_log      | ON                             |
| slow_query_log_file | /var/lib/mysql/rqtanc-slow.log |
+---------------------+--------------------------------+
2 rows in set (0.00 sec)
  • 查詢 long_query_time 閾值
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
  • 修改long_query_time 閾值
[root@rqtanc ~]# vim /etc/my.cnf#設置
long_query_time = 5#重啟mysql
[root@rqtanc ~]# systemctl status mysqld.service
  • 查看慢查詢數目
mysql> show status like 'slow_queries';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 0     |
+---------------+-------+
1 row in set (0.00 sec)

4、慢查詢日志分析工具: mysqldumpslow

  • 查看 mysqldumpslow 幫助信息
[root@rqtanc ~]# mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]Parse and summarize the MySQL slow query log. Options are--verbose    verbose--debug      debug--help       write this text to standard output-v           verbose-d           debug-s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is defaultal: average lock timear: average rows sentat: average query timec: countl: lock timer: rows sentt: query time  -r           reverse the sort order (largest last instead of first)-t NUM       just show the top n queries-a           don't abstract all numbers to N and strings to 'S'-n NUM       abstract numbers with at least n digits within names-g PATTERN   grep: only consider stmts that include this string-h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),default is '*', i.e. match all-i NAME      name of server instance (if using mysql.server startup script)-l           don't subtract lock time from total time
  • 分析文件源為:
mysql> show variables like 'slow_query_log_file%';
+---------------------+--------------------------------+
| Variable_name       | Value                          |
+---------------------+--------------------------------+
| slow_query_log_file | /var/lib/mysql/rqtanc-slow.log |
+---------------------+--------------------------------+
1 rows in set (0.00 sec)
  • 執行以下語句進行分析
[root@rqtanc ~]# mysqldumpslow -a -s t -t 5 /var/lib/mysql/rqtanc-slow.logReading mysql slow query log from /var/lib/mysql/rqtanc-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), 0users@0hostsDied at /usr/bin/mysqldumpslow line 162, <> chunk 1.

5、查看SQL執行成本:show profile

  • 見 MySQL-SQL執行流程及原理 一文

6、分析查詢語句:explain

參考 官方文檔

  • 定位查詢慢的SQL以后,可以使用explain 或 describe 工具做針對性的分析查詢語句

  • 基本語法(查詢執行計劃): explain + SQL 語句 如:

mysql> explain select 1;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra          |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+
|  1 | SIMPLE      | NULL  | NULL       | NULL | NULL          | NULL | NULL    | NULL | NULL |     NULL | No tables used |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+
1 row in set, 1 warning (0.00 sec)
  • explain語句輸出列的相關說明
列名說明
id在一個大的查詢語句中每個select關鍵字都對應一個唯一的id
select_typeselect 關鍵字對應的哪個查詢類型
table表名
partitions匹配的分區信息
type針對單表的訪問方法
possible_keys可能用到的索引
key實際上用到的索引
key_len實際上使用到的索引長度
ref當使用索引列等值查詢時,與索引列進行等值匹配的對象信息
rows預估的需要讀取的記錄條數
filtered某個表經過搜索條件過濾后剩余記錄條數的百分比
Extra一些額外信息

6.1、id列

  • id 列的值標識了查詢執行中的每一步操作,并反映了這些步驟的執行順序和嵌套關系。
  • id如果相同,可以認為是一組從上往下執行
  • 在所有組中,id值越大,優先級越高,越先執行
  • 每一個id值表示一趟獨立的查詢,一個SQL的查詢趟數越少越好

6.2、select_type 列

  • 一個大的查詢語句中可以包含若干個select關鍵字,每個關鍵字代表一個小的查詢語句,而每個select關鍵字的from子句中可以包含若干張表
  • 每一張表對應執行計劃輸出中的一條記錄,對于同一個select關鍵字中的表來說,他的id值是相同的
查詢類型說明
SIMPLE表示查詢是簡單的 SELECT 查詢,不包含任何子查詢或聯合查詢。
PRIMARY表示最外層的 SELECT 查詢,也可以稱為主查詢。
SUBQUERY表示查詢中的子查詢。
DERIVED表示派生表,這是一個臨時表,通常是在 FROM 子句中的子查詢結果。
UNION表示聯合查詢中的第二個或后續的 SELECT。
UNION RESULT表示聯合查詢結果集的合并。
DEPENDENT SUBQUERY表示依賴外部查詢結果的子查詢,每次執行都依賴于外部查詢的結果。
UNCACHEABLE SUBQUERY表示子查詢結果不可緩存,每次執行都重新計算。
MATERIALIZED表示使用了物化表(Materialized Table),這是一個存儲預先計算結果的臨時表。

6.3、partitions列

  • 出現位置:partitions 列通常出現在執行計劃的結果中,用于指示每個操作所涉及的分區信息。
  • 分區名稱:對于涉及到分區的操作,partitions 列可能會顯示涉及的具體分區名稱。
  • 分區范圍:對于涉及到范圍分區的操作,partitions 列可能會顯示涉及的分區范圍。
  • 作用
    • 顯示分區信息:partitions 列提供了有關查詢涉及的分區的信息,包括查詢在執行過程中訪問了哪些分區。
    • 性能優化:分析查詢涉及的分區信息可以幫助優化查詢性能,例如確保查詢只訪問必要的分區,避免不必要的分區掃描。

6.4、type 列

查詢類型說明
system表示訪問系統表,通常只有一行記錄。
const表示通過常量條件進行訪問,通常使用索引直接定位到一行記錄。
eq_ref表示通過唯一索引進行等值連接,通常用于連接操作。
ref表示通過非唯一索引進行等值連接,可能會返回多個匹配行。
range表示通過索引范圍進行訪問,通常用于范圍查詢。
index表示通過索引進行全表掃描,相比于 all 類型,這種訪問方法更高效。
all表示全表掃描,通常是最低效的訪問方法,應盡量避免。
  • 總結
    • type 列提供了關于查詢執行時訪問表數據的方式的信息。
    • 分析 type 列的值可以幫助你了解查詢執行的效率,從而進行優化。
    • 應該盡量避免使用全表掃描(type 為 all),而更傾向于使用索引來加速查詢。

6.5、explain四種輸出格式 語法:EXPLAIN FORMAT= [ JSON | TREE | EXTENDED ]

  • 傳統格式:表格形勢
  • json格式:
    • 將查詢執行計劃輸出為 JSON 格式的數據。這種格式適用于對查詢執行計劃進行進一步的自動化處理和分析,例如通過腳本進行解析和比較。JSON 格式輸出了與標準格式相同的信息,但以 JSON 對象的形式表示,每個屬性對應于查詢執行計劃中的一個字段。
  • tree格式:
    • 樹形格式提供了更具可讀性的查詢執行計劃信息。輸出結果以樹形結構呈現,每個節點代表查詢執行計劃中的一個操作。每個節點包含的信息通常與標準格式相同,但以樹形結構展示,更直觀地顯示了查詢執行的流程和嵌套關系。
  • 拓展格式(EXTENDED)輸出:
    • 提供了比標準格式更詳細的查詢執行計劃信息。除了標準格式中的列外,還包括了額外的信息,如每個操作的狀態、掃描方式、索引長度等。這種格式適用于對查詢執行細節進行深入分析和調優,提供了更多的信息用于性能優化。

6.6、SHOW WARNINGS

  • 用于顯示最近執行的語句產生的警告信息。警告通常是一些執行中的問題或不符合預期的情況的提示。
  • SHOW WARNINGS 命令可以幫助你識別并了解這些問題,以便及時采取措施解決。
  • 警告信息可能包含以下內容:
    • Warning:警告的代碼或編號。
    • Level:警告的級別,通常是 Note、Warning 或 Error。
    • Message:警告的具體消息描述

7、分析優化器執行計劃:trace

  • optimizer_trace 可以跟蹤優化器做出得各種決策(如:訪問表的方法、各種開銷計算、各種轉換等,并將跟蹤結果記錄到 information_schema.optimizer_trace表中)
  • 此功能默認關閉,開啟trace并將格式設置為json,同時設置trace最大能夠使用的內存大小,避免解析過程中因內存過小而不能夠完整展示
  • 可分析的語句:
    • select
    • insert
    • update
    • delete
    • replace
    • explain
    • set
    • declare
    • case
    • if
    • return
    • call

8、MySQL監控分析視圖:sys schema

  • 主機相關:以 host_summary開頭,主要匯總了IO延遲的信息
  • InnoDB相關:以innodb開頭,匯總了innodb buffer信息和事務等待innodb鎖的信息
  • I/O相關:以io開頭,匯總了等待I/O及使用量的情況
  • 內存使用情況:以memory開頭,從主機、線程、事件等角度展示內存使用的情況
  • 連接與會話信息: process list和session相關視圖,總結了會話相關情況
  • 表相關:以schema_table開頭的視圖,展示了表的統計信息
  • 索引信息:統計了索引的使用情況,包含冗余索引和未使用索引的情況
  • 語句相關:以statement開頭,包含執行全表掃描,使用臨時表,排序等的語句信息
  • 用戶相關:以user開頭的視圖,統計了用戶使用的文件I/O、執行語句統計信息
  • 等待事件相關信息:以wait開頭,展示等待事件的延遲情況

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

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

相關文章

Autodesk 3ds Max下載,3ds MAX 2024三維建模渲染軟件安裝包下載安裝

3ds MAX中文版&#xff0c;其強大的功能和靈活的操作為廣大用戶提供了無限的創意空間&#xff0c;使得高質量動畫、最新游戲、設計效果等領域的制作需求得以完美滿足。 ? 作為一款三維建模軟件&#xff0c;3ds MAX中文版具備極高的建模精度和渲染質量。它支持多種建模方式&am…

【Fiddler抓包工具】第四節.斷點設置和弱網測試

文章目錄 前言一、斷點設置 1.1 全局斷點 1.2 局部斷點 1.3 打斷點的幾種常用命令 1.4 篡改響應報文二、弱網測試 2.1 網絡限速 2.2 精準限速總結 前言 一、斷點設置 1.1 全局斷點 特點&#xff1a; 中斷Fiddler捕獲的所有請求&#xff0c;包括…

記錄一次prometheus因時區不同導致的無法獲取數據問題

一、故障出現原因 prometheus機器壓力過大&#xff0c;內存耗盡&#xff0c;負載飆高&#xff0c;導致無法登錄&#xff1b; 于是從公有云web界面進行重啟&#xff0c;重啟后內存還是不足&#xff0c;負載很快升高&#xff1b; 對機器進行配置變更&#xff0c;由4C8G升級為4…

在鏈游中,智能合約如何被用于實現游戲內的各種功能

隨著區塊鏈技術的快速發展&#xff0c;鏈游&#xff08;Blockchain Games&#xff09;作為區塊鏈技術的重要應用領域之一&#xff0c;正逐漸展現出其獨特的魅力和優勢。其中&#xff0c;智能合約作為鏈游的核心技術之一&#xff0c;對于實現游戲內的各種功能起到了至關重要的作…

【C++初階】—— 類和對象 (下)

&#x1f4dd;個人主頁&#x1f339;&#xff1a;EterNity_TiMe_ ?收錄專欄?&#xff1a;C “ 登神長階 ” &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; 類和對象 1. 運算符重載運算符重載賦值運算符重載前置和后置重載 2. 成員函數的補充3. 初始化列…

Java的函數式接口和 Lambda 表達式

在 Java 8 中&#xff0c;可以通過使用函數式接口和 Lambda 表達式來實現類似 JavaScript 中將函數作為參數傳遞的功能。 以下是一個簡單的示例&#xff0c;演示如何在 Java 中使用函數式接口將函數作為參數傳遞&#xff1a; 定義一個函數式接口&#xff08;函數式接口是只有…

CentOS上升級glibc2.17至glibc2.31

glibc是Linux系統中的重要組件之一。在CentOS中&#xff0c;glibc通常是作為系統的默認C標準庫使用的&#xff0c;因為它是許多軟件的基礎庫。在CentOS中&#xff0c;glibc的版本通常與CentOS版本一起發布。因為CentOS通常會優先選擇穩定性而不是最新性&#xff0c;所以CentOS使…

Vue項目如何進行XSS防護

前言 在目前主推網絡安全的情況下&#xff0c;很多開發項目都需要在上線前進行滲透測試&#xff0c;當符合滲透測試標準及沒有安全漏洞即可正常上線&#xff0c;當前還會有代碼審計的&#xff0c;這個另當別論。 如何對XSS進行防護 在很多的富文本編輯器項目中&#xff0c;x…

leecode熱題100---994:腐爛的橘子

題目&#xff1a; 在給定的 m x n 網格 grid 中&#xff0c;每個單元格可以有以下三個值之一&#xff1a; 值 0 代表空單元格&#xff1b; 值 1 代表新鮮橘子&#xff1b; 值 2 代表腐爛的橘子。 每分鐘&#xff0c;腐爛的橘子 周圍 4 個方向上相鄰 的新鮮橘子都會腐爛。 返回…

C++之第九課

課程列表 今天&#xff0c;我們要學習一種結構&#xff1a;循環結構。 循環的方法有3種。 今天先將第1種for學了&#xff1a; int a;//循環變量 int b; for(a1;a<10;a){//像if那樣“打包”cout<<a<<" ";b; } 當然&#xff0c;也可以這樣寫&#…

【MySQL精通之路】InnoDB(5)-內存結構

總目錄&#xff1a; 【MySQL精通之路】InnoDB存儲引擎-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】InnoDB(4)-架構圖-CSDN博客 目錄 ?編輯 1 緩存池&#xff08;Buffer Pool&#xff09; 1.1 緩存池LRU算法 1.2 緩存區配置 1.3 使用InnoDB標準監視器監視緩存池 …

SSRF服務端請求偽造漏洞原理與修復及靶場實踐

SSRF服務端請求偽造漏洞原理與修復及靶場實踐 SSRF漏洞原理與檢測 SSRF&#xff08;Server-Side Request Forgery&#xff0c;服務器端請求偽造&#xff09;漏洞是一種因為服務端提供了遠程訪問服務&#xff0c;而并未對請求目標進行限制或限制不嚴格而引起的安全漏洞&#x…

Java Apache Jexl規則引擎初體驗

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、模板引擎的選擇&#xff1f;二、什么是JEXL規則引擎&#xff1f;優點缺點 三、其他規則引擎四、示例1.引入依賴2.方法示例3、代碼解釋4、效果![import java…

VMware虛擬機Ubuntu 22.04.4 LTS系統 NAT網絡設置異常解決

現象&#xff1a; 近日&#xff0c;一直工作正常的虛擬機莫名出現網絡無法連接的情況。 參考網上的各種教程&#xff0c;終于解決問題。 如遇到類似情況的&#xff0c;可以嘗試這個方式&#xff0c;看能否解決問題。 網絡連接&#xff1a;采用NAT模式 異常&#xff1a;網絡圖標…

C++數據結構——哈希表

前言&#xff1a;本篇文章將繼續進行C數據結構的講解——哈希表。 目錄 一.哈希表概念 二.哈希函數 1.除留取余法 三.哈希沖突 1.閉散列 線性探測 &#xff08;1&#xff09;插入 &#xff08;2&#xff09;刪除 2. 開散列 開散列概念 四.閉散列哈希表 1.基本框架 …

場內期權怎么開戶?傭金手續費最低是多少?

今天期權懂帶你了解場內期權怎么開戶&#xff1f;傭金手續費最低是多少&#xff1f;我國的首個場內期權是50ETF期權&#xff0c;隨著投資者對期權產品日漸熟悉&#xff0c;投資者參與數量與交易量穩步增長。 場內期權怎么開戶&#xff1f; 滿足資金要求&#xff1a;根據監管要…

自動打卡腳本

奕輔導自動打卡腳本 打卡腳本&#xff0c;使用前需手動打卡一次并需要抓包&#xff0c;在其中找到相關的token。 # -*- encoding:utf-8 -*-import requests import jsonpunch_in_data {"questionnairePublishEntityId": "1001640744275339000980000000001&qu…

MyBatis:Parameter Maps collection does not contain value for 報錯解決收錄

MyBatis&#xff1a;Parameter Maps collection does not contain value for 報錯問題解決收錄 1.報錯收錄 后端測試時偶然遇到的用mybatis生成好的mapper文件&#xff0c;報Result Maps collection does not contain value…的錯誤 2.報錯分析 java.lang.ILledalAraumentEx…

必應bing國內廣告開戶首充和開戶費是多少?

微軟必應Bing作為國內領先的搜索引擎之一&#xff0c;其廣告平臺憑借其精準的投放、高效的數據分析和廣泛的用戶覆蓋&#xff0c;已成為眾多企業的首選。 根據最新政策&#xff0c;2024年必應Bing國內廣告開戶預充值金額設定為1萬元人民幣起。這一調整旨在確保廣告主在賬戶初始…

【嵌入式DIY實例】-OLED顯示DHT22傳感器數據

OLED顯示DHT22傳感器數據 1、應用實例介紹 本次實例將演示如何在OLED中顯示DHT22溫度濕度傳感器的數據。實例主要分兩步來完成: DHT22傳感器驅動,采集溫度和濕度OLED驅動,顯示采集到的溫度值和濕度值。在前面的文章中,對OLED的應用和驅動做了介紹,請參考: ESP8266-Ardu…