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開啟方式
-
開啟Performance Schema庫
在配置檔案中新增performance_schema=on
-
設定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=value
instrument_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_long
statements_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, THREAD_ID TID, SUBSTR(SQL_TEXT, 1, 50) SQL_TEXT, ROWS_SENT RS, ROWS_EXAMINED RE,CREATED_TMP_TABLES,NO_INDEX_USED,NO_GOOD_INDEX_USED FROM performance_schema.events_statements_history WHERE (NO_INDEX_USED=1 OR NO_GOOD_INDEX_USED=1) and sql_text NOT LIKE '%performance_schema%'\G
-
檢視哪些索引沒有被使用過
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
總 結
此次簡單介紹了Performance Schema的使用,後面會逐步介紹使用Performance Schema的一些實戰功能。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2141605/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- performance_schema詳解一ORM
- MySQL Performance SchemaMySqlORM
- 初相識|performance_schema全方位介紹ORM
- 配置詳解 | performance_schema全方位介紹ORM
- 事件記錄 | performance_schema全方位介紹事件ORM
- 事件統計 | performance_schema全方位介紹事件ORM
- MySQL Performance Schema詳解MySqlORM
- 應用示例薈萃 | performance_schema全方位介紹ORM
- Apache Avro & Avro Schema簡介ApacheVR
- MYSQL中information_schema簡介MySqlORM
- MySQL5.6 PERFORMANCE_SCHEMA 說明MySqlORM
- Json Schema簡介和Json Schema的.net實現庫 LateApexEarlySpeed.Json.SchemaJSON
- 格式校驗利器:JSON Schema 簡介JSON
- MySQL 進階:INFORMATION_SCHEMA 簡介MySqlORM
- Json-schema簡介和應用JSON
- .NET Core 效能分析: xUnit.Performance 簡介ORM
- MySQL調優效能監控之performance schemaMySqlORM
- 複製狀態與變數記錄表 | performance_schema全方位介紹變數ORM
- 資料庫物件事件與屬性統計 | performance_schema全方位介紹資料庫物件事件ORM
- MySQL 5.7 performance_schema庫和sys庫常用SQLMySqlORM
- MySQL預設資料庫之performance_schema庫MySql資料庫ORM
- 首先將performance_schema這個資料庫下的需要ORM資料庫
- MySQL:簡單記錄performance_schema.threads中的3種執行緒ID各自的含義MySqlORMthread執行緒
- Jira使用簡介 HP ALM使用簡介
- Instruments使用指南(一)--- 簡介
- web workers簡介(一)基礎使用Web
- 如何將 performance_schema 中的 TIMER 欄位轉換為日期時間ORM
- pipenv 使用簡介
- Git 使用簡介Git
- Disruptor 使用簡介
- dremio使用簡介REM
- Git使用總結(一):簡介與基本操作Git
- tkinter簡介(一)
- Systemd簡介與使用
- SVG Sprite 使用簡介SVG
- Jumpserver簡介,部署使用Server
- openvas簡介及使用
- JQuery簡介與使用jQuery
- BPMN 2.0使用簡介