亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL幾點重要的性能指標計算和優化方法總結

2024-07-24 13:12:40
字體:
來源:轉載
供稿:網友

1 QPS計算(每秒查詢數)

針對MyISAM引擎為主的DB

MySQL> show GLOBAL status like 'questions';+---------------+------------+| Variable_name | Value   |+---------------+------------+| Questions   | 2009191409 |+---------------+------------+1 row in set (0.00 sec)mysql> show global status like 'uptime';+---------------+--------+| Variable_name | Value |+---------------+--------+| Uptime    | 388402 |+---------------+--------+1 row in set (0.00 sec)

QPS=questions/uptime=5172,mysql自啟動以來的平均QPS,如果要計算某一時間段內的QPS,可在高峰期間獲取間隔時間t2-t1,然后分別計算出t2和t1時刻的q值,QPS=(q2-q1)/(t2-t1)

針對InnnoDB引擎為主的DB

mysql> show global status like 'com_update';+---------------+----------+| Variable_name | Value  |+---------------+----------+| Com_update  | 87094306 |+---------------+----------+1 row in set (0.00 sec)mysql> show global status like 'com_select';+---------------+------------+| Variable_name | Value   |+---------------+------------+| Com_select  | 1108143397 |+---------------+------------+1 row in set (0.00 sec)mysql> show global status like 'com_delete';+---------------+--------+| Variable_name | Value |+---------------+--------+| Com_delete  | 379058 |+---------------+--------+1 row in set (0.00 sec)mysql> show global status like 'uptime';+---------------+--------+| Variable_name | Value |+---------------+--------+| Uptime    | 388816 |+---------------+--------+1 row in set (0.00 sec)

QPS=(com_update+com_insert+com_delete+com_select)/uptime=3076,某一時間段內的QPS查詢方法同上。

2 TPS計算(每秒事務數)

mysql> show global status like 'com_commit';+---------------+---------+| Variable_name | Value  |+---------------+---------+| Com_commit  | 7424815 |+---------------+---------+1 row in set (0.00 sec)mysql> show global status like 'com_rollback';+---------------+---------+| Variable_name | Value  |+---------------+---------+| Com_rollback | 1073179 |+---------------+---------+1 row in set (0.00 sec)mysql> show global status like 'uptime';+---------------+--------+| Variable_name | Value |+---------------+--------+| Uptime    | 389467 |+---------------+--------+1 row in set (0.00 sec)TPS=(com_commit+com_rollback)/uptime=22

3 線程連接數和命中率

mysql> show global status like 'threads_%';+-------------------+-------+| Variable_name   | Value |+-------------------+-------+| Threads_cached  | 480  |   //代表當前此時此刻線程緩存中有多少空閑線程| Threads_connected | 153  |  //代表當前已建立連接的數量,因為一個連接就需要一個線程,所以也可以看成當前被使用的線程數| Threads_created  | 20344 |  //代表從最近一次服務啟動,已創建線程的數量| Threads_running  | 2   |   //代表當前激活的(非睡眠狀態)線程數+-------------------+-------+4 rows in set (0.00 sec)mysql> show global status like 'Connections';+---------------+-----------+| Variable_name | Value   |+---------------+-----------+| Connections  | 381487397 |+---------------+-----------+1 row in set (0.00 sec)線程緩存命中率=1-Threads_created/Connections  = 99.994%我們設置的線程緩存個數mysql> show variables like '%thread_cache_size%';+-------------------+-------+| Variable_name   | Value |+-------------------+-------+| thread_cache_size | 500  |+-------------------+-------+1 row in set (0.00 sec)

根據Threads_connected可預估thread_cache_size值應該設置多大,一般來說250是一個不錯的上限值,如果內存足夠大,也可以設置成thread_cache_size值和threaads_connected值相同;

或者通過觀察threads_created值,如果該值很大或一直在增長,可以適當增加thread_cache_size的值;在休眠狀態下每個線程大概占用256KB左右的內存,所以當內存足夠時,設置太小也不會節約太多內存,除非該值已經超過幾千。

4 表緩存

mysql> show global status like 'open_tables%';+---------------+-------+| Variable_name | Value |+---------------+-------+| Open_tables  | 2228 |+---------------+-------+1 row in set (0.00 sec)

我們設置的打開表的緩存和表定義緩存

