偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

DB2 V9.7 語句集中器的正確應(yīng)用描述

數(shù)據(jù)庫
此文章主要向大家描述的是DB2 V9.7 語句集中器的正確使用,以下就是對(duì)DB2 V9.7 語句集中器的實(shí)際操作步驟的具體描述。

以下的文章主要向大家描述的是DB2 V9.7 語句集中器的正確使用,我們大家都知道在 OLTP 環(huán)境下,每秒中有大量 SQL 語句在運(yùn)行,DB2 V9.7 數(shù)據(jù)庫版本之前,每條動(dòng)態(tài) SQL 語句的執(zhí)行都會(huì)要求 DB2 對(duì)其進(jìn)行編譯。

DB2 對(duì) SQL 語句進(jìn)行編譯是一個(gè)非常消耗 CPU 的行為。 DB2 V9.7 中提出了語句集中器,對(duì)類似而不等同的動(dòng)態(tài) SQL 語句進(jìn)行變換,使得這些類似的 SQL 語句在包緩沖中進(jìn)行共享,大大減少了編譯的次數(shù)以消除編譯的開銷。

簡介

在 DB2 數(shù)據(jù)庫中存在兩種類型的 SQL 語句,一種為動(dòng)態(tài) SQL,一種為靜態(tài) SQL 。靜態(tài) SQL 的執(zhí)行計(jì)劃是在 bind 包到數(shù)據(jù)庫時(shí)就已經(jīng)確定,執(zhí)行時(shí)只需要把執(zhí)行計(jì)劃調(diào)出來即可;動(dòng)態(tài) SQL 的執(zhí)行計(jì)劃需要每次執(zhí)行時(shí)進(jìn)行編譯,如果下次執(zhí)行時(shí),執(zhí)行計(jì)劃已經(jīng)不在包緩存中則需要重新編譯該語句。

在 OLTP 環(huán)境下,每秒鐘需要執(zhí)行的 SQL 非常多,如果這些 SQL 語句都是動(dòng)態(tài)語句,則都需要大量的 CPU 時(shí)間進(jìn)行編譯。 DB2 判斷一個(gè)動(dòng)態(tài) SQL 語句的執(zhí)行計(jì)劃是否在包緩存中時(shí)采用的是 HASH 算法,該算法根據(jù) SQL 語句的文本進(jìn)行 HASH,SQL 文本即使只有一個(gè)字母的大、小寫不同,也會(huì)造成 HASH 值不同如果 HASH 值不同,則認(rèn)為是兩個(gè)不同的 SQL 語句。

對(duì)下面的兩個(gè)語句 DB2 就認(rèn)為是不同的 SQL 。

  1. select firstnme,lastname from employee where empno='000020'   
  2. select firstnme,lastname from employee where empno='000070'  

上面兩個(gè)語句雖然在在 Where 條件處只有一個(gè)數(shù)字差異,DB2 HASH 算法也會(huì)認(rèn)為這是兩個(gè)不同的 SQL 。但是 DB2 為他們生成的執(zhí)行計(jì)劃都是一樣的,我們使用 db2expln 工具獲得執(zhí)行計(jì)劃如下。執(zhí)行計(jì)劃顯示上面兩個(gè) SQL 語句都是使用索引 PK_EMPLOYEE 先獲取 RID,然后根據(jù) RID 再讀取具體的數(shù)據(jù)。

  1. Rows   
  2. RETURN   
  3. ( 1)   
  4. Cost   
  5. I/O   
  6. |   
  7. 1   
  8. FETCH   
  9. ( 2)   
  10. 7.58163   
  11. 1   
  12. /----+----\   
  13. 1 42   
  14. IXSCAN TABLE: DB2INST1   
  15. ( 3) EMPLOYEE   
  16. 0.0165581 Q1   
  17. 0   
  18. |   
  19. 42   
  20. INDEX: DB2INST1   
  21. PK_EMPLOYEE   
  22. Q1  

雖然兩個(gè) SQL 的執(zhí)行計(jì)劃是相同的,但是 DB2 為了獲取執(zhí)行計(jì)劃需要對(duì)兩個(gè) SQL 都要進(jìn)行編譯,消耗了 CPU 。這種消耗在每秒鐘執(zhí)行成千條 SQL 語句的 OLTP 環(huán)境下,對(duì)性能的影響是比較大的。

語句集中器的啟用

DB2V9.7 推出了語句集中器的功能,語句集中器在數(shù)據(jù)庫服務(wù)器上修改動(dòng)態(tài) SQL 語句,以使類似而不等同的 SQL 語句可以共享同一個(gè)執(zhí)行計(jì)劃。如果啟動(dòng)了DB2 V9.7 語句集中器,上述兩個(gè) SQL 只需要編譯一次即可。

在聯(lián)機(jī)事務(wù)處理(OLTP)系統(tǒng)中,可能會(huì)反復(fù)生成包含不同字面值的簡單語句。在此類工作負(fù)載中,重新編譯語句的成本會(huì)導(dǎo)致開銷大幅增加。語句集中器通過允許重復(fù)使用已編譯的語句(而不考慮字面值)來消除此開銷。

缺省情況下,語句集中器處于禁用狀態(tài)。如果希望對(duì)數(shù)據(jù)庫中的所有動(dòng)態(tài)語句啟用語句集中器,我們需要將 stmt_conc 數(shù)據(jù)庫配置參數(shù)設(shè)置為 LITERALS 。不過 DB2 只會(huì)將前 100000 個(gè)字面值才進(jìn)行替換;其余字面值保持不變,一般情況下這也能滿足我們的要求。

  1. db2 get db cfg for sample |grep "CON"  

 

語句集中器 (STMT_CONC) = OFF

 

