手機版
你好,游客 登錄 注冊 搜索
背景:
閱讀新聞

DB2 package的bind、rebind和db2rbind

[日期:2014-05-25] 來源:Linux社區  作者:marvelyu [字體: ]

通常我們知道,DB2的package在統計信息或依賴對象發生變化后需要做下重新綁定,否則DB2優化器會采用效率較差或者錯誤的執行計劃運行該package,造成執行性能嚴重下降或者SP一直會處于卡死狀態。所以定期對SP進行重新綁定操作,對數據庫整體性能和效率都有較大的提升,但是查一查,關于DB2的SP重新綁定,提供了三個命令:db2rbind、rebind和bind,很多人都分不清這三者區別,如何使用的問題,所以本文就重點對著三個命令用法進行分析。

其實三者都是提供SP重新綁定,不過傳入參數不一樣,bind需要帶入.bnd的文件,缺陷情況下,C或嵌入式SQL編寫的SP在precompile時,都會創建一個以.bnd的結尾的文件,數據庫中使用程序包和應用程序編譯的原因相同,即就是提高性能和壓縮,在程序包構建過程而不是執行過程中,SP中的相關語法語義都得到分析,并且程序包中存儲的是被解釋效率更高的操作字符組,在服務器管理器調用預編譯生生成的代碼,只需要提供相應的輸入變量就可以執行執行,提高了效率。并且預編譯僅僅適用靜態SQL,而不適合如prepare execute和execute immediate 動態SQL。這些動態SQL還是需要重新進行編譯解釋。db2提供綁定文件描述工具db2bfd工具可以查看bnd文件。其用法如下:

C:\Program Files (x86)\IBM\SQLLIB\bnd>db2bfd

Usage:  db2bfd [ [-b] [-h] [-s] [-v] ] <filespec>

        Where:  <filespec> is at least a V7 bind file

        Options: -b = display bind file header
                -h = display this information
                -s = display SQL statements
                -v = display host variable declarations

C:\Program Files (x86)\IBM\SQLLIB\bnd>db2bfd -b db2sampl_SQL.bnd

db2sampl_SQL.bnd:  Header Contents

Header Fields:

Field  Value
-----  -----
releaseNum      0x800
Endian  0x4c
numHvars        16
maxSect        14
numStmt        26
optInternalCnt  4
optCount        10


Name                Value
------------------  -----
Isolation Level    Cursor Stability
Creator            "NULLID  "
App Name            "SQLE6H02"
Timestamp          "AAAAABIU:2004/08/01 00:00:00:00"
Cnulreqd            Yes
Sql Error          No package
Block              Block All
Validate            Bind
Date                Default/local
Time                Default/local


*** All other options are using default settings as specified by the server ***

 

C:\Program Files (x86)\IBM\SQLLIB\bnd>db2bfd -s db2sampl_SQL.bnd

db2sampl_SQL.bnd:  SQL Statements = 26

Line Sec Typ Var Len SQL statement text
---- --- --- --- --- ---------------------------------------------------------
  55  0  5  0  21 BEGIN DECLARE SECTION
  76  0  2  0  19 END DECLARE SECTION
 275  0  14  0  32 WHENEVER SQLERROR GOTO ENDOFPROC
