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 則指出是否要收集計時資訊。設定 TIMED 資料行會影響 Performance Schema 資料表內容,如第 29.4.1 節「Performance Schema 事件計時」所述。
預設物件組態的效果是檢測除了 mysql、INFORMATION_SCHEMA 和 performance_schema 資料庫中的所有物件。(無論 setup_objects 的內容為何,INFORMATION_SCHEMA 資料庫中的資料表都不會被檢測;information_schema.% 的資料列只是使此預設值明確。)
當 Performance Schema 檢查 setup_objects 中的相符項目時,它會先嘗試尋找更具體的相符項目。對於符合給定 OBJECT_TYPE 的資料列,Performance Schema 會依此順序檢查資料列
具有
OBJECT_SCHEMA='和常值'OBJECT_NAME='的資料列。常值'具有
OBJECT_SCHEMA='和常值'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時,才會收集計時資訊。
對於儲存的程式物件,效能結構描述會直接從 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 列進行比對的方式對於兩者皆相同。無法僅啟用一個表格的監控,而不啟用另一個表格的監控。但是,每個表格都是分別進行檢測的。