亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

DB2 V9.5工作負載管理之閾值(THRESHOLD)

瀏覽:100日期:2023-11-09 11:25:36
在 DB2 V9.5 中,新引入的工作負載管理功能( WLM )可以幫助您標識、管理和監視數據服務器的工作負載。本文將重點介紹 DB2 V9.5 關于工作負載管理(WLM)的閾值(THRESHOLD)設置相關的概念,并結合實際的例子幫助大家理解和提高。

閾值( THRESHOLD )

可以通過創建閾值的方式對服務類所使用的資源進行控制,閾值可以根據不同的類型進行創建。閾值提供一種方法,用來控制每種工作能夠使用的資源數量。在工作負載管理( WLM )解決方案中,你可以使用閾值來防止系統過載或者資源被濫用現象的發生。通過閾值,你可以直接對特定的資源設置限定,當超過限定時,就會觸發特定的動作。

支持的動作有:

STOP EXECUTION:停止違反閾值的相關動作

CONTINUE:繼續執行

收集違反閾值的相關動作信息

不管違反閾值的特定動作被停止還是繼續執行,你都可以收集該動作的詳細信息。當特定動作完成后,其相關信息會被活動的 ACTIVITIES 事件監控器收集到。

每個閾值都有一個應用范圍。閾值的作用域定義其可以操作的數據庫對象。只有在該閾值范圍內發生的動作才會受其影響。閾值的作用域可以是:

數據庫(Database)

服務父類(Service superclass )

服務子類(Service subclass )

工作動作(Work action )

工作負載(Workload )

閾值即可以是 predictive ,也可以是 reactive,也就是說,我們可以定義閾值是前觸發還是后觸發

前觸發閾值是在相應的工作開始之前進行檢查。數據服務器通過 SQL 編譯器得到使用資源的估計值,檢查前觸發閾值是否會被觸發。

后觸發閾值是在相應的工作開始之后進行檢查的。通過對控制資源的大體運行時間使用估計,來評估是否達到了后觸發閾值的邊界。運行時間使用估計不是連續獲得的,而是在每個(特定工作生命周期中)預先選擇的檢查點進行獲取。

需要注意的是,閾值不是適合所有的語句,比如,閾值不能應用在 COMMIT, ROLLBACK, AVEPOINT 以及 ROLLBACK to SAVEPOINT 等。

你可以使用 CREATE THRESHOLD 創建閾值,使用 ALTER THRESHOLD 修改閾值,還可以使用 DROP THRESHOLD 刪除閾值。如果想查詢你定義的閾值,可以查詢 SYSCAT.THRESHOLDS 系統視圖。

下面我們繼續在窗口 1 中來創建一個閾值,來限制包含大的查詢的服務類,閾值的范圍是整個數據庫,閾值的邊界是當 ESTIMATEDSQLCOST 大于 100000,ESTIMATEDSQLCOST 能夠返回優化器分配給 DML 語句相關活動成本的估計值,具體如清單 17 所示:

清單 17 . 在窗口 1 中創建一個閾值,限制包含大查詢的服務類

C:> db2 connect to db2test1 user administrator using passw0rd

數據庫連接信息

數據庫服務器 = DB2 / NT 9.5.0

SQL 授權標識 = ADMINIST . . .

本地數據庫別名 = DB2TEST1

C:> db2 -tvf createthreshold.sql

ALTER THRESHOLD LargeQuery DISABLE

DB21034E 該命令被當作 SQL 語句來處理,因為它是無效的“命令行處理器”命令。在

SQL 處理期間,它返回:

SQL0204N ' LARGEQUERY ' 是一個未定義的名稱。 SQLSTATE = 42704

DROP THRESHOLD LargeQuery

DB21034E 該命令被當作 SQL 語句來處理,因為它是無效的“命令行處理器”命令。在

SQL 處理期間,它返回:

SQL0204N ' LARGEQUERY ' 是一個未定義的名稱。 SQLSTATE = 42704

CREATE THRESHOLD LargeQuery FOR service class SUPER_CLASS ACTIVITIES

ENFORCEMENT DATABASE WHEN ESTIMATEDSQLCOST > 100000 STOP EXECUTION

DB20000I SQL命令成功完成。