mysql> show variables like 'table_open_cache';+------------------+-------+| Variable_name  | Value |+------------------+-------+| table_open_cache | 16384 |+------------------+-------+1 row in set (0.00 sec)mysql> show variables like 'table_defi%';+------------------------+-------+| Variable_name     | Value |+------------------------+-------+| table_definition_cache | 2000 |+------------------------+-------+1 row in set (0.00 sec)

針對MyISAM:

mysql每打開一個表,都會讀入一些數據到table_open_cache 緩存 中,當mysql在這個緩存中找不到相應的信息時,才會去磁盤上直接讀取,所以該值要設置得足夠大以避免需要重新打開和重新解析表的定義,一般設置為max_connections的10倍,但最好保持在10000以內。

還有種依據就是根據狀態open_tables的值進行設置,如果發現open_tables的值每秒變化很大,那么可能需要增大table_open_cache的值。

table_definition_cache 通常簡單設置為服務器中存在的表的數量,除非有上萬張表。

針對InnoDB:

與MyISAM不同,InnoDB的open table和open file并無直接聯系,即打開frm表時其相應的ibd文件可能處于關閉狀態;

故InnoDB只會用到table_definiton_cache,不會使用table_open_cache;

其frm文件保存于table_definition_cache中,而idb則由innodb_open_files決定(前提是開啟了innodb_file_per_table),最好將innodb_open_files設置得足夠大,使得服務器可以保持所有的.ibd文件同時打開。

5 最大連接數

mysql> show global status like 'Max_used_connections';+----------------------+-------+| Variable_name    | Value |+----------------------+-------+| Max_used_connections | 1785 |+----------------------+-------+1 row in set (0.00 sec)

我們設置的max_connections大小

mysql> show variables like 'max_connections%';+-----------------+-------+| Variable_name  | Value |+-----------------+-------+| max_connections | 4000 |+-----------------+-------+1 row in set (0.00 sec)

通常max_connections的大小應該設置為比Max_used_connections狀態值大,Max_used_connections狀態值反映服務器連接在某個時間段是否有尖峰,如果該值大于max_connections值,代表客戶端至少被拒絕了一次,可以簡單地設置為符合以下條件:Max_used_connections/max_connections=0.8

6 Innodb 緩存命中率

mysql> show global status like 'innodb_buffer_pool_read%';+---------------------------------------+--------------+| Variable_name             | Value    |+---------------------------------------+--------------+| Innodb_buffer_pool_read_ahead_rnd   | 0      || Innodb_buffer_pool_read_ahead     | 268720    |   //預讀的頁數| Innodb_buffer_pool_read_ahead_evicted | 0      |   | Innodb_buffer_pool_read_requests   | 480291074970 | //從緩沖池中讀取的次數| Innodb_buffer_pool_reads       | 29912739   |     //表示從物理磁盤讀取的頁數+---------------------------------------+--------------+5 rows in set (0.00 sec)

緩沖池命中率 = (Innodb_buffer_pool_read_requests)/(Innodb_buffer_pool_read_requests + Innodb_buffer_pool_read_ahead + Innodb_buffer_pool_reads)=99.994%

如果該值小于99.9%,建議就應該增大innodb_buffer_pool_size的值了,該值一般設置為內存總大小的75%-85%,或者計算出操作系統所需緩存+mysql每個連接所需的內存(例如排序緩沖和臨時表)+MyISAM鍵緩存,剩下的內存都給innodb_buffer_pool_size,不過也不宜設置太大,會造成內存的頻繁交換,預熱和關閉時間長等問題。

7 MyISAM Key Buffer命中率和緩沖區使用率

mysql> show global status like 'key_%';+------------------------+-----------+| Variable_name     | Value   |+------------------------+-----------+| Key_blocks_not_flushed | 0     || Key_blocks_unused   | 106662  || Key_blocks_used    | 107171  || Key_read_requests   | 883825678 || Key_reads       | 133294  || Key_write_requests   | 217310758 || Key_writes       | 2061054  |+------------------------+-----------+7 rows in set (0.00 sec)mysql> show variables like '%key_cache_block_size%';+----------------------+-------+| Variable_name    | Value |+----------------------+-------+| key_cache_block_size | 1024 |+----------------------+-------+1 row in set (0.00 sec)mysql> show variables like '%key_buffer_size%';+-----------------+-----------+| Variable_name  | Value   |+-----------------+-----------+| key_buffer_size | 134217728 |+-----------------+-----------+1 row in set (0.00 sec)

