setup_objects
表格控制 Performance Schema 是否監控特定的表格和儲存的程式物件。初始的 setup_objects
內容如下所示
mysql> SELECT * FROM performance_schema.setup_objects;
+-------------+--------------------+-------------+---------+-------+
| OBJECT_TYPE | OBJECT_SCHEMA | OBJECT_NAME | ENABLED | TIMED |
+-------------+--------------------+-------------+---------+-------+
| EVENT | mysql | % | NO | NO |
| EVENT | performance_schema | % | NO | NO |
| EVENT | information_schema | % | NO | NO |
| EVENT | % | % | YES | YES |
| FUNCTION | mysql | % | NO | NO |
| FUNCTION | performance_schema | % | NO | NO |
| FUNCTION | information_schema | % | NO | NO |
| FUNCTION | % | % | YES | YES |
| PROCEDURE | mysql | % | NO | NO |
| PROCEDURE | performance_schema | % | NO | NO |
| PROCEDURE | information_schema | % | NO | NO |
| PROCEDURE | % | % | YES | YES |
| TABLE | mysql | % | NO | NO |
| TABLE | performance_schema | % | NO | NO |
| TABLE | information_schema | % | NO | NO |
| TABLE | % | % | YES | YES |
| TRIGGER | mysql | % | NO | NO |
| TRIGGER | performance_schema | % | NO | NO |
| TRIGGER | information_schema | % | NO | NO |
| TRIGGER | % | % | YES | YES |
+-------------+--------------------+-------------+---------+-------+
修改 setup_objects
表格會立即影響物件監控。
OBJECT_TYPE
欄表示列套用的物件類型。TABLE
篩選會影響表格 I/O 事件(wait/io/table/sql/handler
儀器)和表格鎖定事件(wait/lock/table/sql/handler
儀器)。
OBJECT_SCHEMA
和 OBJECT_NAME
欄應包含常值綱要或物件名稱,或 '%'
來比對任何名稱。
ENABLED
欄表示是否監控相符的物件,而 TIMED
表示是否收集計時資訊。如 第 29.4.1 節 「Performance Schema 事件計時」中所述,設定 TIMED
欄會影響 Performance Schema 表格內容。
預設物件配置的效果是檢測除了 mysql
、INFORMATION_SCHEMA
和 performance_schema
資料庫中的所有物件。(無論 setup_objects
的內容為何,INFORMATION_SCHEMA
資料庫中的表格都不會被檢測;information_schema.%
的列只是讓此預設值更加明確。)
當 Performance Schema 檢查 setup_objects
表格中是否有符合的項目時,它會先嘗試尋找更精確的符合項目。對於符合給定 OBJECT_TYPE
的資料列,Performance Schema 會按照以下順序檢查資料列:
具有
OBJECT_SCHEMA='
和literal
'OBJECT_NAME='
的資料列。literal
'具有
OBJECT_SCHEMA='
和literal
'OBJECT_NAME='%'
的資料列。具有
OBJECT_SCHEMA='%'
和OBJECT_NAME='%'
的資料列。
例如,對於表格 db1.t1
,Performance Schema 會在 TABLE
資料列中尋找與 'db1'
和 't1'
相符的項目,然後尋找與 'db1'
和 '%'
相符的項目,最後尋找與 '%'
和 '%'
相符的項目。符合的順序很重要,因為不同的符合 setup_objects
資料列可能具有不同的 ENABLED
和 TIMED
值。
對於與表格相關的事件,Performance Schema 會將 setup_objects
的內容與 setup_instruments
的內容結合,以判斷是否啟用儀器以及是否為已啟用的儀器計時。
對於符合
setup_objects
中資料列的表格,只有在setup_instruments
和setup_objects
中的ENABLED
都是YES
時,表格儀器才會產生事件。這兩個表格中的
TIMED
值會被結合,因此只有當兩個值都是YES
時,才會收集計時資訊。
對於儲存的程式物件,Performance Schema 會直接從 setup_objects
資料列取得 ENABLED
和 TIMED
資料行。不會與 setup_instruments
中的值結合。
假設 setup_objects
包含適用於 db1
、db2
和 db3
的以下 TABLE
資料列:
+-------------+---------------+-------------+---------+-------+
| OBJECT_TYPE | OBJECT_SCHEMA | OBJECT_NAME | ENABLED | TIMED |
+-------------+---------------+-------------+---------+-------+
| TABLE | db1 | t1 | YES | YES |
| TABLE | db1 | t2 | NO | NO |
| TABLE | db2 | % | YES | YES |
| TABLE | db3 | % | NO | NO |
| TABLE | % | % | YES | YES |
+-------------+---------------+-------------+---------+-------+
如果 setup_instruments
中的物件相關儀器具有 ENABLED
值 NO
,則不會監控該物件的事件。如果 ENABLED
值為 YES
,則會根據相關 setup_objects
資料列中的 ENABLED
值進行事件監控。
會監控
db1.t1
事件不會監控
db1.t2
事件會監控
db2.t3
事件不會監控
db3.t4
事件會監控
db4.t5
事件
結合 setup_instruments
和 setup_objects
表格中的 TIMED
資料行,以判斷是否收集事件計時資訊時,會套用類似的邏輯。
如果永久表格和暫時表格具有相同的名稱,則對 setup_objects
資料列的符合方式對於兩者都是相同的。無法為一個表格啟用監控而不為另一個表格啟用監控。但是,每個表格都會單獨進行檢測。