繼續在窗口 2 中執行一個大的查詢(此時我們的用戶是 RHETTE,如果執行查詢,該查詢會屬于 SUPER_CLASS 服務類),這時我們會收到“ SQL4712N 已超過閾值 ‘ LARGEQUERY ’。原因碼 = ‘7’。 SQLSTATE = 5U026”的錯誤信息,這是因為我們執行的查詢超過了我們預先定義的邊界,具體如清單 18 所示:

清單18 . 在窗口 2 中執行一個大型查詢

C:> db2 connect to db2test1 user rhette using passw0rd

數據庫連接信息

數據庫服務器 = DB2 / NT 9.5.0

SQL 授權標識 = RHETTE

本地數據庫別名 = DB2TEST1

C:> db2 select count ( * ) from project , project , project , project , project ,

project

SQL4712N 已超過閾值 ' LARGEQUERY '。原因碼 = ' 7 '。 SQLSTATE = 5U026

接下來我們創建一個新的閾值,用來限制同一條 SQL,并發執行數大于 1,我們繼續在窗口 1 中發出 CREATE THRESHOLD 語句,創建新的閾值 MYCUNCURRENT,閾值范圍是整個數據庫,閾值的邊界 CONCURRENTDBCOORDACTIVITIES 大于 1。CONCURRENTDBCOORDACTIVITIES 用來表示某個特定動作的并發執行數。具體如清單 19 所示:

清單 19 . 在窗口 1 中創建一個閾值,限制并發執行數

C:>db2 -tvf crtThresCurrency.sql

ALTER THRESHOLD MYCUNCURRENT DISABLE

DB21034E 該命令被當作 SQL 語句來處理,因為它是無效的“命令行處理器”命令。在

SQL 處理期間,它返回:

SQL0204N ' MYCUNCURRENT ' 是一個未定義的名稱。 SQLSTATE = 42704

DROP THRESHOLD MYCUNCURRENT

DB21034E 該命令被當作 SQL 語句來處理,因為它是無效的“命令行處理器”命令。在

SQL 處理期間,它返回:

SQL0204N ' MYCUNCURRENT ' 是一個未定義的名稱。 SQLSTATE = 42704

CREATE THRESHOLD MYCUNCURRENT FOR SERVICE CLASS subclass_db2admin

UNDER super_class ACTIVITIES ENFORCEMENT DATABASE WHEN CONCURRENTDBCOORDACTIVITIES > 1

STOP EXECUTION

DB20000I SQL命令成功完成。

命令成功完成。我們繼續在窗口 2 中用 DB2ADMIN 用戶連上示例數據庫 DB2TEST1,具體如清單 20 所示:

清單20 . 在窗口 2 中執行一個簡單查詢

C:> db2 connect reset

DB20000I SQL命令成功完成。

C:> db2 connect to db2test1 user db2admin using passw0rd

數據庫連接信息

數據庫服務器 = DB2 / NT 9.5.0

SQL 授權標識 = DB2ADMIN

本地數據庫別名 = DB2TEST1

命令成功完成。我們繼續在窗口 3 中用 DB2ADMIN 用戶連上示例數據庫 DB2TEST1,基本上同時在窗口 2 和窗口 3 執行一個同樣的查詢,會發現窗口 2 執行成功,窗口3執行失敗,報“ SQL4712N 已超過閾值 ‘MYCUNCURRENT’。原因碼 = ‘6'。 ’SQLSTATE = 5U026”錯誤,這是由于在窗口2執行完這條語句后,幾乎同時在窗口 3 執行(此時窗口 2 中的查詢還沒完成),并發數為 2,超過了我們預定義的閾值邊界。具體如清單 21 所示:

清單 21-1 . 在窗口 2 中執行一個簡單查詢

C:> db2 select count ( * ) from rhette.project , rhette.project , rhette.project ,

rhette.project , rhette.project

1

- - - - - - - - - - - - - - - - - - - - - -

3200000

1 條記錄已選擇。

清單 21-2 . 在窗口 3 中執行同一個簡單查詢

C:> db2 select count ( * ) from rhette.project , rhette.project , rhette.project ,

rhette.project , rhette.project

SQL4712N 已超過閾值 ' MYCUNCURRENT '。原因碼 = ' 6 '。 SQLSTATE = 5U026

從上面兩個例子我們可以看到,WHEN 后可以跟不同的閾值謂詞( threshold-predicate ),閾值謂詞用來指定閾值的條件,可以是以下選項:

