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
列進行比對的方式對於兩者皆相同。無法僅啟用一個表格的監控,而不啟用另一個表格的監控。但是,每個表格都是分別進行檢測的。