緩沖區的使用率=1-(Key_blocks_unused*key_cache_block_size/ key_buffer_size)=18.6%

讀命中率=1-Key_reads /Key_read_requests=99.98%

寫命中率=1-Key_writes / Key_write_requests =99.05%

可看到緩沖區的使用率并不高,如果很長一段時間后還沒有使用完所有的鍵緩沖,可以考慮把緩沖區調小一點。

鍵緩存命中率可能意義不大,因為它和應用相關,有些應用在95%的命中率下就工作良好,有些則需要99.99%,所以從經驗上看,每秒的緩存未命中次數更重要,假設一個獨立磁盤每秒能做100個隨機讀,那么每秒有5個緩沖未命中可能不會導致I/O繁忙,但每秒80個就可能出現問題。

每秒緩存未命中=Key_reads/uptime=0.33

8 臨時表使用情況

mysql> show global status like 'Created_tmp%';+-------------------------+----------+| Variable_name      | Value  |+-------------------------+----------+| Created_tmp_disk_tables | 19226325 || Created_tmp_files    | 117   || Created_tmp_tables   | 56265812 |+-------------------------+----------+3 rows in set (0.00 sec)mysql> show variables like '%tmp_table_size%';+----------------+----------+| Variable_name | Value  |+----------------+----------+| tmp_table_size | 67108864 |+----------------+----------+1 row in set (0.00 sec)

可看到總共創建了56265812 張臨時表,其中有19226325 張涉及到了磁盤IO,大概比例占到了0.34,證明數據庫應用中排序,join語句涉及的數據量太大,需要優化SQL或者增大tmp_table_size的值,我設的是64M。該比值應該控制在0.2以內。

9 binlog cache使用情況

mysql> show status like 'Binlog_cache%'; +-----------------------+----------+| Variable_name     | Value  |+-----------------------+----------+| Binlog_cache_disk_use | 15    || Binlog_cache_use   | 95978256 |+-----------------------+----------+2 rows in set (0.00 sec)mysql> show variables like 'binlog_cache_size';+-------------------+---------+| Variable_name   | Value  |+-------------------+---------+| binlog_cache_size | 1048576 |+-------------------+---------+1 row in set (0.00 sec)

Binlog_cache_disk_use表示因為我們binlog_cache_size設計的內存不足導致緩存二進制日志用到了臨時文件的次數

Binlog_cache_use 表示 用binlog_cache_size緩存的次數

當對應的Binlog_cache_disk_use 值比較大的時候 我們可以考慮適當的調高 binlog_cache_size 對應的值

10 Innodb log buffer size的大小設置

mysql> show variables like '%innodb_log_buffer_size%';+------------------------+---------+| Variable_name     | Value  |+------------------------+---------+| innodb_log_buffer_size | 8388608 |+------------------------+---------+1 row in set (0.00 sec)mysql> show status like 'innodb_log_waits';+------------------+-------+| Variable_name  | Value |+------------------+-------+| Innodb_log_waits | 0   |+------------------+-------+1 row in set (0.00 sec)

innodb_log_buffer_size我設置了8M,應該足夠大了;Innodb_log_waits表示因log buffer不足導致等待的次數,如果該值不為0,可以適當增大innodb_log_buffer_size的值。

11 表掃描情況判斷

mysql> show global status like 'Handler_read%';+-----------------------+--------------+| Variable_name     | Value    |+-----------------------+--------------+| Handler_read_first  | 19180695   || Handler_read_key   | 30303690598 || Handler_read_last   | 290721    || Handler_read_next   | 51169834260 || Handler_read_prev   | 1267528402  || Handler_read_rnd   | 219230406  || Handler_read_rnd_next | 344713226172 |+-----------------------+--------------+7 rows in set (0.00 sec)

Handler_read_first:使用索引掃描的次數,該值大小說不清系統性能是好是壞

Handler_read_key:通過key進行查詢的次數,該值越大證明系統性能越好

Handler_read_next:使用索引進行排序的次數
Handler_read_prev:此選項表明在進行索引掃描時,按照索引倒序從數據文件里取數據的次數,一般就是ORDER BY ... DESC

Handler_read_rnd:該值越大證明系統中有大量的沒有使用索引進行排序的操作,或者join時沒有使用到index