TOTALDBPARTITIONCONNECTIONS > integer-value

這個條件定義了在一個數據庫分區上可以同時運行的協調器( coordinator )連接的數量上限。條件值可以是任何正整數,包括零(如果違反,則會報 SQLSTATE 42820 )。零的意思是所有新的協調器連接將被阻止連接。所有當前運行或當前隊列中的連接都將繼續,不會被阻止。這個條件的定義域( definition domain )必須是數據庫( DATABASE ),而且其執行范圍( enforcement scope )必須是分區( PARTITION ),如果違反了,將報 SQLSTATE 5U037 錯誤,閾值無法創建,因為它違反了限制。

TOTALSCPARTITIONCONNECTIONS > integer-value

這個條件定義了在一個數據庫分區上特定的服務父類中可以同時運行的協調器( coordinator )連接的數量上限。條件值可以是任何正整數,包括零(如果違反,則會報 SQLSTATE 42820 )。零的意思是新的連接將被阻止加入服務類中。所有當前運行或當前隊列中的連接都將繼續,不會被阻止。這個條件的定義域( definition domain )必須是服務父類( SERVICE SUPERCLASS ),而且其執行范圍( enforcement scope )必須是分區( PARTITION ),如果違反了,將報 SQLSTATE 5U037 錯誤,閾值無法創建,因為它違反了限制。

AND QUEUEDCONNECTIONS > integer-value or AND QUEUEDCONNECTIONS UNBOUNDED

當允許的協調器連接最大值被超過時,用指定的隊列大小(緩存這些連接)。條件值可以是任何正整數,包括零(如果違反,則會報 SQLSTATE 42820)。零的意思是沒有協調器連接將被放入隊列中。指定 UNBOUNDED,意味著將把所有超過協調器連接最大值的連接放入到隊列中,并且 threshold-exceeded-actions 不會被執行。默認值是零。

CONNECTIONIDLETIME > integer-value (DAY | DAYS | HOUR | HOURS | MINUTE | MINUTES )

這個條件定義了數據庫管理器允許一個連接保持空閑狀態的時間上限。條件值可以是任何非零的正整數(如果違反,則會報 SQLSTATE 42820 )。使用一個合法的持續時間關鍵字,為 integer-value 指定適當的時間單位。這個條件的定義域( definition domain )必須是數據庫( DATABASE )或服務父類( SERVICE SUPERCLASS ),而且其執行范圍( enforcement scope )必須是數據庫( DATABASE ),如果違反了,將報 SQLSTATE 5U037 錯誤,閾值無法創建,因為它違反了限制。這個條件將在協調器數據庫分區上作為邏輯條件被強制執行。

因為這個閾值的最小粒度是五分鐘,指定的值將圍繞著五分鐘的非零倍數。萬一指定的值不是五分鐘的非零倍數(超過或小于),那么將自動選擇一個最接近五分鐘非零倍數的整數值。這個閾值的最大值是 2 147 483 400 秒。任何指定的值(使用天、小時、分鐘或者秒),如果其換算成秒的值大于 2 147 483 400 秒,則其將被截斷為 2 147 483 400 秒。修改 DB2CHECKCLIENTINTERVAL 注冊表變量引起檢查頻率變低可能會影響這個閾值的粒度。

CONCURRENTWORKLOADOCCURRENCES > integer-value

這個條件定義在每個數據庫分區上運行的并發工作負載的數量上限。這個條件值可以被設成任何非零整數值(如果違反,則會報 SQLSTATE 42820 )。條件的定義域( definition domain )必須是 WORKLOAD,如果違反了,將報 SQLSTATE 5U037 錯誤,閾值無法創建,因為它違反了限制。

CONCURRENTWORKLOADACTIVITIES > integer-value

這個條件定義了每個數據庫分區上工作負載的并發協調器活動和嵌套活動的數量上限。這個條件值可以是任何非零正整數值(如果違反,則會報 SQLSTATE 42820 )。條件的執行范圍( enforcement scope )必須是 WORKLOAD OCCURRENCE,如果違反了,將報 SQLSTATE 5U037 錯誤,閾值無法創建,因為它違反了限制。

CONCURRENTDBCOORDACTIVITIES > integer-value

