這篇文章將為大家詳細講解有關(guān)Performance Schema怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)公司擁有十年成都網(wǎng)站建設(shè)工作經(jīng)驗,為各大企業(yè)提供成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)服務(wù),對于網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、重慶App定制開發(fā)、wap網(wǎng)站建設(shè)(手機版網(wǎng)站建設(shè))、程序開發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、域名注冊等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷經(jīng)驗,集策劃、開發(fā)、設(shè)計、營銷、管理等網(wǎng)站化運作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項目的能力。
Performance Schema簡介
Oracle DBA都應(yīng)該知道 Oracle中提供了大量的視圖供DBA們排查問題使用,并且有等待事件幫助大家快速定位問題屬于哪一類。MySQL 中也有Performance Schema幫助大家去分析排查問題,并且在5.7中增加了Sys Schema,將Performance Schema和information_schema的信息格式化后,供大家更方便的分析問題。
這里先介紹先Performance Schema的使用方式,便于后面大家更好的去使用Sys Schema。
Performance Schema開啟方式
設(shè)置instruments及consumers開啟
開啟performance_schema=on之后我們還需要進行設(shè)置instruments及consumers
instruments通俗講就是監(jiān)控項可以通過setup_instruments表設(shè)置需要開啟對哪些項監(jiān)控進行統(tǒng)計
consumers就是控制是否將監(jiān)控到的結(jié)果進行記錄
UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES';
UPDATE setup_consumers SET ENABLED = 'YES';
如果不開啟instruments和consumers則相應(yīng)的事件檢測則不能使用,也就不能收集相應(yīng)的等待事件和性能的統(tǒng)計。
當然我們也可以單獨設(shè)置某一個instruments的開啟和關(guān)閉
UPDATE setup_instruments SET ENABLED = 'NO'
WHERE NAME = 'wait/io/file/sql/binlog';
為了防止重啟后恢復(fù)默認配置可以添加到配置文件中設(shè)置
performance-schema-instrument='instrument_name=value'
performance-schema-consumer-consumer_name=valueinstrument_name和consumer_name
可以通過查詢setup_instruments和setup_consumers;查看
setup_consumers中的層級關(guān)系
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
也就是說,如果設(shè)置了global的才會去檢查thread的有沒有被設(shè)置,如果thread的設(shè)置了才會去檢查current的有沒有被設(shè)置,如果global的沒有被設(shè)置則thread和current都不去檢查,相應(yīng)的信息也不會記錄到對應(yīng)的表中。
如果global_instrumentation沒有被設(shè)置則對應(yīng)的表中都不會記錄任何信息。
這里的history、history_long可以通過參數(shù)設(shè)置大小,因為是內(nèi)存表,如果太大會占用很多內(nèi)存。
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版本)。
具體的解釋大家可以在官網(wǎng)中查看:
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;
查看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
關(guān)于“Performance Schema怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。