如果并不希望對(duì)所有 SQL 啟動(dòng)語句集中器,只是希望指定連接在執(zhí)行動(dòng)態(tài) SQL 時(shí)進(jìn)行語句集中,則我們可以在客戶機(jī)上啟動(dòng)語句集中器,需要在 db2cli.ini 配置文件中設(shè)置:

  1. StmtConcentrator = WITHLITERALS  

默認(rèn)情況下連接的語句集中器是否啟動(dòng)由 Server 的配置決定。如果設(shè)置 StmtConcentrator 的值為 OFF,表示連接的DB2 V9.7 語句集中器關(guān)閉;如果 StmtConcentrator 為 WITHLITERALS 表示啟動(dòng)語句集中器。當(dāng)語句集中器啟動(dòng)后,所有 Server 支持集中的語句將共享執(zhí)行計(jì)劃。 db2cli.ini 中的參數(shù) StmtConcentrator 影響的是連接的 SQL_ATTR_STMT_CONCENTRATOR 屬性,我們也可以在 ODBC、JDBC 程序中直接設(shè)置連接的這個(gè)屬性。

我們應(yīng)優(yōu)先考慮在客戶機(jī)級(jí)別啟用語句集中器,首先它允許在最精細(xì)的級(jí)別控制語句集中器,其次,它是在整個(gè) DB2 產(chǎn)品系列中啟用語句集中器的唯一一致方式。

語句集中過程導(dǎo)致修改動(dòng)態(tài)語句,那么原始語句和修改后的語句都將顯示在說明輸出中。如果語句集中器已修改原始語句文本,那么事件監(jiān)視器邏輯監(jiān)視元素以及 MON_GET_ACTIVITY_DETAILS 表函數(shù)的輸出都將顯示原始語句。其他監(jiān)視器界面將僅顯示修改后的語句文本。

我們修改數(shù)據(jù)配置參數(shù) STMT_CONC 對(duì)所有連接啟動(dòng)DB2 V9.7 語句集中器。

  1. db2 update db cfg for sample using STMT_CONC LITERALS  

然后我們分別執(zhí)行:

  1. select firstnme,lastname from employee where empno='000020'   
  2. select firstnme,lastname from employee where empno='000070'  

我們使用下面語句獲取 SQL 語句的編譯、執(zhí)行情況:

  1. db2 get snapshot for dynamic sql on sample  

執(zhí)行數(shù) = 0

編譯數(shù) = 0

 

最差預(yù)編譯時(shí)間(毫秒) = 0

 

最佳預(yù)編譯時(shí)間(毫秒) = 0

 

---------------------------------- 省略 ------------------------------

 

語句文本 = select firstnme,lastname from employee where empno='000020'

 

執(zhí)行數(shù) = 0

編譯數(shù) = 0

 

最差預(yù)編譯時(shí)間(毫秒) = 0

 

最佳預(yù)編譯時(shí)間(毫秒) = 0

 

---------------------------------- 省略 ------------------------------

 

語句文本 = select firstnme,lastname from employee where empno='000070'

 

執(zhí)行數(shù) = 2

編譯數(shù) = 1

 

最差預(yù)編譯時(shí)間(毫秒) = 218

 

最佳預(yù)編譯時(shí)間(毫秒) = 218

 

---------------------------------- 省略 ------------------------------

 

語句文本 = select firstnme,lastname from employee where empno=:L0

 

我們看到兩個(gè)原始的 SQL 語句編譯次數(shù)、執(zhí)行次數(shù)、編譯時(shí)間均為 0,同時(shí)有個(gè)用” :L0 ”參數(shù)標(biāo)識(shí)的語句編譯次數(shù)為 1,執(zhí)行次數(shù)為 2,編譯時(shí)間為 218 毫秒,以上的相關(guān)內(nèi)容就是對(duì)DB2 V9.7 語句集中器的介紹,望你能有所收獲。

完整內(nèi)容的學(xué)習(xí),請(qǐng)?jiān)L問:

http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0907luohq3/

【編輯推薦】

  1. 對(duì)DB2數(shù)據(jù)庫賬戶以及用戶標(biāo)識(shí)的正確認(rèn)識(shí)
  2. DB2連接端口不能啟動(dòng)這一問題的殲滅
  3. JDBC連接DB2數(shù)據(jù)庫的“捷徑”
  4. 對(duì)DB2 實(shí)現(xiàn)split的操作流程描述
  5. DB2數(shù)據(jù)庫雙機(jī)的正確安裝流程描述

 

 

責(zé)任編輯:佚名 來源: kejiweb.com
相關(guān)推薦

2010-08-16 11:34:11

IBM DB2 V9.

2010-08-16 13:53:26

2010-08-19 09:30:31

DB2 V9.7

2010-08-10 10:23:16

IBM DB2 V9.

2010-08-10 10:42:27

DB2 V9.7

2010-08-11 11:39:06

IBM DB2 V9.

2010-08-19 08:49:41

DB2 V9.7 索引

2010-08-16 16:08:34

DB2 V9.7

2010-08-31 13:42:56

DB2連接代理

2010-08-10 17:24:15

2010-08-18 16:45:40

IBM DB2 Cat

2010-08-10 11:01:12

DB2 V9.7

2010-08-11 15:48:04

DB2編程

2010-08-11 15:48:04

DB2編程

2010-08-16 10:10:27

DB2常用函數(shù)

2010-08-19 09:22:03

DB2 V9.7 分區(qū)

2010-08-06 14:52:13

DB2 9.7武器

2010-08-06 15:05:04

IBM DB2連接集中

2010-08-11 09:56:20

DB2 V9.7

2010-08-11 17:28:56

DB2 數(shù)據(jù)倉庫技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)