這個條件定義在所有的數據庫分區上指定的作用域中可以并發運行的數據庫協調器活動( database coordinator activities )的數量上限。條件值可以是任何正整數,包括零(如果違反,則會報 SQLSTATE 42820 )。零的意思是任何新的數據庫協調器活動將被阻止執行。所有當前運行或當前隊列中的數據庫協調器活動都將繼續,不會被阻止。這個條件的定義域( definition domain )必須是數據庫( DATABASE ),工作動作( WORK ACTION ),服務父類( SERVICE SUPERCLASS ),或者服務子類( SERVICE SUBCLASS ),而且其執行范圍( enforcement scope )必須是數據庫( DATABASE ),如果違反了,將報 SQLSTATE 5U037 錯誤,閾值無法創建,因為它違反了限制。

AND QUEUEDACTIVITIES > integer-value or AND QUEUEDACTIVITIES UNBOUNDED

當允許的數據庫協調器活動( database coordinator activities )最大值被超過時,用指定的隊列大小(緩存這些數據庫協調器活動)。條件值可以是任何正整數,包括零(如果違反,則會報 SQLSTATE 42820 )。零的意思是沒有數據庫協調器活動將被放入隊列中。指定 UNBOUNDED,意味著將把所有超過數據庫協調器活動最大值的活動放入到隊列中,并且 threshold-exceeded-actions 不會被執行。默認值是零。

ESTIMATEDSQLCOST > bigint-value

這個條件定義了一個活動的優化器分配成本的上限。條件值可以是任何非零正整數(如果違反,則會報 SQLSTATE 42820)。這個條件的定義域( definition domain )必須是數據庫( DATABASE ),工作動作( WORK ACTION ),服務父類( SERVICE SUPERCLASS ),或者服務子類( SERVICE SUBCLASS ),而且其執行范圍( enforcement scope )必須是數據庫( DATABASE ),如果違反了,將報 SQLSTATE 5U037 錯誤,閾值無法創建,因為它違反了限制。這個條件在協調器數據庫分區上是被強制執行的。被這個條件跟蹤的活動有:

DML協調器活動

那些被用戶邏輯調用的嵌套DML活動。因此,那些可以被數據庫管理器初始化的DML活動(比如,實用程序,存儲過程,嵌入式 SQL 等)都不會被這個條件跟蹤(除非他們的開支是被包含在他們的調用者評估上的,也就是間接被跟蹤)。

SQLROWSRETURNED > integer-value

這個條件定義了返回給(應用服務器上的)應用客戶端的行數上限。條件值可以是任何非零正整數(如果違反,則會報 SQLSTATE 42820 )。這個條件的定義域( definition domain )必須是數據庫( DATABASE ),工作動作( WORK ACTION ),服務父類( SERVICE SUPERCLASS ),或者服務子類( SERVICE SUBCLASS ),而且其執行范圍( enforcement scope )必須是數據庫( DATABASE ),如果違反了,將報 SQLSTATE 5U037 錯誤,閾值無法創建,因為它違反了限制。這個條件在協調器數據庫分區上是被強制執行的。被這個條件跟蹤的活動有:

DML 協調器活動;

那些源自用戶邏輯嵌套 DML 活動。因此,那些可以被數據庫管理器初始化的 DML 活動(比如,實用程序,存儲過程,嵌入式 SQL 等)都不會被這個條件跟蹤。

在一個存儲過程內部的返回結果集被分別視同為獨立的活動。沒有存儲過程返回行數的集合限制。

ACTIVITYTOTALTIME > integer-value ( DAY | DAYS | HOUR | HOURS | MINUTE | MINUTES )

這個條件定義數據庫管理器允許一個特定的活動執行的總時間上限,包括這個活動排隊的時間。條件值可以是任何非零正整數(如果違反,則會報 SQLSTATE 42820 )。使用一個合法的持續時間關鍵字,為 integer-value 指定適當的時間單位。這個條件的定義域( definition domain )必須是數據庫( DATABASE )或服務父類( SERVICE SUPERCLASS ),而且其執行范圍( enforcement scope )必須是數據庫( DATABASE ),如果違反了,將報 SQLSTATE 5U037 錯誤,閾值無法創建,因為它違反了限制。這個條件將在協調器數據庫分區上作為邏輯條件被強制執行。

