日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
DB2V9.7語句集中器的正確應(yīng)用描述

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

成都創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)按需規(guī)劃網(wǎng)站,是成都網(wǎng)站營銷推廣公司,為成都圍欄護(hù)欄提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站推廣熱線:028-86922220

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

簡介

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

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

對下面的兩個(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 算法也會認(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. FETCH 
  7. ( 2) 
  8. 7.58163 
  9. /----+----\ 
  10. 1 42 
  11. IXSCAN TABLE: DB2INST1 
  12. ( 3) EMPLOYEE 
  13. 0.0165581 Q1 
  14. 42 
  15. INDEX: DB2INST1 
  16. PK_EMPLOYEE 
  17. Q1 

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

語句集中器的啟用

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

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

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

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

語句集中器 (STMT_CONC) = OFF

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

 
 
 
  1. StmtConcentrator = WITHLITERALS 

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

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

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

我們修改數(shù)據(jù)配置參數(shù) STMT_CONC 對所有連接啟動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ù)為 1,執(zhí)行次數(shù)為 2,編譯時(shí)間為 218 毫秒,以上的相關(guān)內(nèi)容就是對DB2 V9.7 語句集中器的介紹,望你能有所收獲。

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

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


文章題目:DB2V9.7語句集中器的正確應(yīng)用描述
本文路徑:http://www.5511xx.com/article/cccoegc.html