mysqlreport使用詳解

    進行MySQL的配置優化,首先必須找出MySQL的性能瓶頸所在;而SHOW STATUS輸出的報告正是用來計算性能瓶頸的參考數據。mysqlreport不像SHOW STATUS那樣簡單的羅列數據,而是對這些參考數據加以融合計算,整理成一個個優化參考點,然後就可以根據這個優化參考點的值以及該點的衡量標準,進行對應調整。

一、安裝:

下載mysqlreport工具,直接解壓即可,下載地址: http://hackmysql.com/scripts/mysqlreport-3.5.tgz

需要注意的是,mysqlreport是基於perl語言開發,其運行依賴於perl-DBI和perl-DBD-MySQL,所以需要先安裝這兩個軟件。

二、使用:

mysqlreport常用指令:

--user    # 指定連接數據庫的用戶

--password     #指定連接數據庫的密碼

--port     #指定端口

--host     #指定主機

--sokcet     #指定socket文件

--flush-status       #顯示完報告後,執行"FLUSH STATUS"語句

--outfile        #將報告輸出至某個文件中


三、輸出的報告詳細說明

1、基本信息

說明mysql當前的版本,運行的時間,以及當前系統時間

MySQL 5.1.61-log uptime 262 23:51:59 Wed Jul 16 17:58:05 2014 



2、索引報表

說明mysql當前索引緩衝區的使用率,如果過高,則需要調整key_buffer_size的大小了。write hit及read hit分別說明了寫索引和讀索引的效率

__ Key _________________________________________________________________

Buffer used 8.67M of 512.00M %Used: 1.69

  Current 51.75M %Usage: 10.11

Write hit 34.33%

Read hit 99.17% 


3、請求報表

1)第一部分mysql處理的總請求數、平均每秒處理的請求數及請求類型。

    QC Hists:是指mysql直接從查詢緩存中請求結果的數量,也就是查詢緩存的命中率,此值越高越好

    DMS:是指數據操作語言,也就是增刪改查

    Com_:是指mysql處理自身運行所使用的開銷

2)第二部分是說明mysql的慢查詢數,多長時間的查詢被認爲是慢查詢,是由long_query_time定義的。處理慢查詢的比例越低越好,一般不要超過0.05%。慢查詢日誌建議開啓。

3)第三部分詳細說明了DMS中各種語句的處理數及比例

4)第四部分則詳細說明了Com_中各事件的處理數及比例

__ Questions ___________________________________________________________

Total 4.12G 181.3/s

  QC Hits 2.93G 129.0/s %Total: 71.14

  DMS 714.48M 31.4/s 17.34

  Com_ 563.75M 24.8/s 13.68

  -Unknown 186.61M 8.2/s 4.53

  COM_QUIT 97.48M 4.3/s 2.37

Slow 3 s 49.32k 0.0/s 0.00 %DMS: 0.01 Log: ON

DMS 714.48M 31.4/s 17.34

  SELECT 536.16M 23.6/s 13.01 75.04

  DELETE 66.80M 2.9/s 1.62 9.35

  UPDATE 61.78M 2.7/s 1.50 8.65

  INSERT 49.34M 2.2/s 1.20 6.91

  REPLACE 401.78k 0.0/s 0.01 0.06

Com_ 563.75M 24.8/s 13.68

  show_fields 214.45M 9.4/s 5.20

  set_option 194.83M 8.6/s 4.73

  change_db 144.83M 6.4/s 3.51



5、查詢與排序

詳細說明mysql在查詢時的資源消耗

    scan展示的是對全表進行掃描的select語句個數

    full join則是多表聯合查詢的次數

__ SELECT and Sort _____________________________________________________

Scan 284.42M 12.5/s %SELECT: 53.05

Range 53.32M 2.3/s 9.95

Full join 3.40M 0.1/s 0.63

Range check 0 0/s 0.00

Full rng join 2.09k 0.0/s 0.00

Sort scan 242.41M 10.7/s

Sort range 5.78M 0.3/s

Sort mrg pass 0 0/s 


6、查詢緩存(只有在開啓了查詢緩存之後纔會出現)

詳細說明了查詢緩存的內存使用率

    Block Fragmnt:是指內存塊碎片,如果你有一個返回超小結果的海量查詢,默認的塊大小(即4KB)可能會導致大量的內存碎片,這個時候,需要降低"query_cache_min_res_unit"的值,比值越大,碎片越多,一般不建議超過10%

    Hits/Inserts/Prunes:其中Hits是最重要的,它反應了有多少查詢是從查詢緩存中直接獲得的,Prunes是指每秒刪除的碎片時,該值越低越好

     insert/prune:是一個波動性的QC指標。一個穩定運行中的QC,insert進QC的查詢數量應該大於prune掉的查詢數量。而一個不穩定的QC,比值或許是1:1,甚至偏向prune。這說明兩個問題:1、QC大小不夠;2、mysql試圖緩存一切

    hit/insert:用來反映QC的有效性。理想情況是:mysql插入一批穩定的查詢到QC裏,然後源源不斷的命中這批結果……所以,如果QC的有效性足夠,這個比值應該是偏向hit的。