Handler_read_rnd_next:使用數據文件進行掃描的次數,該值越大證明有大量的全表掃描,或者合理地創建索引,沒有很好地利用已經建立好的索引

12 Innodb_buffer_pool_wait_free

mysql> show global status like 'Innodb_buffer_pool_wait_free';+------------------------------+-------+| Variable_name        | Value |+------------------------------+-------+| Innodb_buffer_pool_wait_free | 0   |+------------------------------+-------+1 row in set (0.00 sec)

該值不為0表示buffer pool沒有空閑的空間了,可能原因是innodb_buffer_pool_size設置太大,可以適當減少該值。

13 join操作信息

mysql> show global status like 'select_full_join';+------------------+-------+| Variable_name  | Value |+------------------+-------+| Select_full_join | 10403 |+------------------+-------+1 row in set (0.00 sec)

該值表示在join操作中沒有使用到索引的次數,值很大說明join語句寫得很有問題

mysql> show global status like 'select_range';+---------------+----------+| Variable_name | Value  |+---------------+----------+| Select_range | 22450380 |+---------------+----------+1 row in set (0.00 sec)

該值表示第一個表使用ranges的join數量,該值很大說明join寫得沒有問題,通??刹榭磗elect_full_join和select_range的比值來判斷系統中join語句的性能情況

mysql> show global status like 'Select_range_check';+--------------------+-------+| Variable_name   | Value |+--------------------+-------+| Select_range_check | 0   |+--------------------+-------+1 row in set (0.00 sec)

如果該值不為0需要檢查表的索引是否合理,表示在表n+1中重新評估表n中的每一行的索引是否開銷最小所做的聯接數,意味著表n+1對該聯接而言并沒有有用的索引。

mysql> show GLOBAL status like 'select_scan';+---------------+-----------+| Variable_name | Value   |+---------------+-----------+| Select_scan  | 116037811 |+---------------+-----------+1 row in set (0.00 sec)

select_scan表示掃描第一張表的連接數目,如果第一張表中每行都參與聯接,這樣的結果并沒有問題;如果你并不想要返回所有行但又沒有使用到索引來查找到所需要的行,那么計數很大就很糟糕了。

14 慢查詢

mysql> show global status like 'Slow_queries';+---------------+--------+| Variable_name | Value |+---------------+--------+| Slow_queries | 114111 |+---------------+--------+1 row in set (0.00 sec)

該值表示mysql啟動以來的慢查詢個數,即執行時間超過long_query_time的次數,可根據Slow_queries/uptime的比值判斷單位時間內的慢查詢個數,進而判斷系統的性能。

15表鎖信息

mysql> show global status like 'table_lock%';+-----------------------+------------+| Variable_name     | Value   |+-----------------------+------------+| Table_locks_immediate | 1644917567 || Table_locks_waited  | 53     |+-----------------------+------------+2 rows in set (0.00 sec)

這兩個值的比值:Table_locks_waited /Table_locks_immediate 趨向于0,如果值比較大則表示系統的鎖阻塞情況比較嚴重

