• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            統(tǒng)計(jì)值更新--runstats
            調(diào)整Buffer pool
            調(diào)整日志緩沖區(qū)大小
            應(yīng)用程序堆大小
            排序堆大小和排序堆值
            代理程序的數(shù)目

            活動(dòng)應(yīng)用程序的最大數(shù)目
            頁清除程序的數(shù)目
            I/O服務(wù)器的數(shù)目
            編入組的提交數(shù)目


            統(tǒng)計(jì)信息更新

            當(dāng)對SQL 查詢進(jìn)行優(yōu)化時(shí),SQL 編譯器所做出的決定會(huì)受到優(yōu)化器
            的數(shù)據(jù)庫內(nèi)容模型的重大影響。
            優(yōu)化器使用該數(shù)據(jù)模型來估計(jì)可以用于解決某個(gè)特定查詢的其它存取
            路徑的成本。
            數(shù)據(jù)模型中的關(guān)鍵元素是一組統(tǒng)計(jì)信息,該統(tǒng)計(jì)信息收集了有關(guān)數(shù)據(jù)
            庫中所包含的數(shù)據(jù)和系統(tǒng)目錄表中所存儲(chǔ)的數(shù)據(jù)的信息。這包括表、
            別名(nickname)、索引、列和用戶定義的函數(shù)(UDF)的統(tǒng)計(jì)信
            息。
            優(yōu)化器根據(jù)這些統(tǒng)計(jì)信息決定最有效方法訪問數(shù)據(jù)的方法,數(shù)據(jù)統(tǒng)計(jì)
            信息中的變化會(huì)引起對存取方案的選擇發(fā)生變化。
            適時(shí)更新數(shù)據(jù)統(tǒng)計(jì)信息。

             

            統(tǒng)計(jì)信息更新

            適時(shí)更新數(shù)據(jù)統(tǒng)計(jì)信息。
            –當(dāng)向表裝入數(shù)據(jù)并創(chuàng)建了合適的索引時(shí)。
            –當(dāng)用REORG 實(shí)用程序重新組織表時(shí)。
            –當(dāng)存在大量影響表及其索引的更新、刪除和插入操作時(shí)。(此處的“大量”可能意味
            著10% 到20% 的表和索引數(shù)據(jù)都受到了影響。)
            –在綁定性能至關(guān)重要的應(yīng)用程序之前。
            –當(dāng)預(yù)取數(shù)量發(fā)生變化時(shí)。
            只有當(dāng)進(jìn)行顯式的請求時(shí),對象的統(tǒng)計(jì)信息才會(huì)在系統(tǒng)目錄表中被更新。更新
            部分或全部統(tǒng)計(jì)信息方法:
            –使用RUNSTATS(運(yùn)行統(tǒng)計(jì)信息,run statistics)實(shí)用程序。
            –使用“reorgchk update statistics”命令。
            在使用RUNSTATS 之后需要重新綁定使用靜態(tài)SQL 的應(yīng)用程序,使查詢優(yōu)
            化器就可以選擇新統(tǒng)計(jì)信息所給出的最佳存取方案。但是,對于使用動(dòng)態(tài)SQL
            的應(yīng)用程序而言,沒必要進(jìn)行重新綁定,因?yàn)檎Z句的優(yōu)化是根據(jù)統(tǒng)計(jì)信息在運(yùn)
            行時(shí)進(jìn)行的。


            reorgchk update statistics

            當(dāng)您不完全知道所有表名或表名實(shí)在太多時(shí),進(jìn)行RUNSTATS 的最簡單方
            法就是使用“db2 reorgchk update statistics”命令。


            正確的腳本如下:

            db2 -v connect to DB_NAME

            db2 -v "select tbname, nleaf, nlevels, stats_timefrom sysibm.sysindexes“

            db2 -v reorgchk update statistics on table all

            db2 -v "select tbname, nleaf, nlevels, stats_timefrom sysibm.sysindexes“

            db2 -v terminate


            Runstats實(shí)用程序

            如果您知道表名并且想避免對大量表運(yùn)行RUNSTATS 實(shí)用程序(因
            為這樣做可能要花很長時(shí)間),那么一次對一張表進(jìn)行RUNSTATS
            更為可取。
            命令如下:


            db2 -v runstats on table TAB_NAME and indexes all

            這個(gè)命令將收集該表及其所有索引(基本級別)的統(tǒng)計(jì)信息。
            要查看是否對數(shù)據(jù)庫執(zhí)行了RUNSTATS,一種快捷方法便是查詢一
            些系統(tǒng)目錄表。例如:


            db2 -v "select tbname, nleaf, nlevels, stats_timefrom
            sysibm.sysindexes"


            調(diào)整Bufferpool大小

            緩沖池是內(nèi)存中的一塊存儲(chǔ)區(qū)域,用于臨時(shí)讀入和更改數(shù)據(jù)頁(含表行或索引
            項(xiàng))。緩沖池的用途是為了提高數(shù)據(jù)庫系統(tǒng)的性能。
            缺省情況下,應(yīng)用程序使用緩沖池IBMDEFAULTBP,它是在創(chuàng)建數(shù)據(jù)庫時(shí)創(chuàng)
            建的。當(dāng)SYSCAT.BUFFERPOOLS 目錄表中該緩沖池的NPAGES 值為-1
            時(shí),DB2 數(shù)據(jù)庫配置參數(shù)BUFFPAGE 控制著緩沖池的大小。
            可以增大所有數(shù)據(jù)庫的BUFFPAGE 值。


            db2 -v connect to DB_NAME

            db2 -v select * from syscat.bufferpools

            db2 -v alter bufferpool IBMDEFAULTBP size -1

            db2 -v connect reset

            db2 -v update db cfg for dbname using BUFFPAGE bigger_value

            db2 -v terminate

            要確定數(shù)據(jù)庫的緩沖池大小是否由BUFFPAGE 參數(shù)所決定,運(yùn)行:


            db2 -v connect to DB_NAME

            db2 -v SELECT * from SYSCAT.BUFFERPOOLS

            db2 -v connect reset

            db2 -v terminate

            檢查結(jié)果。如果每個(gè)緩沖池都有一個(gè)為“-1”的NPAGES 值,那么緩沖池大小是
            由數(shù)據(jù)庫配置中的BUFFPAGE 參數(shù)控制的。


            調(diào)整Bufferpool大小(續(xù))

            要確定緩沖池大小是否足夠大,請?jiān)谶\(yùn)行應(yīng)用程序時(shí)收集數(shù)據(jù)庫和/
            或緩沖池的快照。下面的腳本為您提供這些所需的信息:


            db2 -v update monitor switches using bufferpool on

            db2 -v get monitor switches

            --運(yùn)行程序–

            db2 -v get snapshot for all databases > snap.out

            db2 -v get snapshot for dbm>> snap.out

            db2 -v get snapshot for all bufferpools>> snap.out

            db2 -v reset monitor all

            db2 -v terminate

            請確保您在斷開數(shù)據(jù)庫連接之前發(fā)出“db2 -v get snapshot”,否則,該
            數(shù)據(jù)庫停止運(yùn)行,同時(shí)所有快照統(tǒng)計(jì)信息將會(huì)丟失。

             

            調(diào)整Bufferpool大小(續(xù))

            在數(shù)據(jù)庫快照或緩沖池快照的快照輸出中,查找下列“logical reads”和“physical
            reads”,這樣就可以計(jì)算出緩沖池命中率,它可以幫助您調(diào)優(yōu)緩沖池:


            --Related lines from a sample of bufferpoolsnapshots –

            Buffer pool data logical reads = 702033

            Buffer pool data physical reads = 0

            Buffer pool data writes = 414

            Buffer pool index logical reads = 168255

            Buffer pool index physical reads = 0

            按如下計(jì)算緩沖池命中率:


            (1 -((buffer pool data physical reads + buffer pool index physical reads)
            /(buffer pool data logical reads + pool index logical reads))) *100%

            這個(gè)計(jì)算考慮了緩沖池高速緩存的所有頁(索引和數(shù)據(jù))。理想情況下,該比
            率應(yīng)當(dāng)超過95%,并盡可能接近100%。

            要提高緩沖池命中率,請嘗試下面這些方法:
            –增加緩沖池大小。如果您的機(jī)器上有足夠大的內(nèi)存,請將BUFFPAGE 設(shè)置成
            40000 個(gè)頁(160 MB),或者等于機(jī)器總內(nèi)存的10%。對于大型OLTP 數(shù)據(jù)庫,在
            保持系統(tǒng)穩(wěn)定的同時(shí)為緩沖池留出盡可能多的內(nèi)存。可以先嘗試使用1.6 GB 的內(nèi)
            存,然后嘗試用更多內(nèi)存。
            –考慮分配多個(gè)緩沖池,如果可能的話,為每個(gè)經(jīng)常被訪問的大表所屬的表空間分配一
            個(gè)緩沖池,為一組小表分配一個(gè)緩沖池,然后嘗試一下使用不同大小的緩沖池以查看
            哪種組合會(huì)提供最佳性能。表空間的頁大小與緩沖池的頁大小一樣。

             

            調(diào)整Bufferpool大小(續(xù))

            create db testdb

            --using codesetiso8859-1 territory US

            on /data/misserver/dbimages

            collate using identity

            dft_extent_sz8

            catalog tablespace managed by database

            using (device '/dev/rds01' 131072,

            device '/dev/rds02' 131072,

            device '/dev/rds03' 131072)

            extentsize 32 prefetchsize 96

            ;

            connect to testdb;

            create bufferpool databp size 25000 pagesize 32768;

            create bufferpool bp8k size 16 pagesize 8192;

            disconnect all;


            調(diào)整Bufferpool大小(續(xù))

            create tablespace datatblsp pagesize 32K

            managed by database

            using (

            device '/dev/rdata0' 30720M ,

            device '/dev/rdata1' 30720M ,

            )

            extentsize 8 prefetchsize 48

            bufferpool databp;

             

            create tablespace idxtblsp pagesize 32K

            managed by database

            using (

            device '/dev/ridxa0' 6144M ,

            device '/dev/ridxa1' 6144M ,

            )

            extentsize 8 prefetchsize 48

            bufferpool databp;


            調(diào)整日志緩沖區(qū)

            LOGBUFSZ 是一個(gè)數(shù)據(jù)庫配置參數(shù)。它是用于日志緩沖區(qū)的參數(shù)。
            它允許您指定數(shù)據(jù)庫共享內(nèi)存的大小以用作在將日志記錄寫到磁盤之
            前這些記錄的緩沖區(qū)。
            當(dāng)下列事件之一發(fā)生時(shí)會(huì)將日志記錄寫到磁盤:
            –事務(wù)提交。
            –日志緩沖區(qū)已滿。
            –其它某個(gè)內(nèi)部數(shù)據(jù)庫管理器事件發(fā)生時(shí)。
            將日志記錄存在緩沖區(qū)將產(chǎn)生更加有效的日志文件I/O。如果對專用
            的日志磁盤有相當(dāng)多的讀操作,或者希望有較高的磁盤利用率,那么
            可以增加這個(gè)緩沖區(qū)的大小。
            當(dāng)增加這個(gè)參數(shù)的值時(shí),也要考慮DBHEAP 參數(shù),日志緩沖區(qū)使用
            的空間由DBHEAP 參數(shù)所控制。

             

            調(diào)整日志緩沖區(qū)

            LOGBUFSZ 是一個(gè)數(shù)據(jù)庫配置參數(shù)。它是用于日志緩沖區(qū)的參數(shù)。
            它允許您指定數(shù)據(jù)庫共享內(nèi)存的大小以用作在將日志記錄寫到磁盤之
            前這些記錄的緩沖區(qū)。
            當(dāng)下列事件之一發(fā)生時(shí)會(huì)將日志記錄寫到磁盤:
            –事務(wù)提交。
            –日志緩沖區(qū)已滿。
            –其它某個(gè)內(nèi)部數(shù)據(jù)庫管理器事件發(fā)生時(shí)。
            將日志記錄存在緩沖區(qū)將產(chǎn)生更加有效的日志文件I/O。如果對專用
            的日志磁盤有相當(dāng)多的讀操作,或者希望有較高的磁盤利用率,那么
            可以增加這個(gè)緩沖區(qū)的大小。
            當(dāng)增加這個(gè)參數(shù)的值時(shí),也要考慮DBHEAP 參數(shù),日志緩沖區(qū)使用
            的空間由DBHEAP 參數(shù)所控制。

             

            調(diào)整日志緩沖區(qū)(續(xù))

            LOGBUFSZ的缺省值為8(4KB 頁),這對于OLTP 數(shù)據(jù)庫而言通
            常不夠大。LOGBUFSZ 的最佳值為128 個(gè)或256 個(gè)4KB 頁。
            可以使用下面這個(gè)命令來更改該參數(shù)值:


            db2 -v update database cfg for DB_NAME using LOGBUFSZ 256

            db2 -v terminate

            使用數(shù)據(jù)庫快照來確定LOGBUFSZ 參數(shù)的值是否為最佳值:


            Log pages read = 0

            Log pages written = 12644

            一般而言,“log pages read”和“log pages written”之比應(yīng)當(dāng)盡可能
            小。理想情況下,“log pages read”的值應(yīng)為0,而“log pages written”
            的值應(yīng)很大。當(dāng)log pages read 太多時(shí),意味著需要一個(gè)較大的
            LOGBUFSZ。

             

            調(diào)整應(yīng)用程序堆大小(APPHEAPSZ)

            APPHEAPSZ 是一個(gè)數(shù)據(jù)庫配置參數(shù),它定義了代表某個(gè)特定代理程
            序或子代理程序的數(shù)據(jù)庫管理器可以使用的私有內(nèi)存頁數(shù)。
            在為應(yīng)用程序初始化代理程序或子代理程序時(shí)分配堆。
            分配的堆大小是處理給予代理程序或子代理程序的請求所需的最小
            值。當(dāng)代理程序或子代理程序需要更多的堆空間以處理較大的SQL
            語句時(shí),數(shù)據(jù)庫管理器將按照需要分配內(nèi)存,所分配的內(nèi)存大小最大
            可達(dá)到該參數(shù)所指定的最大值。
            缺省值是128 個(gè)4KB 頁,更改命令是:


            db2 -v update db cfg for DB_NAME using applheapsz 256

            db2 -v terminate

            當(dāng)應(yīng)用程序接收到一個(gè)表明應(yīng)用程序堆中存儲(chǔ)空間不夠的錯(cuò)誤時(shí),應(yīng)
            該增加APPHEAPSZ 的值。

             

            排序堆大小(SORTHEAP)和排序堆閾值(SHEAPTHRES)

            SORTHEAP 是一個(gè)數(shù)據(jù)庫配置參數(shù),它定義了私有排序所使用的私有內(nèi)存頁的
            最大數(shù)目,或共享排序所使用的共享內(nèi)存頁的最大數(shù)目。如果排序是私有排
            序,那么該參數(shù)影響代理程序私有內(nèi)存。如果排序是共享排序,那么該參數(shù)影
            響數(shù)據(jù)庫的共享內(nèi)存。每個(gè)排序都有單獨(dú)的由數(shù)據(jù)庫管理器按需分配的排序
            堆,在排序堆中對數(shù)據(jù)進(jìn)行排序。如果由優(yōu)化器來指導(dǎo)排序堆大小的分配,那
            么用優(yōu)化器提供的信息來分配的排序堆的大小要小于由該參數(shù)所指定的排序堆
            大小。
            SHEAPTHRES 是一個(gè)數(shù)據(jù)庫管理器配置參數(shù)。私有和共享排序所使用內(nèi)存的
            來源不一樣。共享排序內(nèi)存區(qū)的大小是在第一次連接到數(shù)據(jù)庫時(shí)根據(jù)
            SHEAPTHRES 值以靜態(tài)方式預(yù)先確定的。私有排序內(nèi)存區(qū)的大小是不受限制
            的。
            對于私有排序和共享排序,應(yīng)用SHEAPTHRES 參數(shù)的方式不同:
            –對于私有排序,SHEAPTHRES 是對私有排序在任何給定的時(shí)間可以消耗的全部內(nèi)
            存的實(shí)例級“軟”限制。當(dāng)實(shí)例的總私有排序內(nèi)存消耗量達(dá)到這一限制時(shí),為其它進(jìn)入
            的私有排序請求而分配的內(nèi)存會(huì)大大減少。
            –對于共享排序,SHEAPTHRES 是對共享排序在任何給定的時(shí)間可以消耗的全部內(nèi)
            存的數(shù)據(jù)庫級“硬”限制。當(dāng)達(dá)到這一限制時(shí),不允許有其它共享排序內(nèi)存請求,直到
            總的共享內(nèi)存消耗量回落到SHEAPTHRES 所指定的限制以下。

             

            排序堆大小(SORTHEAP)和排序堆閾值(SHEAPTHRES)

            要更改SORTHEAP 和SHEAPTHRES 的值,可以運(yùn)行如下命令:


            db2 -v update db cfg for DB_NAME using SORTHEAP a_value

            db2 -v update dbmcfgusing SHEAPTHRES b_value

            db2 -v terminate

            SORTHEAP是針對單個(gè)數(shù)據(jù)庫的,SHEAPTHRES是針對數(shù)據(jù)庫例程
            的。

             

            排序堆大小(SORTHEAP)和排序堆閾值(SHEAPTHRES)

            OLTP 應(yīng)用程序不應(yīng)該執(zhí)行大型排序,通常,SORTHEAP 大小的缺省值(256
            個(gè)4KB 頁)就足夠了。事實(shí)上,對于高并發(fā)性O(shè)LTP,您可能希望降低這個(gè)缺
            省值。
            當(dāng)需要進(jìn)一步研究時(shí),可以發(fā)出下面這條命令:


            db2 -v update monitor switches using sort on

            然后,讓您的應(yīng)用程序運(yùn)行一會(huì),然后輸入:

            db2 -v get snapshot for database on DBNAME

            看一下下面這個(gè)示例中的輸出:


            Total sort heap allocated = 0

            Total sorts = 1

            Total sort time (ms) = 0

            Sort overflows = 0

            Active sorts = 0

            Commit statements attempted = 1

            Rolback statements attempted = 0

            Dynamic statements attempted = 4

            Static statements attempted = 1

            Binds/precompilesattempted = 0


            排序堆大小(SORTHEAP)和排序堆閾值(SHEAPTHRES)

            根據(jù)該輸出,計(jì)算每個(gè)事務(wù)的排序數(shù)目、計(jì)算溢出了可用于排序的內(nèi)
            存的那部分排序的百分比。


            SortsPerTransaction= (Total Sorts) / (Commit statements attempted +
            Rollback statements attempted)

            PercentSortOverflow= (Sort overflows * 100 ) / (Total sorts)

            如果SortsPerTransaction大于5,它可能表明每個(gè)事務(wù)的排序太多。
            如果PercentSortOverflow大于3%,那么可能發(fā)生了嚴(yán)重的、未曾預(yù)
            料到的大型排序。發(fā)生這種情況時(shí),增加SORTHEAP 只會(huì)隱藏性能
            問題-卻無法修正它。這個(gè)問題的正確解決方案是通過添加正確的索
            引改進(jìn)有問題的SQL 語句的存取方案。

             

            排序堆大小(SORTHEAP)和排序堆閾值(SHEAPTHRES)

            建議:

            使用合適的索引使排序堆的使用降到最低。
            當(dāng)需要頻繁進(jìn)行大型排序時(shí),增加SORTHEAP 的值。
            如果增加SORTHEAP,請確定是否還需要調(diào)整數(shù)據(jù)庫管理器配置文件
            中的SHEAPTHRES 參數(shù)。
            優(yōu)化器用排序堆大小來確定存取路徑。在更改該參數(shù)后請考慮重新綁
            定應(yīng)用程序(使用REBIND PACKAGE 命令)。
            理想情況下,應(yīng)當(dāng)將排序堆閾值(SHEAPTHRES)參數(shù)合理地設(shè)置為
            在數(shù)據(jù)庫管理器實(shí)例中設(shè)置的SORTHEAP 參數(shù)最大值的倍數(shù)。該參
            數(shù)至少應(yīng)當(dāng)是實(shí)例中任何數(shù)據(jù)庫所定義的最大SORTHEAP 的兩倍。

             

            代理程序的數(shù)目(MAXAGENTS、NUM_POOLAGENTS 和NUM_INITAGENTS)

            這些是數(shù)據(jù)庫管理器配置參數(shù)。
            MAXAGENTS 參數(shù)表明在任何給定時(shí)間接受應(yīng)用程序請求的數(shù)據(jù)庫管理器代理
            程序的最大數(shù)目。MAXAGENTS 的值應(yīng)當(dāng)至少是每個(gè)被并發(fā)地訪問的數(shù)據(jù)庫中
            的MAXAPPLS(并發(fā)應(yīng)用程序最大數(shù)目)值的總和。如果數(shù)據(jù)庫的數(shù)量大于
            NUMDB 參數(shù),那么最安全的方案就是使用NUMDB 和MAXAPPLS 最大值的乘
            積。
            NUM_POOLAGENTS 參數(shù)是用于評定您希望代理程序池增加到多大的準(zhǔn)則。如
            果所創(chuàng)建的代理程序多于該參數(shù)值所指明的數(shù)目,那么當(dāng)代理程序執(zhí)行完自己當(dāng)
            前的請求后將終止運(yùn)行而不是返回給代理程序池。如果該參數(shù)的值為0,將按照
            需要?jiǎng)?chuàng)建代理程序,在代理程序執(zhí)行完自己當(dāng)前的請求后終止運(yùn)行。
            要避免因在并發(fā)連接許多應(yīng)用程序的OLTP 環(huán)境中頻繁創(chuàng)建和終止代理程序而產(chǎn)
            生的成本,請將NUM_POOLAGENTS 的值增加到接近MAXAGENTS 值。
            NUM_INITAGENTS 參數(shù)決定空閑代理程序的初始數(shù)量,這些代理程序是在
            DB2START 時(shí)在代理程序池中創(chuàng)建的。指定初始代理程序數(shù)目要合適。
            在大多數(shù)情況下,將MAXAGENTS 和NUM_POOLAGENTS 的值設(shè)置成略微大
            于并發(fā)應(yīng)用程序連接的最大預(yù)計(jì)數(shù)目。NUM_INITAGENTS 保留為缺省值。

             

            代理程序的數(shù)目(MAXAGENTS、NUM_POOLAGENTS 和NUM_INITAGENTS)

            更改這些參數(shù)的命令:


            db2 -v update dbm cfg using MAXAGENTS a_value

            db2 -v update dbm cfg using NUM_POOLAGENTS b_value

            db2 -v update dbm cfg using NUM_INITAGENTS c_value

            db2 -v terminate


            代理程序的數(shù)目(MAXAGENTS、NUM_POOLAGENTS 和NUM_INITAGENTS)

            在運(yùn)行期間的任何時(shí)候,您都可以使用下面這個(gè)命令來獲取數(shù)據(jù)庫管理
            器的快照數(shù)據(jù):


            db2 -v get snapshot for dbm

            看一下下列輸出行:


            High water mark for agents registered = 4

            High water mark for agents waiting for a token = 0

            Agents registered = 4Agents waiting for a token = 0

            Idle agents = 0

            Agents assigned from pool = 5

            Agents created from empty pool = 4

            Agents stolen from another application = 0

            High water mark for coordinating agents = 4

            Max agents overflow = 0

            如果發(fā)現(xiàn)“Agents waiting for a token”或“Agents stolen from another
            application”不等于0,則可能需要增加MAXAGENTS 以允許數(shù)據(jù)庫管
            理器可以使用更多的代理程序。



            鎖(LOCKLIST、MAXLOCKS 和LOCKTIMEOUT)

            這些與鎖相關(guān)的控制都是數(shù)據(jù)庫配置參數(shù)。
            LOCKLIST 表明分配給鎖列表的存儲(chǔ)容量。每個(gè)數(shù)據(jù)庫都有一個(gè)鎖列表,鎖定
            是數(shù)據(jù)庫管理器用來控制多個(gè)應(yīng)用程序并發(fā)訪問數(shù)據(jù)庫中數(shù)據(jù)的機(jī)制。行和表
            都可以被鎖定。根據(jù)對象是否還持有其它鎖,每把鎖需要32 個(gè)或64 個(gè)字節(jié)
            的鎖列表:
            –需要64 個(gè)字節(jié)來持有某個(gè)對象上的鎖,在這個(gè)對象上,沒有持有其它鎖。
            –需要32 個(gè)字節(jié)來記錄某個(gè)對象上的鎖,在這個(gè)對象上,已經(jīng)持有一個(gè)鎖。
            MAXLOCKS 定義了應(yīng)用程序持有的鎖列表的百分比,在數(shù)據(jù)庫管理器執(zhí)行鎖
            升級之前必須填充該鎖列表。當(dāng)一個(gè)應(yīng)用程序所使用的鎖列表百分比達(dá)到
            MAXLOCKS 時(shí),數(shù)據(jù)庫管理器會(huì)升級這些鎖,這意味著用表鎖代替行鎖,從
            而減少列表中鎖的數(shù)量。當(dāng)任何一個(gè)應(yīng)用程序所持有的鎖數(shù)量達(dá)到整個(gè)鎖列表
            大小的這個(gè)百分比時(shí),對該應(yīng)用程序所持有的鎖進(jìn)行鎖升級。如果用一個(gè)表鎖
            替換這些行鎖,將不再會(huì)超出MAXLOCKS 值,那么鎖升級就會(huì)停止。否則,
            鎖升級就會(huì)一直進(jìn)行,直到所持有的鎖列表百分比低于MAXLOCKS。
            MAXLOCKS 參數(shù)乘以MAXAPPLS 參數(shù)不能小于100。
            雖然升級過程本身并不用花很多時(shí)間,但是鎖定整個(gè)表(相對于鎖定個(gè)別行)
            降低了并發(fā)性,而且數(shù)據(jù)庫的整體性能可能會(huì)由于對受鎖升級影響的表的后續(xù)
            訪問而降低。

             

            鎖(LOCKLIST、MAXLOCKS 和LOCKTIMEOUT)

            使用下列步驟確定鎖列表所需的頁數(shù):
            –計(jì)算鎖列表大小的下限:(512 * 32 * MAXAPPLS) / 4096,其中512 是
            每個(gè)應(yīng)用程序平均所含鎖數(shù)量的估計(jì)值,32 是對象(已有一把鎖)上每
            把鎖所需的字節(jié)數(shù)。
            –計(jì)算鎖列表大小的上限:(512 * 64 * MAXAPPLS) / 4096,其中64 是某
            個(gè)對象上第一把鎖所需的字節(jié)數(shù)。
            –對于您的數(shù)據(jù),估計(jì)可能具有的并發(fā)數(shù),并根據(jù)您的預(yù)計(jì)為鎖列表選擇
            一個(gè)初始值,該值位于您計(jì)算出的上限和下限之間。
            使用數(shù)據(jù)庫系統(tǒng)監(jiān)視器調(diào)優(yōu)MAXLOCKS 值。
            設(shè)置MAXLOCKS 時(shí),請考慮鎖列表的大小(LOCKLIST):
            –MAXLOCKS = 100 * (512 鎖/應(yīng)用程序* 32 字節(jié)/鎖* 2) /
            (LOCKLIST * 4096 字節(jié))
            –該樣本公式允許任何應(yīng)用程序持有的鎖是平均數(shù)的兩倍。如果只有幾個(gè)
            應(yīng)用程序并發(fā)地運(yùn)行,則可以增大MAXLOCKS,因?yàn)樵谶@些條件下鎖
            列表空間中不會(huì)有太多爭用。

             

            鎖(LOCKLIST、MAXLOCKS 和LOCKTIMEOUT)

            LOCKTIMEOUT 指定了應(yīng)用程序?yàn)楂@取鎖所等待的秒數(shù)。這有助于
            應(yīng)用程序避免全局死鎖。
            如果將該參數(shù)設(shè)置成0,那么應(yīng)用程序?qū)⒉坏却@取鎖。在這種情形
            中,如果請求時(shí)沒有可用的鎖,那么應(yīng)用程序立刻會(huì)接收到-911。
            如果將該參數(shù)設(shè)置成-1,那么將關(guān)閉鎖超時(shí)檢測。在這種情形中,
            應(yīng)用程序?qū)⒌却@取鎖(如果請求時(shí)沒有可用的鎖),一直到被授
            予了鎖或出現(xiàn)死鎖為止。
            在聯(lián)機(jī)事務(wù)處理(OLTP)環(huán)境中,這個(gè)值從30 秒開始。在只進(jìn)行
            查詢的環(huán)境中可以從一個(gè)更大的值開始。

             

            鎖(LOCKLIST、MAXLOCKS 和LOCKTIMEOUT)

            更改鎖參數(shù)的命令:


            db2 -v update db cfg for DB_NAME using LOCKLIST a_number

            db2 -v update db cfg for DB_NAME using MAXLOCKS b_number

            db2 -v update db cfg for DB_NAME using LOCKTIMEOUT c_number

            db2 -v terminate


            鎖(LOCKLIST、MAXLOCKS 和LOCKTIMEOUT)

            使用數(shù)據(jù)庫系統(tǒng)監(jiān)視器來確定是否發(fā)生鎖升級,跟蹤應(yīng)用程序(連接)遭遇鎖超時(shí)
            的次數(shù),或者數(shù)據(jù)庫檢測到的所有已連接應(yīng)用程序的超時(shí)情形。
            首先,運(yùn)行下面這個(gè)命令以打開針對鎖的DB2 監(jiān)視器:


            db2 -v update monitor switches using lock ondb2 -v terminate

            然后收集數(shù)據(jù)庫快照:


            db2 -v get snapshot for database on DB_NAME

            在快照輸出中,檢查下列各項(xiàng):


            Locks held currently = 0

            Lock waits = 0

            Time database waited on locks (ms) = 0

            Lock list memory in use (Bytes) = 504

            Deadlocks detected = 0

            Lock escalations = 0

            Exclusive lock escalations = 0

            Agents currently waiting on locks = 0

            Lock Timeouts = 0

            Internal rollbacks due to deadlock = 0

            如果“Lock list memory in use (Bytes)”超過定義的LOCKLIST 大小的50%,那么就
            增加LOCKLIST 的數(shù)量。鎖升級、鎖超時(shí)和死鎖將表明系統(tǒng)或應(yīng)用程序中存在某
            些潛在問題。
            鎖定問題通常表明應(yīng)用程序中存在一些相當(dāng)嚴(yán)重的并發(fā)性問題,在增大鎖列表參數(shù)
            的值之前應(yīng)當(dāng)解決這些問題。

             

            活動(dòng)應(yīng)用程序的最大數(shù)目(MAXAPPLS)

            MAXAPPLS 是一個(gè)數(shù)據(jù)庫配置參數(shù)。它指定了可以連接到數(shù)據(jù)庫的
            并發(fā)應(yīng)用程序(本地和遠(yuǎn)程)的最大數(shù)量。
            該參數(shù)值必須大于等于已連接應(yīng)用程序的數(shù)量,加上這些相同的應(yīng)用
            程序中完成兩階段提交或回滾過程中可能并發(fā)存在的數(shù)量的總和。
            在OLTP 應(yīng)用中,請確保將MAXAPPLS 的值設(shè)置正確,以容納最多
            的并發(fā)用戶/連接。
            對于那些使用連接池的應(yīng)用程序,可以將MAXAPPLS 的值設(shè)置成比
            連接池的大小大1 或2(這樣做只是為了以防需要調(diào)用命令行連接來
            同時(shí)做一些事情)。

             

            活動(dòng)應(yīng)用程序的最大數(shù)目(MAXAPPLS)

            更改MAXAPPLS 值的命令:


            db2 -v update db cfgfor DB_NAME using MAXAPPLS a_number

            db2 -v terminate

            當(dāng)應(yīng)用程序嘗試連接數(shù)據(jù)庫,但是連接到數(shù)據(jù)庫的應(yīng)用程序數(shù)已經(jīng)達(dá)
            到了MAXAPPLS 的值時(shí),會(huì)向應(yīng)用程序返回下面這個(gè)錯(cuò)誤,表明連
            接到該數(shù)據(jù)庫的應(yīng)用程序數(shù)已達(dá)到了最大值。


            SQL1040N The maximum number of applications is already
            connected to thedatabase. SQLSTATE=57030


            異步頁清除程序的數(shù)量(NUM_IOCLEANERS)

            NUM_IOCLEANERS 是一個(gè)數(shù)據(jù)庫配置參數(shù),指定數(shù)據(jù)庫的異步頁
            清除程序的數(shù)目。在數(shù)據(jù)庫代理程序需要緩沖池中的空間之前,這些
            頁清除程序?qū)⒕彌_池中已更改的頁寫到磁盤,這允許代理程序不必等
            待已更改頁被寫到磁盤就可以讀取新頁,提高應(yīng)用系統(tǒng)性能。
            如果將該參數(shù)設(shè)置成0,則不啟動(dòng)頁清除程序,結(jié)果,數(shù)據(jù)庫代理程
            序?qū)⒕彌_池中的所有頁寫到磁盤。該參數(shù)會(huì)對存儲(chǔ)在多個(gè)物理存儲(chǔ)設(shè)
            備上的單個(gè)數(shù)據(jù)庫的性能產(chǎn)生顯著影響,因?yàn)樵谶@種情況下其中某個(gè)
            設(shè)備極有可能處于空閑狀態(tài)。如果沒有配置頁清除程序,則應(yīng)用程序
            可能會(huì)遇到不時(shí)發(fā)生的“日志已滿”情況。
            如果連接到數(shù)據(jù)庫的應(yīng)用程序主要執(zhí)行更新數(shù)據(jù)的事務(wù),那么增加清
            除程序的數(shù)目會(huì)提高性能。
            增加頁清除程序的數(shù)量還會(huì)減少“軟”故障(比如斷電)的恢復(fù)時(shí)間,
            因?yàn)榇疟P上數(shù)據(jù)庫的內(nèi)容在任何給定時(shí)候都是比較新的。

             

            異步頁清除程序的數(shù)量(NUM_IOCLEANERS)

            設(shè)置該參數(shù)時(shí)要考慮的因素:
            –如果有多個(gè)事務(wù)針對數(shù)據(jù)庫運(yùn)行,則將該參數(shù)的值設(shè)置在1 到該數(shù)據(jù)庫
            所使用的物理存儲(chǔ)器的數(shù)量之間。
            –至少將該參數(shù)的值設(shè)置成您系統(tǒng)上CPU 的數(shù)量。
            –在具有高更新事務(wù)率的環(huán)境下,可能需要配置較多的頁清除程序。
            –在具有大緩沖池的環(huán)境下,也可能需要配置較多的頁清除程序。

             

            異步頁清除程序的數(shù)量(NUM_IOCLEANERS)

            更改該參數(shù)的命令:


            db2 -v update db cfg for DB_NAME using NUM_IOCLEANERS a_number

            db2 -v terminate

            使用數(shù)據(jù)庫系統(tǒng)監(jiān)視器,利用有關(guān)從緩沖池進(jìn)行寫操作的快照數(shù)據(jù)(或
            事件監(jiān)視器)信息來幫助您調(diào)優(yōu)該配置參數(shù)。
            當(dāng)使用快照和收集緩沖池的快照數(shù)據(jù)時(shí),監(jiān)控下列計(jì)數(shù)器:


            Buffer pool data writes = 0

            Asynchronous pool data page writes = 0

            Buffer pool index writes = 0

            Asynchronous pool index page writes = 0

            LSN Gap cleaner triggers = 0

            Dirty page steal cleaner triggers = 0

            Dirty page threshold cleaner triggers = 0


            異步頁清除程序的數(shù)量(NUM_IOCLEANERS)

            如果下面這兩個(gè)條件成立,減少NUM_IOCLEANERS:


            “Buffer pool data writes”約等于“Asynchronous pool data page writes”。

            “Buffer pool index writes”約等于“Asynchronous pool index page writes”。

            只要下面這兩個(gè)條件有一個(gè)成立,增加NUM_IOCLEANERS:


            “Buffer pool data writes”遠(yuǎn)遠(yuǎn)大于“Asynchronous pool data page writes”。

            “Buffer pool index writes”遠(yuǎn)遠(yuǎn)大于“Asynchronous pool index page writes”。

            Dirty page steal cleaner triggers 指出調(diào)用頁清除程序的次數(shù),為了有更好的響應(yīng)
            時(shí)間,該數(shù)值應(yīng)當(dāng)盡可能低。利用上面所示的計(jì)數(shù)器,可以使用下面的公式計(jì)算用
            該元素表示的所有清除程序調(diào)用的百分比:


            Dirty page steal cleaner triggers / (Dirty page steal cleaner triggers +
            Dirty page threshold cleaner triggers +
            LSN Gap cleaner triggers)

            如果該比率很高,則它可能表明您所定義的頁清除程序太少了。


            I/O 服務(wù)器的數(shù)目(NUM_IOSERVERS)

            該參數(shù)是一個(gè)數(shù)據(jù)庫配置參數(shù),用于指定數(shù)據(jù)庫的I/O 服務(wù)器的數(shù)目。
            諸如備份和恢復(fù)之類的實(shí)用程序使用I/O 服務(wù)器代表數(shù)據(jù)庫代理程序執(zhí)行
            預(yù)取I/O 和異步I/O。
            超過這個(gè)數(shù)量的預(yù)取和實(shí)用程序I/O 在任何時(shí)候都不能在數(shù)據(jù)庫中運(yùn)行。
            在啟動(dòng)I/O 操作時(shí),I/O 服務(wù)器處于等待狀態(tài)。
            由于從數(shù)據(jù)庫代理程序直接調(diào)度非預(yù)取I/O,因此非預(yù)取I/O 不受
            NUM_IOSERVERS 約束。
            在OLTP 環(huán)境中,使用缺省值就可以。
            更改NUM_IOSERVERS參數(shù)的命令:


            db2 -v update db cfg for DB_NAME using NUM_IOSERVERS a_number

            db2 -v terminate


            編入組的提交數(shù)目(MINCOMMIT)

            MINCOMMIT 是數(shù)據(jù)庫配置參數(shù),它讓您把將日志記錄寫到磁盤的工
            作一直延遲到執(zhí)行了最小數(shù)量的提交為止。
            該延遲有助于減少與寫日志記錄相關(guān)的數(shù)據(jù)庫管理器開銷。這意味著
            當(dāng)您針對數(shù)據(jù)庫運(yùn)行多個(gè)應(yīng)用程序并且在非常短的時(shí)間范圍內(nèi)應(yīng)用程
            序請求大量提交時(shí)可以提高性能。
            只有當(dāng)該參數(shù)值大于1 并且當(dāng)連接到數(shù)據(jù)庫的應(yīng)用程序數(shù)量大于或等
            于該參數(shù)值時(shí),才會(huì)發(fā)生這個(gè)提交分組。
            當(dāng)執(zhí)行提交分組時(shí),應(yīng)用程序提交請求會(huì)被掛起,直到時(shí)間過去1 秒
            或提交請求的數(shù)量等于該參數(shù)值。
            使用下面的命令更改MINCOMMIT 值:


            db2 -v update db cfg for DB_NAMEusing MINCOMMIT a_numberdb2 -v terminate


            編入組的提交數(shù)目(MINCOMMIT)

            MINCOMMIT 的缺省值為1。
            如果多個(gè)讀/寫應(yīng)用程序通常請求并發(fā)數(shù)據(jù)庫提交,則從缺省值開始
            遞增該參數(shù)值,這將產(chǎn)生更有效率的日志文件I/O,因?yàn)槭褂萌罩疚募?br />I/O 的次數(shù)比較少,而每次使用日志文件I/O 時(shí)所寫的日志記錄比較
            多。
            如果您認(rèn)為缺省值不夠大,可以從3 開始進(jìn)行調(diào)整,在3 的附近嘗試
            以查看性能對工作負(fù)載的影響。
            可以對每秒鐘的事務(wù)量進(jìn)行采樣,并調(diào)整該參數(shù)以適應(yīng)每秒鐘的峰值
            事務(wù)量(或者采用它的某個(gè)較大的百分比)。適應(yīng)峰值活動(dòng)使得在重
            負(fù)載期間寫日志記錄的開銷減到了最低。
            如果增大MINCOMMIT,可能還需要增大LOGBUFSZ 參數(shù)以避免在
            這些重負(fù)載期間強(qiáng)制將已滿的日志緩沖區(qū)寫入磁盤。在這種情況下,
            LOGBUFSZ 應(yīng)該等于:


            MINCOMMIT * (每個(gè)交易平均日志空間的使用量)


            編入組的提交數(shù)目(MINCOMMIT)

            計(jì)算每秒鐘的峰值事務(wù)數(shù):


            通過采用典型一天中的監(jiān)視器樣本,可以確定重負(fù)載時(shí)期。

            1. 在測量開始時(shí),發(fā)出下面這個(gè)命令:

            –db2 -v reset monitor for database db_name(這不會(huì)使高水位的計(jì)數(shù)器復(fù)位。)


            2. 在測量完畢后,發(fā)出下面這個(gè)命令:

            –db2 -v get snapshot for database on db_name


            3. 使用以下輸出來計(jì)算事務(wù)的峰值:

            Last reset timestamp = 06-12-2001 14:51:43.786876

            Snapshot timestamp = 06-12-2001 14:56:27.787088

            Commit statements attempted = 1011

            Rolback statements attempted = 10

            Log space used by the database (Bytes) = 3990

            4. 讓totalTransactions等于“commit statements attempted”和“rollback statements
            attempted”的總和。

            5. 讓totalElapsedTime(單位為秒)等于“Last reset timestamp”和“Snapshot
            timestamp”的差。

            6. 如下計(jì)算每秒事務(wù)數(shù):

            –NumOfTransPerSecond= totalTransactions/ totalElapsedTime

             

            編入組的提交數(shù)目(MINCOMMIT)

            計(jì)算每個(gè)事務(wù)所使用的日志空間:
            通過在一段時(shí)間內(nèi)對一些事務(wù)使用抽樣技術(shù),可以通過下面這個(gè)監(jiān)視器元
            素:log_space_used(所使用的工作日志空間單元)計(jì)算出使用的日志
            空間的平均值。


            1. 在測量開始時(shí)使用下面這個(gè)命令將感興趣的數(shù)據(jù)庫的監(jiān)視器復(fù)位:

            db2 -v reset monitor for database db_name.

            2. 在測量完畢后使用下面這個(gè)命令獲取快照:

            db2 -v get snapshot for database on db2_name.

            3. 使用下面這個(gè)公式計(jì)算出每個(gè)事務(wù)所使用的日志空間:

            LogSpaceUsedPerTrans= log_space_used/ totalTransactions

            伊人久久精品无码av一区| 99精品国产综合久久久久五月天| 国产精品99精品久久免费| 久久精品国产99国产精品澳门 | 93精91精品国产综合久久香蕉| 亚洲乱亚洲乱淫久久| 日日狠狠久久偷偷色综合免费| 久久久精品国产| 热99re久久国超精品首页| 久久婷婷午色综合夜啪| 国产精品美女久久久久AV福利| 97精品伊人久久久大香线蕉| 丁香五月综合久久激情| 无码久久精品国产亚洲Av影片 | 影音先锋女人AV鲁色资源网久久| 99久久综合狠狠综合久久| 波多野结衣AV无码久久一区| 久久国产成人午夜aⅴ影院| 久久久一本精品99久久精品66| 亚洲国产精品成人久久蜜臀| 久久久久亚洲av无码专区导航| 亚洲午夜无码AV毛片久久| 久久婷婷久久一区二区三区| 久久人爽人人爽人人片AV| 亚洲国产成人久久综合区| 久久亚洲国产精品123区| 大美女久久久久久j久久| 97精品伊人久久久大香线蕉 | 国产亚洲精品自在久久| 国内精品人妻无码久久久影院导航| 久久久噜噜噜久久| 一级做a爰片久久毛片人呢| 97久久久精品综合88久久| 无码人妻精品一区二区三区久久久 | 亚洲精品乱码久久久久久久久久久久| 香蕉久久永久视频| 亚洲欧美久久久久9999 | 亚洲伊人久久大香线蕉综合图片| 久久九九久精品国产免费直播| 中文精品99久久国产| 国产aⅴ激情无码久久|