您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Performance Schema怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Performance Schema簡介
Oracle DBA都應該知道 Oracle中提供了大量的視圖供DBA們排查問題使用,并且有等待事件幫助大家快速定位問題屬于哪一類。MySQL 中也有Performance Schema幫助大家去分析排查問題,并且在5.7中增加了Sys Schema,將Performance Schema和information_schema的信息格式化后,供大家更方便的分析問題。
這里先介紹先Performance Schema的使用方式,便于后面大家更好的去使用Sys Schema。
Performance Schema開啟方式
設置instruments及consumers開啟
開啟performance_schema=on之后我們還需要進行設置instruments及consumers
instruments通俗講就是監控項可以通過setup_instruments表設置需要開啟對哪些項監控進行統計
consumers就是控制是否將監控到的結果進行記錄
UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES';
UPDATE setup_consumers SET ENABLED = 'YES';
如果不開啟instruments和consumers則相應的事件檢測則不能使用,也就不能收集相應的等待事件和性能的統計。
當然我們也可以單獨設置某一個instruments的開啟和關閉
UPDATE setup_instruments SET ENABLED = 'NO'
WHERE NAME = 'wait/io/file/sql/binlog';
為了防止重啟后恢復默認配置可以添加到配置文件中設置
performance-schema-instrument='instrument_name=value'
performance-schema-consumer-consumer_name=valueinstrument_name和consumer_name
可以通過查詢setup_instruments和setup_consumers;查看
setup_consumers中的層級關系
mysql> select * from setup_consumers;
+--------------------------------+---------+
| NAME | ENABLED |
+--------------------------------+---------+
| events_stages_current | YES |
| events_stages_history | YES |
| events_stages_history_long | YES |
| events_statements_current | YES |
| events_statements_history | YES |
| events_statements_history_long | YES |
| events_waits_current | YES |
| events_waits_history | YES |
| events_waits_history_long | YES |
| global_instrumentation | YES |
| thread_instrumentation | YES |
| statements_digest | YES |
+--------------------------------+---------+12 rows in set (0.00 sec)
setup_consumers中的事件表有層級之分 ,我們可以通過上面看到有 global、thread、current、history、history_long,他們之間的層級如下:
global_instrumentation
thread_instrumentation
events_waits_current
events_waits_history
events_waits_history_long
events_stages_current
events_stages_history
events_stages_history_long
events_statements_current
events_statements_history
events_statements_history_longstatements_digest
也就是說,如果設置了global的才會去檢查thread的有沒有被設置,如果thread的設置了才會去檢查current的有沒有被設置,如果global的沒有被設置則thread和current都不去檢查,相應的信息也不會記錄到對應的表中。
如果global_instrumentation沒有被設置則對應的表中都不會記錄任何信息。
這里的history、history_long可以通過參數設置大小,因為是內存表,如果太大會占用很多內存。
setup_instruments中的類型
mysql> select name,count(*) from setup_instruments group by left(name,5);
+---------------------------------+----------+
| name | count(*) |
+---------------------------------+----------+
| idle | 1 |
| stage/sql/After create | 108 |
| statement/sql/select | 168 |
| wait/synch/mutex/sql/PAGE::lock | 279 |
+---------------------------------+----------+4 rows in set (0.00 sec)
我們可以看到setup_instruments中的類型有四種(5.6版本)。
具體的解釋大家可以在官網中查看:
https://dev.mysql.com/doc/refman/5.6/en/performance-schema-instrument-naming.html
簡單使用介紹
簡單介紹幾個語句用于排查SQL語句的效率
查看哪些索引沒有被使用過
SELECT
OBJECT_SCHEMA,
OBJECT_NAME,
INDEX_NAME
FROM table_io_waits_summary_by_index_usage
WHERE INDEX_NAME IS NOT NULL
AND COUNT_STAR = 0
AND OBJECT_SCHEMA <> 'mysql'ORDER BY OBJECT_SCHEMA,OBJECT_NAME;
<ul class="list-paddingleft-2" font-size:16px;white-space:normal;background-color:#FFFFFF;box-sizing:border-box !important;">
查看SQL語句在哪個階段消耗最大
SELECT eshl.event_name, sql_text, eshl.timer_wait/1000000000000 w_s
FROM performance_schema.events_stages_history_long eshl
JOIN performance_schema.events_statements_history_long esthl
ON (eshl.nesting_event_id = esthl.event_id)WHERE eshl.timer_wait > 1*10000000000\G
關于“Performance Schema怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。