以上這篇MySQL幾點重要的性能指標計算和優化方法總結就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲电影免费观看| 日韩电影第一页| 欧美在线观看网站| 久久精品成人欧美大片| 亚洲香蕉伊综合在人在线视看| 久久久久国色av免费观看性色| 在线播放亚洲激情| 久久这里只有精品视频首页| 久久久久久久久久国产| 亚洲香蕉av在线一区二区三区| 国内精品模特av私拍在线观看| 欧洲亚洲免费在线| 亚洲第一视频在线观看| 国产精品久久久久久久久免费看| 中文字幕日韩视频| 亚洲美女精品久久| 亚洲精品短视频| 欧美日韩国产影院| 久久久天堂国产精品女人| 国产精品福利久久久| 日韩国产精品亚洲а∨天堂免| 国产在线a不卡| 最近2019中文字幕大全第二页| 久久青草福利网站| 久久综合九色九九| 亚洲美女免费精品视频在线观看| 热久久这里只有| 热99精品只有里视频精品| 97婷婷大伊香蕉精品视频| 成人久久18免费网站图片| 欧美一级片一区| 97在线精品国自产拍中文| 91精品久久久久久久久久入口| 久久成年人视频| 91免费观看网站| 亚洲欧美日韩高清| 欧美成人手机在线| 久久久亚洲影院| 日韩欧美中文免费| 国产精品久久久久久久av电影| 91视频国产一区| 日本久久久久久| 久久久精品视频在线观看| 久久99国产精品自在自在app| 国产精品美女无圣光视频| 68精品国产免费久久久久久婷婷| 黑人巨大精品欧美一区二区一视频| 亚洲在线免费观看| 美女精品视频一区| 欧美精品videos另类日本| 7m精品福利视频导航| 九九久久久久久久久激情| 2020欧美日韩在线视频| 国产精品第一第二| 亚洲最大福利网| 欧美中文字幕第一页| 91免费精品国偷自产在线| 日韩美女激情视频| 欧美野外猛男的大粗鳮| 欧美xxxx18性欧美| 欧美国产亚洲精品久久久8v| 国外成人免费在线播放| 欧美精品一区二区免费| 97视频在线观看免费高清完整版在线观看| 欧美国产视频日韩| 亚洲毛片一区二区| 欧美一性一乱一交一视频| 亚洲第一视频网| 一区二区三区高清国产| 久久久亚洲影院你懂的| 精品香蕉在线观看视频一| 国产成人精品久久二区二区| 成人欧美一区二区三区黑人孕妇| 美日韩精品免费观看视频| 欧美尤物巨大精品爽| 亚洲欧美在线播放| 57pao国产精品一区| 日韩视频免费中文字幕| 色偷偷91综合久久噜噜| 亚洲欧美国产一本综合首页| 久久久亚洲天堂| 5566成人精品视频免费| 欧美一区二区大胆人体摄影专业网站| 亚洲精品免费网站| 色偷偷av亚洲男人的天堂| 亚洲天堂色网站| 日韩暖暖在线视频| 欧美大人香蕉在线| 91伊人影院在线播放| 欧美日韩国产色视频| 成人黄色午夜影院| 亚洲天天在线日亚洲洲精| 日韩免费观看av| 4444欧美成人kkkk| 91av网站在线播放| 成人午夜在线视频一区| 国产精品日韩欧美综合| 亚洲一区二区中文字幕| 17婷婷久久www| 国产精品入口免费视频一| 日韩成人在线电影网| 亚洲精品一区在线观看香蕉| 亚洲精选在线观看| 欧美日韩激情视频| 欧美亚洲在线观看| 久久99青青精品免费观看| 国产日韩欧美91| 亚洲精品理论电影| 5566成人精品视频免费| 国产裸体写真av一区二区| 日本国产高清不卡| 欧美日韩亚洲视频一区| 韩国19禁主播vip福利视频| 日韩在线中文字幕| 波霸ol色综合久久| 亚洲精品丝袜日韩| 91在线高清视频| 97视频免费观看| 日本精品免费一区二区三区| 久久中国妇女中文字幕| 色偷偷噜噜噜亚洲男人的天堂| 久久久久国色av免费观看性色| 欧美成人激情视频免费观看| 国产精品日本精品| 中文字幕不卡在线视频极品| 国产精品中文字幕在线观看| 国产亚洲激情在线| 亚洲精品av在线播放| 久久久久亚洲精品国产| 欧美日韩国产在线播放| 国产精品男女猛烈高潮激情| 亚洲精品一区二区三区不| 欧美一区二区三区……| 亚洲国产精品va在线观看黑人| 中文字幕在线日韩| 久久精品一本久久99精品| 精品成人乱色一区二区| 日韩美女视频中文字幕| www.亚洲天堂| 播播国产欧美激情| 亚洲综合日韩在线| 成人日韩在线电影| 亚洲欧美在线磁力| 亚洲人午夜精品| 精品久久久久久久久久国产| 国产精品美女999| 欧美国产第一页| 亚洲伊人成综合成人网| 色偷偷91综合久久噜噜| 国产精品久久久久久av福利软件| 欧美激情一级欧美精品| 国产美女扒开尿口久久久| 欧美制服第一页| 78m国产成人精品视频| 国产91网红主播在线观看| 精品国产91久久久久久| 日韩精品极品毛片系列视频| 亚洲乱码一区av黑人高潮| 日韩精品免费电影| 成人日韩在线电影| 日韩有码在线观看| 久久精品电影一区二区| 91系列在线播放| 国产一区二区三区丝袜|