CREATE EVENT MONITOR (鎖定) 陳述式
CREATE EVENT MONITOR (鎖定) 陳述式會建立事件監視器,以記錄使用資料庫時發生的鎖定相關事件。
呼叫
此陳述式可以內嵌在應用程式中,或以互動方式發出。 它是可執行的陳述式,只有在 DYNAMICRULES 執行行為對套件有效時才能動態準備 (SQLSTATE 42509)。
授權
陳述式授權 ID 所保留的專用權必須包括下列其中一個權限:
- DBADM 權限
- SQLADM 權限
語法
說明
- 事件監視器名稱
- 事件監視器的名稱。 這是一個單部分名稱。 它是 SQL ID (一般或定界)。 event-monitor-name 不得識別已存在於型錄中的事件監視器 (SQLSTATE 42710)。
- FOR
- 介紹要記錄的事件類型。
- 鎖定
- 指定此被動事件監視器將記錄當資料庫管理程式遇到下列一或多個狀況時所產生的任何鎖定事件:
- LOCKTIMEOUT: 鎖定已逾時。
- 死鎖: 鎖定涉及死鎖 (受害者及參與程式)。
- LOCKWAIT: 在指定期間內未獲得的鎖定。
- 寫入至
- 指定資料的目標。
- TABLE
- 指出事件監視器資料的目標是一組格式化事件表格。 事件監視器會將資料串流分隔成一或多個邏輯資料群組,並將每一個群組插入個別表格中。 保留具有目標表格之群組的資料,而捨棄沒有目標表格之群組的資料。 群組內包含的每一個監視器元素都會對映至具有相同名稱的表格直欄。 只有具有對應表格直欄的元素才會插入表格中。 會捨棄其他元素。
- formatted-event-table-info
- 定義事件監視器的目標格式化事件表格。 此子句應該指定要記錄的每一個分組。 不過,如果未指定 evm-group 子句,則會記錄事件監視器類型的所有群組。
如需邏輯資料群組的相關資訊,請參閱 邏輯資料群組及事件監視器輸出表格 。
- evm-group
- 識別正在定義目標表格的邏輯資料群組。 此值視事件監視器的類型而定,如下表所示:
事件監視器類型 evm-group 值 鎖定 - LOCK
- 鎖定參與者
- LOCK_PARTICIPANT_ACTIVITIES
- LOCK_ACTIVITY_VALUES
- CONTROL
- 識別正在定義目標表格的邏輯資料群組。 此值視事件監視器的類型而定,如下表所示:
- 未格式化的事件表格 (unformatted event table)
- 指定事件監視器的目標是未格式化的事件表格。 未格式化的事件表格用來儲存所收集的鎖定事件監視器資料。 資料以內部二進位格式儲存在行內 BLOB 直欄中。 每一個事件都可以將多筆記錄插入此表格中,且每筆插入的記錄都可以是不同類型,且相關聯的 BLOB 內容也會改變。 BLOB 直欄中的資料不是可讀取格式,且需要透過使用 db2evmonfmt Java 型工具、EVMON_FORMAT_UE_TO_XML 表格函數或 EVMON_FORMAT_UE_TO_TABLES 程序,將資料轉換為可耗用格式 (例如 XML 文件或關聯式表格)。
- 目標表格選項
- 識別目標表格的選項。 如果未指定 target-table-options 的值,則 CREATE EVENT MONITOR FOR LOCKING 處理程序會如下進行:
- 使用衍生表格名稱 (如
TABLE table-name的說明中所述)。 - 當建立表格時,如果沒有使用 CREATE TABLE 的表格空間名稱,則會使用相同的處理程序來選擇預設表格空間。
- PCTDEACTIVATE 設為 100。
- TABLE table-name
- 指定目標表格的名稱。 目標表格必須是未分割的表格。 如果名稱不完整,則表格綱目預設為 CURRENT SCHEMA 特別暫存器中的值。 如果未提供未格式化事件表格的名稱,則未限定的名稱等於 event-monitor-name,亦即,未格式化事件表格將以事件監視器命名。 如果未提供格式化事件表格的名稱,則不完整的名稱衍生自 evm-group 及 event-monitorname ,如下所示:
substring(evm-group CONCAT '_' CONCAT event-monitor-name,1,128) - IN tablespace-name
- 定義要在其中建立表格的表格空間。 CREATE EVENT MONITOR FOR LOCKING 陳述式未建立表格空間。
如果未提供表格空間名稱,則會使用與在沒有使用 CREATE TABLE 的表格空間名稱的情況下建立表格時相同的處理程序來選擇表格空間。
指定格式化事件表格的表格空間名稱時,表格空間的分頁大小會影響所使用的 INLINE LOB 長度考量指定分頁大小儘可能大的表格空間,以增進事件監視器的 INSERT 效能。
- PCTDEACTIVATE 整數
- 如果正在自動儲存體 (非暫時) 或 DMS 表格空間中建立事件監視器的表格,則 PCTDEACTIVATE 參數會指定在事件監視器自動取消啟動之前表格空間必須有多完整。 指定的值 (代表百分比) 範圍可以從 0 到 100。 預設值為 100 ,其中 100 表示當表格空間完全填滿時,事件監視器會取消啟動。 如果未指定 PCTDEACTIVATE ,則假設預設值為 100。 SMS 表格空間會忽略這個選項。重要事項: 如果目標表格空間已啟用自動調整大小,請將 PCTDEACTIVATE 設為 100。 或者,完全省略此子句,以套用預設值 100。 否則,在自動調整表格空間大小之前,如果表格空間達到 PCTDEACTIVTATE 指定的臨界值,事件監視器可能會非預期地取消啟動。
- 使用衍生表格名稱 (如
- AUTOSTART
- 指定每當啟動事件監視器執行所在的資料庫分割區時,即會自動啟動事件監視器。 這是鎖定事件監視器的預設行為。
- MANUALSTART
- 指定必須使用 SET EVENT MONITOR STATE 陳述式手動啟動事件監視器。 啟動 MANUALSTART 事件監視器之後,只能使用 SET EVENT MONITOR STATE 陳述式或停止實例來取消啟動它。
注意事項
- 當 CREATE EVENT MONITOR FOR LOCKING 陳述式執行時,會建立目標表格 (如果它尚未存在的話)。
- 在 CREATE EVENT MONITOR FOR LOCKING 處理期間,如果發現已定義表格供另一個事件監視器使用,則 CREATE EVENT MONITOR FOR LOCKING 陳述式會失敗,並將錯誤傳回應用程式。 如果表格名稱符合在 SYSCAT.EVENTTABLES 型錄視圖中找到的值,則會定義表格供另一個事件監視器使用。 如果表格存在且未定義供另一個事件監視器使用,則事件監視器會重複使用該表格。
- 捨棄事件監視器將不會捨棄任何表格。 在捨棄事件監視器之後,必須手動捨棄任何相關聯的表格。
- 鎖定事件資料不會自動從未格式化的事件表格或此事件監視器所建立的一般表格中刪改。 使用 EVMON_FORMAT_UE_TO_TABLES 程序時,可以使用從 UE 表格中刪改資料的選項。 對於寫入一般表格的事件監視器,必須手動刪改事件資料。
- FLUSH EVENT MONITOR 陳述式不適用於此事件監視器,且在針對它發出時不會有任何作用。
- 對於未格式化的事件表格,事件資料會插入表格中的行內 BLOB 資料直欄。 通常, BLOB 資料會儲存在個別 LOB 表格空間中,因此可能會遇到額外的效能額外負擔。 列入基本表格的資料頁面時, BLOB 資料不會經歷此額外負擔。 如果 BLOB 資料的大小小於表格空間分頁大小減去記錄字首,則資料庫管理程式會自動列入未格式化事件表格記錄的 BLOB 資料部分。 因此,為了達到高效率及應用程式傳輸量,建議您盡可能在最大的表格空間中建立事件監視器,包括 32KB 表格空間及相關聯的緩衝池。
- 範例
- 鎖定事件監視器目前具有下列兩種記錄類型:
- 應用程式資訊記錄
- 應用程式活動記錄
應用程式資訊記錄 = 大小上限 3.5KB
應用程式活動記錄 = 3KB + SQL 陳述式文字大小 (其中 SQL 陳述式文字大小上限為 2MB)
「應用程式資訊記錄」非常小,只要使用 4KB 頁面大小,就應該一律列入。 將根據下列公式列入「應用程式活動記錄」:Application Activity Record < inline length (Pagesize - overhead non-LOB columns (0.5KB)) 3KB + SQL statement text < inline length (Pagesize - overhead non-LOB columns (0.5KB)) SQL statement text < Pagesize - nonLOB overhead (1K) - 3KB SQL statement text < 16KB - 1KB - 3KB < 12KB因此,當使用 16KB 分頁大小時,只有在所擷取的 SQL 陳述式大小小於 12KB 時,才會列入鎖定事件監視器記錄。
- 每個資料庫僅建立一個鎖定事件監視器。 建立多個鎖定事件監視器會使用其他處理器週期及儲存體,而不提供任何其他資料。重要事項: 為了與舊版產品相容,所有資料庫都是在啟用 DB2DETAILDEADLOCK 事件監視器的情況下建立。 鎖定事件監視器 在 Db2® 9.7 版中引進 是收集鎖定相關資料的偏好機制; DB2DETAILEDDEALOCK 事件監視器已淘汰,並可能在未來版本中移除。 當您建立鎖定事件監視器時,請停用並捨棄 DB2DETAILEDDEADLOCK 事件監視器,以防止收集重複且不必要的資訊。若要移除 DB2DETAILDEADLOCK 事件監視器,請發出下列 SQL 陳述式:
SET EVENT MONITOR DB2DETAILDEADLOCK state 0 DROP EVENT MONITOR DB2DETAILDEADLOCK - 在分割的資料庫環境中,資料只會寫入其表格空間所在的資料庫分割區上的目標表格。 如果目標表格的表格空間不存在於某個資料庫分割區上,則會忽略該目標表格的資料。 此行為容許使用者透過建立僅存在於特定資料庫分割區上的表格空間,來選擇要進行監視的資料庫分割區子集。
- 在分割的資料庫環境中,如果部分目標表格不在資料庫分割區上,但其他目標表格則在該相同的資料庫分割區上,則只會記錄位於該資料庫分割區上的目標未格式化事件表格的資料。
範例
- 範例 1: 此範例會建立鎖定事件監視器 LOCKEVMON ,以收集建立資料庫上發生的鎖定事件。
CREATE EVENT MONITOR LOCKEVMON FOR LOCKING WRITE TO TABLE此事件監視器會將其輸出寫入下列表格:- LOCK_LOCKEVMON
- LOCK_PARTICIPANTS_LOCKEVMON
- LOCK_PARTICIPANT_ACTIVITIES_LOCKEVMON
- LOCK_ACTIVITY_VALUES_LOCKEVMON
- CONTROL_LOCKEVMON
- 範例 2: 此範例會建立鎖定事件監視器 LOCKEVMON ,以收集建立的資料庫上發生的鎖定事件,並將它儲存在未格式化的事件表格 IMRAN.LOCKEVENTS 中。
CREATE EVENT MONITOR LOCKEVMON FOR LOCKING WRITE TO UNFORMATTED EVENT TABLE (TABLE IMRAN.LOCKEVENTS) - 範例 3: 此範例會建立鎖定事件監視器 LOCKEVMON ,以收集建立之資料庫上發生的鎖定事件,並將它儲存在表格空間 APPSPACE 中未格式化的事件表格 IMRAN.LOCKEVENTS 中。 當表格空間變成 85% 已滿時,事件監視器將取消啟動。
CREATE EVENT MONITOR LOCKEVMON FOR LOCKING WRITE TO UNFORMATTED EVENT TABLE (TABLE IMRAN.LOCKEVENTS IN APPSPACE PCTDEACTIVATE 85)