__ Query Cache _________________________________________________________

Memory usage 68.37M of 128.00M %Used: 53.42

Block Fragmnt 18.92%

Hits 2.93G 129.0/s

Inserts 353.54M 15.6/s

Insrt:Prune 4.17:1 11.8/s

Hit:Insert 8.29:1 


7、表鎖

一行是總數,一行是當前數。鎖等待對於數據庫來說永遠是糟糕的事情。第三列的總比值反應了一個綜述的情況,無論如何不能高過10%,否則肯定就帶來一大堆的索引和慢查詢問題!

__ Table Locks _________________________________________________________

Waited 949 0.0/s %Total: 0.00

Immediate 2.01G 88.4/s 


8、表

一行是當前mysql打開的表個數,以及表緩存的使用率,另一行是指mysql運行以來的平均值。這裏有兩個值比較重要,一個是表的緩存使用率真,如果達到100%,則需要調整"table_open_cahce"的大小;另一個是當前打開表的頻率,一般這個值應該小於每秒1次。不過一個負載比較高而又運行的還不錯的mysql,可能能達到每秒打開7次表,依然保持100%的表緩存

__ Tables ______________________________________________________________

Open 128 of 128 %Cache: 100.00

Opened 39.85M 1.8/s 


9、數據庫連接數

如果最大連接數接近100%,則需要調整"max_connetions"參數,當然如果連接數過大,有可能是慢查詢、糟糕的索引、dns解析太慢所導致的問題;每秒連接數,一般小於5個每秒,但通常只要mysql運行正常,就無所謂

__ Connections _________________________________________________________

Max used 547 of 886 %Max: 61.74

Total 97.48M 4.3/s 


7、臨時表

mysql可以在內存、磁盤及臨時文件上創建臨時表,要儘可能避免在磁盤上創建臨時表,因爲速度最慢,要儘可能在內存中創建,第三行的Table就媽表示在內存中創建臨時表的大小,Size是指定的內存允許創建的臨時表的大小,可以通過"tmp_table_size"參數來調整其大小

__ Created Temp ________________________________________________________

Disk table 186.19M 8.2/s

Table 434.05M 19.1/s Size: 64.0M

File 5 0.0/s


8、線程

當mysql的連接數超過了線程緩存數時,需要增大"thread_cache_size"參數的大小

__ Threads _____________________________________________________________

Running 1 of 1

Cached 7 of 8 %Hit: 99.48

Created 509.01k 0.0/s

Slow 0 0/s


9、中斷及流量

__ Aborted _____________________________________________________________

Clients 2.36k 0.0/s

Connects 111.05k 0.0/s


__ Bytes _______________________________________________________________

Sent 2.56T 112.8k/s

Received 892.91G 39.3k/s


10、Innodb緩衝池

innodb緩衝池的大小可以通過"innodb_buffer_size"參數來調整,作爲一個innodb引擎的數據庫,請儘可能調大該值

__ InnoDB Buffer Pool __________________________________________________

Usage 1.00G of 1.00G %Used: 100.00

Read hit 100.00%

Pages

  Free 3 %Total: 0.00

  Data 62.67k 95.63 %Drty: 0.01

  Misc 2861 4.37

  Latched 0.00

Reads 4.27T 188.1k/s                         #innodb緩衝池讀性能

  From file 4.35M 0.2/s 0.00               #從文件讀取

  Ahead Rnd 243362 0.0/s                 #隨機讀

  Ahead Sql 134409 0.0/s                   #順序讀,只有進行全表掃描的時候纔會出現

Writes 3.17G 139.4/s                           #緩衝池寫的數量

Flushes 17.36M 0.8/s                          #緩衝池的頁刷新請求數

Wait Free 0 0/s                                    #空閒等待時間,越小越好


11、innodb鎖

__ InnoDB Lock _________________________________________________________

Waits 0 0/s          #等待某行解鎖的累積次數,最好是0次

Current 0             #當前正在等待解鎖的行個數,最好是0次

Time acquiring

  Total 0 ms

  Average 0 ms

  Max 0 ms



12、innodb數據、頁、行

第一部分列出了四種類型的數據操作,分別是讀、寫、刷新、等待

第二部分列出了innodb的頁信息,緩衝池中頁的創建、讀取、寫入的數量

第三部分則列出了一些對innodb行進行增刪改查的數據量

__ InnoDB Data, Pages, Rows ____________________________________________

Data

  Reads 5.93M 0.3/s        #整個innodb引擎完成所有的數據讀取次數,不是數據贏取的字節數    

  Writes 23.12M 1.0/s     #也是統計寫的次數

  fsync 14.65M 0.6/s        #刷新的次數

  Pending                       #讀、寫、刷新的等待次數

    Reads 0

    Writes 0

    fsync 0

Pages

  Created 2.04M 0.1/s

  Read 21.45M 0.9/s

  Written 17.36M 0.8/s

Rows

  Deleted 62.97M 2.8/s

  Inserted 283.26M 12.5/s

  Read 4.56T 200.7k/s

  Updated 34.59M 1.5/s



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章