因為這個閾值的最小粒度是五分鐘,指定的值將圍繞著五分鐘的非零倍數。萬一指定的值不是五分鐘的非零倍數(超過或小于),那么將自動選擇一個最接近五分鐘非零倍數的整數值。這個閾值的最大值是 2 147 483 400 秒。任何指定的值(使用天、小時、分鐘或者秒),如果其換算成秒的值大于 2 147 483 400 秒,則其將被截斷為 2 147 483 400 秒。修改 DB2CHECKCLIENTINTERVAL 注冊表變量引起檢查頻率變低可能會影響這個閾值的粒度。

SQLTEMPSPACE > integer-value ( K | M | G )

這個條件定義在任何一個數據庫分區上系統臨時表空間的上限大小。條件值可以是任何非零正整數(如果違反,則會報 SQLSTATE 42820 )。

如果指定了 integer-value K (大小或小寫) , 則最大值是 integer-value 乘以 1024;如果指定了 integer-value M (大小或小寫) , 則最大值是 integer-value 乘以 1 048 576;如果指定了 integer-value G (大小或小寫) , 則最大值是 integer-value 乘以 1 073 741 824。

這個條件的定義域( definition domain )必須是數據庫( DATABASE )或服務父類( SERVICE SUPERCLASS ),而且其執行范圍( enforcement scope )必須是分區( PARTITION ),如果違反了,將報 SQLSTATE 5U037 錯誤,閾值無法創建,因為它違反了限制。這個條件將在協調器數據庫分區上作為邏輯條件被強制執行。以下活動將被這個條件跟蹤:

DML 協調器活動和相應的子代理工作( subsection execution );

那些源自用戶邏輯嵌套 DML 活動和他們相應的子代理工作( subsection execution )。因此,那些可以被數據庫管理器初始化的 DML 活動(比如,實用程序,存儲過程,嵌入式 SQL 等)都不會被這個條件跟蹤。

最后,我們繼續在窗口 1 刪除剛才定義的兩個閾值 MYCUNCURRENT 和 LargeQuery,同樣的,在刪除之前,需要先把閾值變成不可用。具體如清單 22 所示:

清單22 . 在窗口 1 中刪除閾值

C:> db2 - tvf dropThresholds.sql

ALTER THRESHOLD MYCUNCURRENT DISABLE

DB20000I SQL命令成功完成。

DROP THRESHOLD MYCUNCURRENT

DB20000I SQL命令成功完成。

ALTER THRESHOLD LargeQuery DISABLE

DB20000I SQL命令成功完成。

DROP THRESHOLD LargeQuery

DB20000I SQL命令成功完成。

命令成功完成,這樣我們就刪除了剛才我們定義的兩個閾值。

標簽: DB2 數據庫
主站蜘蛛池模板: 国产呦系列 欧美呦 日韩呦 | 亚洲高清免费在线观看 | 四虎hk网址 | 亚洲欧美久久精品一区 | 精品国产品国语在线不卡丶 | 免费精品在线观看 | 国产精彩对白综合视频 | 中文字幕在线观看一区二区 | 日韩亚州 | 亚洲国产欧美在线 | 成人亚洲欧美日韩在线 | 二级黄绝大片中国免费视频0 | 久久aa毛片免费播放嗯啊 | 成人黄色小视频在线观看 | 黄在线免费看 | 毛片免费全部完整播放 | 中文字幕在线观看网站 | 亚洲欧美日韩特级毛片 | 亚州精品一区中文字幕乱码 | 免费看欧美一级特黄α大片 | 国产精品亚洲片在线观看不卡 | 国产国产人在线成免费视频69 | 国产最新地址 | 精品久久久日韩精品成人 | 国产萝控精品福利视频免费 | 小明永久免费大陆在线观看 | 亚洲午夜网 | 国产精品久久久久久爽爽爽 | 午夜水蜜桃视频在线观看 | 99riav国产精品 | caob视频| 欧美成人免费全网站大片 | 纯欧美一级毛片免费 | 国产精品极品 | 综合激情区视频一区视频二区 | 亚洲第一视频区 | 国产精品成人久久久久久久 | 亚洲精品一区henhen色 | 青青热久麻豆精品视频在线观看 | 亚洲欧美日韩国产精品第不页 | 手机看片久久高清国产日韩 |