3366  1  9  1  26 EXECUTE IMMEDIATE :H00001
3416  2  0  1  40 VALUES CURRENT SQLID INTO :H00008
3418  3  0  1  32 SET CURRENT SQLID = :H00009
3437  4  0  1  34 SET CURRENT SQLID = :H00008
3459  5  0  1  40 VALUES CURRENT SQLID INTO :H00008
3461  6  0  1  32 SET CURRENT SQLID = :H00009
3547  7  11  1  24 PREPARE S1 FROM :H00001
3582  7  11  1  24 PREPARE S1 FROM :H00001
3598  8  0  1  34 SET CURRENT SQLID = :H00008
3616  0  5  0  21 BEGIN DECLARE SECTION
3619  0  2  0  19 END DECLARE SECTION
3652  7  9  4  56 EXECUTE S1 USING :H00004    , :H00015, :H00005, :H00006
3674  7  9  4  56 EXECUTE S1 USING :H00004    , :H00016, :H00005, :H00006
3720  9  0  1  41 VALUES CURRENT SCHEMA INTO :H00008
3774  10  0  1  33 SET CURRENT SCHEMA = :H00009
3977  11  11  1  32 PREPARE BLOBUPDATE FROM :H00001
4005  12  11  1  32 PREPARE CLOBUPDATE FROM :H00001
4248  13  0  1  86 SELECT NUM_DB_STORAGE_PATHS INTO :H00014              FR
                    OM TABLE(SNAP_GET_DB('', -1))
4416  14  0  1  35 SET CURRENT SCHEMA = :H00008
4475  11  9  3  58 EXECUTE BLOBUPDATE using :H00010  , :H00005, :H00012

4492  11  9  3  58 EXECUTE BLOBUPDATE using :H00010  , :H00005, :H00012

4551  12  9  3  59 EXECUTE CLOBUPDATE using :H00011  , :H00005, :H00013

4573  12  9  3  59 EXECUTE CLOBUPDATE using :H00011  , :H00005, :H00013

確切來說package都是用如C等嵌入式語言開發編譯而來,所以在執行綁定操作,我們通常需要使用bind,因為bind命令需要傳入bnd參數文件名稱,如:

C:\Program Files (x86)\IBM\SQLLIB\bnd>db2 bind db2sampl_SQL.bnd

LINE    MESSAGES FOR db2sampl_SQL.bnd
------  --------------------------------------------------------------------
        SQL0061W  The binder is in progress.
        SQL0091N  Binding was ended with "0" errors and "0" warnings.
就是將這個程序包和當前數據庫綁定。當然還有其他參數,對于每個單獨進行預編譯的源代碼模塊,都將創建一個程序包。如果應用程序有 5 個源文件,其中 3 個需要進行預編譯,那么將創建 3 個程序包或綁定文件。缺省情況下,為每個程序包指定的名稱與 .bnd 文件所基于的源模塊的名稱相同,但此名稱將被截斷為 8 個字符。要以顯式方式指定另一個程序包名,必須在 PREP 命令中使用 PACKAGE USING 選項。程序包的版本由 VERSION 預編譯選項指定,并且缺省為空字符串。如果這個新創建的程序包的名稱和模式與目標數據庫中當前存在的某個程序包相同,但版本標識有所不同,那么將創建新程序包并保留先前的程序包。但是,如果存在與所綁定程序包的名稱、模式和版本匹配的程序包,那么該程序包將被刪除并替換為正在綁定的新程序包。如果綁定時指定了 ACTION ADD,那么將不允許發生這種情況,而是返回錯誤(SQL0719)。

DB2數據庫性能調整和優化(第1、2版) PDF http://www.nmzech.live/Linux/2013-09/90679.htm

DB2數據庫性能優化介紹 http://www.nmzech.live/Linux/2013-09/90678.htm

DB2 9.7 for Linux 5.4安裝詳細步驟 http://www.nmzech.live/Linux/2012-05/59885.htm 

更多詳情見請繼續閱讀下一頁的精彩內容http://www.nmzech.live/Linux/2014-05/102248p2.htm

linux
相關資訊       DB2 
本文評論   查看全部評論 (0)
表情: 表情 姓名: 字數

       

評論聲明
  • 尊重網上道德,遵守中華人民共和國的各項有關法律法規
  • 承擔一切因您的行為而直接或間接導致的民事或刑事法律責任
  • 本站管理人員有權保留或刪除其管轄留言中的任意內容
  • 本站有權在網站內轉載或引用您的評論
  • 參與本評論即表明您已經閱讀并接受上述條款
北京快乐8走势图彩客网