• <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)計值更新--runstats
            調(diào)整Buffer pool
            調(diào)整日志緩沖區(qū)大小
            應(yīng)用程序堆大小
            排序堆大小和排序堆值
            代理程序的數(shù)目

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


            統(tǒng)計信息更新

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

             

            統(tǒng)計信息更新

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


            reorgchk update statistics

            當(dāng)您不完全知道所有表名或表名實在太多時,進(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實用程序

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


            db2 -v runstats on table TAB_NAME and indexes all

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


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


            調(diào)整Bufferpool大小

            緩沖池是內(nèi)存中的一塊存儲區(qū)域,用于臨時讀入和更改數(shù)據(jù)頁(含表行或索引
            項)。緩沖池的用途是為了提高數(shù)據(jù)庫系統(tǒng)的性能。
            缺省情況下,應(yīng)用程序使用緩沖池IBMDEFAULTBP,它是在創(chuàng)建數(shù)據(jù)庫時創(chuàng)
            建的。當(dāng)SYSCAT.BUFFERPOOLS 目錄表中該緩沖池的NPAGES 值為-1
            時,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ù)所決定,運行:


            db2 -v connect to DB_NAME

            db2 -v SELECT * from SYSCAT.BUFFERPOOLS

            db2 -v connect reset

            db2 -v terminate

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


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

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


            db2 -v update monitor switches using bufferpool on

            db2 -v get monitor switches

            --運行程序–

            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ù)庫停止運行,同時所有快照統(tǒng)計信息將會丟失。

             

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

            在數(shù)據(jù)庫快照或緩沖池快照的快照輸出中,查找下列“logical reads”和“physical
            reads”,這樣就可以計算出緩沖池命中率,它可以幫助您調(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

            按如下計算緩沖池命中率:


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

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

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

             

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

             

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

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

             

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

            LOGBUFSZ的缺省值為8(4KB 頁),這對于OLTP 數(shù)據(jù)庫而言通
            常不夠大。LOGBUFSZ 的最佳值為128 個或256 個4KB 頁。
            可以使用下面這個命令來更改該參數(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 太多時,意味著需要一個較大的
            LOGBUFSZ。

             

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

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


            db2 -v update db cfg for DB_NAME using applheapsz 256

            db2 -v terminate

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

             

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

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

             

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

            要更改SORTHEAP 和SHEAPTHRES 的值,可以運行如下命令:


            db2 -v update db cfg for DB_NAME using SORTHEAP a_value

            db2 -v update dbmcfgusing SHEAPTHRES b_value

            db2 -v terminate

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

             

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

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


            db2 -v update monitor switches using sort on

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

            db2 -v get snapshot for database on DBNAME

            看一下下面這個示例中的輸出:


            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ù)該輸出,計算每個事務(wù)的排序數(shù)目、計算溢出了可用于排序的內(nèi)
            存的那部分排序的百分比。


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

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

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

             

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

            建議:

            使用合適的索引使排序堆的使用降到最低。
            當(dāng)需要頻繁進(jìn)行大型排序時,增加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è)置的SORTHEAP 參數(shù)最大值的倍數(shù)。該參
            數(shù)至少應(yīng)當(dāng)是實例中任何數(shù)據(jù)庫所定義的最大SORTHEAP 的兩倍。

             

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

            這些是數(shù)據(jù)庫管理器配置參數(shù)。
            MAXAGENTS 參數(shù)表明在任何給定時間接受應(yīng)用程序請求的數(shù)據(jù)庫管理器代理
            程序的最大數(shù)目。MAXAGENTS 的值應(yīng)當(dāng)至少是每個被并發(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)
            前的請求后將終止運行而不是返回給代理程序池。如果該參數(shù)的值為0,將按照
            需要創(chuàng)建代理程序,在代理程序執(zhí)行完自己當(dāng)前的請求后終止運行。
            要避免因在并發(fā)連接許多應(yīng)用程序的OLTP 環(huán)境中頻繁創(chuàng)建和終止代理程序而產(chǎn)
            生的成本,請將NUM_POOLAGENTS 的值增加到接近MAXAGENTS 值。
            NUM_INITAGENTS 參數(shù)決定空閑代理程序的初始數(shù)量,這些代理程序是在
            DB2START 時在代理程序池中創(chuàng)建的。指定初始代理程序數(shù)目要合適。
            在大多數(shù)情況下,將MAXAGENTS 和NUM_POOLAGENTS 的值設(shè)置成略微大
            于并發(fā)應(yīng)用程序連接的最大預(yù)計數(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)

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

             

            鎖(LOCKLIST、MAXLOCKS 和LOCKTIMEOUT)

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

             

            鎖(LOCKLIST、MAXLOCKS 和LOCKTIMEOUT)

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

             

            鎖(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ù)據(jù)庫檢測到的所有已連接應(yīng)用程序的超時情形。
            首先,運行下面這個命令以打開針對鎖的DB2 監(jiān)視器:


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

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


            db2 -v get snapshot for database on DB_NAME

            在快照輸出中,檢查下列各項:


            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ù)量。鎖升級、鎖超時和死鎖將表明系統(tǒng)或應(yīng)用程序中存在某
            些潛在問題。
            鎖定問題通常表明應(yīng)用程序中存在一些相當(dāng)嚴(yán)重的并發(fā)性問題,在增大鎖列表參數(shù)
            的值之前應(yīng)當(dāng)解決這些問題。

             

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

            MAXAPPLS 是一個數(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)用命令行連接來
            同時做一些事情)。

             

            活動應(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 的值時,會向應(yīng)用程序返回下面這個錯誤,表明連
            接到該數(shù)據(jù)庫的應(yīng)用程序數(shù)已達(dá)到了最大值。


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


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

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

             

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

            設(shè)置該參數(shù)時要考慮的因素:
            –如果有多個事務(wù)針對數(shù)據(jù)庫運行,則將該參數(shù)的值設(shè)置在1 到該數(shù)據(jù)庫
            所使用的物理存儲器的數(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ù)時,監(jiān)控下列計數(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)

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


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

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

            只要下面這兩個條件有一個成立,增加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ù)值應(yīng)當(dāng)盡可能低。利用上面所示的計數(shù)器,可以使用下面的公式計算用
            該元素表示的所有清除程序調(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ù)是一個數(shù)據(jù)庫配置參數(shù),用于指定數(shù)據(jù)庫的I/O 服務(wù)器的數(shù)目。
            諸如備份和恢復(fù)之類的實用程序使用I/O 服務(wù)器代表數(shù)據(jù)庫代理程序執(zhí)行
            預(yù)取I/O 和異步I/O。
            超過這個數(shù)量的預(yù)取和實用程序I/O 在任何時候都不能在數(shù)據(jù)庫中運行。
            在啟動I/O 操作時,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īng)用程序并且在非常短的時間范圍內(nèi)應(yīng)用程
            序請求大量提交時可以提高性能。
            只有當(dāng)該參數(shù)值大于1 并且當(dāng)連接到數(shù)據(jù)庫的應(yīng)用程序數(shù)量大于或等
            于該參數(shù)值時,才會發(fā)生這個提交分組。
            當(dāng)執(zhí)行提交分組時,應(yīng)用程序提交請求會被掛起,直到時間過去1 秒
            或提交請求的數(shù)量等于該參數(shù)值。
            使用下面的命令更改MINCOMMIT 值:


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


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

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


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


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

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


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

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

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


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

            –db2 -v get snapshot for database on db_name


            3. 使用以下輸出來計算事務(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. 如下計算每秒事務(wù)數(shù):

            –NumOfTransPerSecond= totalTransactions/ totalElapsedTime

             

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

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


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

            db2 -v reset monitor for database db_name.

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

            db2 -v get snapshot for database on db2_name.

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

            LogSpaceUsedPerTrans= log_space_used/ totalTransactions

            久久久久免费看成人影片| 久久亚洲国产中v天仙www| 久久精品一区二区| 波多野结衣AV无码久久一区| 久久亚洲国产精品五月天婷| 91精品国产91久久久久福利| 久久综合精品国产二区无码| 99久久国产亚洲综合精品| 色偷偷91久久综合噜噜噜噜| 九九久久精品国产| 久久久久无码专区亚洲av| 国产三级精品久久| 久久久久99精品成人片三人毛片| 久久夜色tv网站| 国产精品欧美久久久久天天影视 | 亚洲伊人久久大香线蕉苏妲己| 久久亚洲AV成人无码| 久久www免费人成看片| 久久精品中文无码资源站| 日韩精品久久久久久免费| 日韩精品久久无码中文字幕| 久久ZYZ资源站无码中文动漫| 国产精品无码久久综合| 国产成人精品久久| 亚洲成av人片不卡无码久久| 久久精品国产乱子伦| 久久国产乱子伦免费精品| 99久久精品国产毛片| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久久久久亚洲精品成人| 久久久精品午夜免费不卡| 国产免费福利体检区久久| 久久久久波多野结衣高潮| 综合久久国产九一剧情麻豆| 99久久婷婷国产综合亚洲| 亚洲午夜无码AV毛片久久| 国产精品久久精品| 思思久久99热只有频精品66| 人人狠狠综合久久亚洲婷婷| 亚洲日本久久久午夜精品| 伊人久久综在合线亚洲2019|