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 資料列的符合方式對於兩者都是相同的。無法為一個表格啟用監控而不為另一個表格啟用監控。但是,每個表格都會單獨進行檢測。