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

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

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

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

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

簡(jiǎn)介

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

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

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

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

上面兩個(gè)語(yǔ)句雖然在在 Where 條件處只有一個(gè)數(shù)字差異,DB2 HASH 算法也會(huì)認(rèn)為這是兩個(gè)不同的 SQL 。但是 DB2 為他們生成的執(zhí)行計(jì)劃都是一樣的,我們使用 db2expln 工具獲得執(zhí)行計(jì)劃如下。執(zhí)行計(jì)劃顯示上面兩個(gè) SQL 語(yǔ)句都是使用索引 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 語(yǔ)句的 OLTP 環(huán)境下,對(duì)性能的影響是比較大的。

語(yǔ)句集中器的啟用

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

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

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

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

 

語(yǔ)句集中器 (STMT_CONC) = OFF

 

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

  1. StmtConcentrator = WITHLITERALS  

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

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

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

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

  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'  

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

  1. db2 get snapshot for dynamic sql on sample  

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

編譯數(shù) = 0

 

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

 

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

 

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

 

語(yǔ)句文本 = select firstnme,lastname from employee where empno='000020'

 

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

編譯數(shù) = 0

 

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

 

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

 

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

 

語(yǔ)句文本 = select firstnme,lastname from employee where empno='000070'

 

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

編譯數(shù) = 1

 

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

 

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

 

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

 

語(yǔ)句文本 = select firstnme,lastname from employee where empno=:L0

 

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

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

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

【編輯推薦】

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

 

 

責(zé)任編輯:佚名 來(lái)源: 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-19 08:49:41

DB2 V9.7 索引

2010-08-11 11:39:06

IBM DB2 V9.

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-06 14:52:13

DB2 9.7武器

2010-08-19 09:22:03

DB2 V9.7 分區(qū)

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ù)倉(cāng)庫(kù)技術(shù)
點(diǎn)贊
收藏

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