mysql 平均响应时间_Percona-Server/MySQL响应时间统计
在Percona的5.1.53和5.5.8版本,開始將RT的統計內置到MySQL Server端。Thanks, Percona.
Percona在提供了tcprstat工具統計RT時間之后,很快就在Percona Server中集成了響應時間統計的功能。這里介紹一下該功能,各位看官如果在猶豫選擇Percona Server還是MySQL Community Server,這里給Percona Server加一個籌碼。
"響應時間"(Response time,后面簡稱RT)在數據庫應用中,特別是OLTP的場景,可以說非常重要,不過,MySQL官方版本中一直沒有加上這個統計功能。最早,社區開始嘗試tcmdump+perl腳本的方式查看RT,后來告警一點用tcpdump+mk-query-digest,再后來Ignacio Nin和Baron Schwartz完成了tcprstat。
在Percona的5.1.53和5.5.8版本,開始將RT的統計內置到MySQL Server端。
1. 配置該功能
這個是功能默認是關閉的,可以通過設置參數query_response_time_stats=1打開這個功能,這是一個動態參數,所以在服務器上可以很方便的打開或者關閉這個功能。可以通過命令SHOW QUERY_RESPONSE_TIME查看響應時間統計。
默認關閉狀態:
SHOW QUERY_RESPONSE_TIME;
+----------------+---+----------------+
| | | |
+----------------+---+----------------+
| 0.000001 | 0 | 0.000000 |
| 0.000010 | 0 | 0.000000 |
| 0.000100 | 0 | 0.000000 |
| 0.001000 | 0 | 0.000000 |
......
| 1000000.00000 | 0 | 0.000000 |
| TOO LONG | 0 | TOO LONG |
+----------------+---+----------------+
打開參數后:
set global query_response_time_stats=1;
Query OK, 0 rows affected (0.00 sec)
08:23:13>SHOW QUERY_RESPONSE_TIME;
+----------------+-------+----------------+
| | | |
+----------------+-------+----------------+
| 0.000001 | 7982 | 0.000000 |
| 0.000010 | 13927 | 0.014511 |
| 0.000100 | 43811 | 1.553811 |
| 0.001000 | 29 | 0.007936 |
| 0.010000 | 1 | 0.001711 |
| 0.100000 | 0 | 0.000000 |
這里可以看到,響應時間小于0.000001秒的SQL有7982個,0.000001 < RT < 0.000010有13927個, 0.000010 < RT < 0.000100有43811 ...... 。這樣整個系統的響應時間就清晰了。
2. INFORMATION_SCHEMA.QUERY_RESPONSE_TIME
除了用命令SHOW QUERY_RESPONSE_TIME,還可以通過INFORMATION_SCHEMA里面的表QUERY_RESPONSE_TIME來查看MySQL的響應時間。
08:25:16>SELECT * from INFORMATION_SCHEMA.QUERY_RESPONSE_TIME;
+----------------+--------+----------------+
| time | count | total |
+----------------+--------+----------------+
| 0.000001 | 33824 | 0.000000 |
| 0.000010 | 59222 | 0.060457 |
| 0.000100 | 186003 | 6.659908 |
| 0.001000 | 117 | 0.025163 |
| 0.010000 | 8 | 0.014534 |
使用INFORMATION_SCHEMA.QUERY_RESPONSE_TIME,就可以稍微定制一下輸出結果了:
SELECT time, CONCAT(ROUND(100*count/query_count,2),"%") as percent,count
FROM(
SELECT
c.count,
c.time,
(
SELECT SUM(a.count)
FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as a
WHERE a.count != 0
) as query_count
FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as c
WHERE c.count > 0
) d;
+----------------+---------+--------+
| time | percent | count |
+----------------+---------+--------+
| 0.000001 | 12.64% | 81557 |
| 0.000010 | 20.69% | 133440 |
| 0.000100 | 66.62% | 429705 |
| 0.001000 | 0.05% | 339 |
| 0.010000 | 0.00% | 10 |
| 1000.000000 | 0.00% | 1 |
+----------------+---------+--------+
3. 高端一點的功能:定制化時間區間
默認的時間區間是:
(0; 10 ^ -6], (10 ^ -6; 10 ^ -5], (10 ^ -5; 10 ^ -4], ..., (10 ^ -1; 10 ^1], (10^1; 10^2]...(10^
你可以通過修改參數query_response_time_range_base來縮小時間區間,默認該參數是10,時間區間如上。
例如我們修個set global query_response_time_range_base=2; 則區間如下:
(0; 2 ^ -19], (2 ^ -19; 2 ^ -18], (2 ^ -18; 2 ^ -17], ..., (2 ^ -1; 2 ^1], (2 ^ 1; 2 ^ 2]...(2 ^
第一個區間總是最接近0.000001區間開始(2^19次方最接近);最后一個區間是到最接近且小于10000000處結束。
具體的:
set global query_response_time_range_base=2;
flush QUERY_RESPONSE_TIME;
SHOW QUERY_RESPONSE_TIME;
| 0.000001 | 711 | 0.000000 |
| 0.000003 | 1456 | 0.001456 |
......
| 0.125000 | 0 | 0.000000 |
| 0.250000 | 0 | 0.000000 |
| 0.500000 | 0 | 0.000000 |
| 1.000000 | 0 | 0.000000 |
| 2.000000 | 0 | 0.000000 |
| 4.000000 | 0 | 0.000000 |
| 8.000000 | 0 | 0.000000 |
| 16.000000 | 0 | 0.000000 |
......
| 8388608.00000 | 0 | 0.000000 |
| TOO LONG | 0 | TOO LONG |
一些注意事項
在備庫上,只有打開了參數log_slow_slave_statements(這個參數也是Percona Server上特有的)時,slave sql線程的SQL才會被統計。
啟動變量have_response_time_distribution,不能配置,該參數只表示該Server是否具有上述的RT統計功能。
設置了query_response_time_range_base,必須flush QUERY_RESPONSE_TIME后才生效。這里flush做兩件事情,使得QUERY_RESPONSE_TIME生效,另外清空之前的統計結果。
累了,聽首歌,扭扭脖子吧:)
參考文獻:
【附錄】
既然上面讀取INFORMATION_SCHEMA的SQL已經有些復雜了,那就不怕再復雜一些:
SELECT
case TRIM(time)
when '0.000001' then '< 1us'
when '0.000010' then '< 10us'
when '0.000100' then '<100us'
when '0.001000' then '< 1ms'
when '0.010000' then '< 10ms'
when '0.100000' then '<100ms'
when '1.000000' then '< 1s'
when '10.000000' then '< 10s'
when '100.000000' then '<100s'
else '>100s'
END as `RT area`,
CONCAT(ROUND(100*count/query_count,2),"%") as percent,
count
FROM(
SELECT
c.count,
c.time,
(
SELECT SUM(a.count)
FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as a
WHERE a.count != 0
) as query_count
FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as c
WHERE c.count > 0
) d;
+---------+---------+--------+
| RT area | percent | count |
+---------+---------+--------+
| < 10us | 41.92% | 404409 |
| <100us | 21.34% | 205881 |
| < 1ms | 35.20% | 339574 |
| < 10ms | 1.30% | 12586 |
| <100ms | 0.18% | 1736 |
| < 1s | 0.02% | 160 |
| < 10s | 0.04% | 340 |
+---------+---------+--------+
總結
以上是生活随笔為你收集整理的mysql 平均响应时间_Percona-Server/MySQL响应时间统计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java纯粹面向对象_Java的面向对象
- 下一篇: Java打乱牌的算法_Leetcode