中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行DB2性能調節工作分析

發布時間:2021-12-30 11:06:36 來源:億速云 閱讀:137 作者:柒染 欄目:云計算

如何進行DB2性能調節工作分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

近期負責了Metric項目的服務器性能維護,對DB2的性能調節做了些研究。整體感覺數據庫調優的關鍵點應該還是在建庫階段,好的查詢更能得到更好的性能。而后期對數據庫參數等的調節結果并不是非常明顯的。  
1,Monitoring

db2 get database manager monitor switches  
//顯示監視開關的情況  
db2 update dbm cfg using DFT_MON_BUFPOOL ON DFT_MON_LOCK ON  
db2 update dbm cfg using DFT_MON_SORT ON DFT_MON_STMT ON  
db2 update dbm cfg using DFT_MON_TABLE ON DFT_MON_UOS ON  
db2 terminate  
db2stop  
db2start  
//在實例級打開監視開關,這樣隨著實例的重啟,開關生效  
db2 get database manager monitor switches  
db2 get monitor switches  
//發現實例級和下面的數據庫監視開關都打開了  
db2 deacivate database tp1  
db2 activate database tp1  
//重新激活數據庫,刷新監視數據  
select agent_id,rows_read,rows_written,rows_selected,rows_inserted from sysibmadm.snapappl  
//監視每個代理讀寫查詢的情況,如果read的數量遠高于select的數量,考慮是不是缺少索引  
//在我的工作中,很少遇到寫多的情況,所以對這方面也沒深入  
db2 get snapshot for tables on tp1 > sntab1.txt  
//接下來監視tp1數據庫下所有表的讀寫啦  
##下一步,就是抓到那個有大量讀大于寫的表,然后提取該表上的查詢SQL  
##這里就要考慮兩種情況了,是靜態的還是動態的  
##@@@靜態的,從包里提取  
db2bfd -s sqltp1st.bnd  
##@@@動態的,可以用snapshot SQL STATEMENT抓取,這里不寫了

//然后就要提取出我們關注的大量讀的查詢SQL  
//我不太喜歡這部,累眼睛,還煩瑣!!!如果有大量查詢SQL,還需要想辦法自己找出  
db2 describe indexes for table acct show detail  
//然后就是從提出的SQL中找到表,從表中看有沒有索引,沒有的話,新建  
##之后呢,就可以從訪問計劃中看索引有沒有生效  
##靜態SQL可以用db2expln從包里弄,本人比較喜歡db2exfmt,因為動靜SQL都可以弄  
##后面有db2exfmt關于動靜的例子,我比較習慣把SQL statement拿出來  
##然后放進文本里,db2expln -d GTSSTGMS -f SQL.txt -g -z \; -o GTSSTGMS_sort.txt  
##或者,db2 connect to tp1  
##db2 set current explain mode explain  
##db2 set current explain snapshot explain  
##db2 "select name,address from acct where ......"  
##db2exfmt -l -d tp1 -o extp2.txt => vi extp2.txt


############2,Talespace and I/O Performance##################  
db2 select bpname,bufferpoolid,npages,pagesize from syscat.bufferpools  
//查看數據庫的緩沖池,syscat.bufferpools中的bufferpoolid字段和sysibmadm.snapdb_memory_pool  
//的pool_secondary_id是關聯的,從后一張表中記載著用戶用戶間的緩沖池和系統自建的緩沖池  
//CURRENT_SIZE 當前大小;POOL_CONFIG_SIZE 設置大小;HIGH_WATERMARK 最高記錄;  
//我發現,這和使用 db2pd -db GTSSTGMS -mempools是對應的 PhySz PhyUpBnd PhyHWM  
//使用  db2pd -db GTSSTGMS -memset,將同類內存集合并計算  
//在這里插一段緩沖池自調節功能介紹  
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
下面我們創建示例緩沖池MYBP1,其使用自調整功能(注意其create bufferpool語句使用了automatic),初始大小為400K,具體如清單4所示:  
創建使用自動自調整功能的示例緩沖池MYBP1  
db2 create bufferpool mybp1 immediate size 100  automatic  pagesize 4k  
db2 "select BPNAME, NPAGES from sysibm.sysbufferpools"  
當緩沖池啟用了自調整功能時,該特定緩沖池的 sysibm.sysbufferpools 表中的 NPAGES 字段將設置為 -2。當自調整功能處于禁用狀態時,NPAGES 字段將設置為緩沖池的當前大小。  
db2 alter bufferpool mybp2 immediate size 100 automatic  
表空間在讀大數據的時候,給表空間指定緩沖區是沒有用的。這種情況下,DB2會利用直接I/O去接觸大數據。  
db2 create bufferpool BP8K size 1000 pagesize 8k  
db2 create system temporary tablespace TMP8K pagesize 8k managed by system using ('TMP8K') EXTENTSIZE 8 PREFETCHSIZE 8 bufferpool BP8K  
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
###接下來呢,當然是看命中率了 當然可以用 db2 get snapshot for database on tp1  
###這里介紹另外一個方法  
select data_physical_reads,index_physical_reads,total_physical_reads,bp_name from sysibmadm.bp_hitratio where bp_name not like 'IBMSYSTEM%'

select data_logical_reads,index_logical_reads,total_logical_reads,bp_name from sysibmadm.bp_hitratio where bp_name not like 'IBMSYSTEM%'

select data_hit_ratio_percent,index_hit_ratio_percent,total_hit_ratio_percent,bp_name from sysibmadm.bp_hitratio where bp_name not like 'IBMSYSTEM%'  
//上面這樣可以檢測每一個緩沖器的命中率情況  
###接下來,看一下緩沖器的讀寫情況  
select substr(bp_name,1,15) as bp_name,total_physical_reads,average_read_time_ms from sysibmadm.bp_read_io where bp_name not like 'IBMSYSTEM%'

select substr(bp_name,1,15) as bp_name, total_write,average_write_time_ms from sysibmadm.bp_write_io where bp_name not like 'IBMSYSTEM%'  
//那個bufferpool比較忙,用于那個表空間,該表空間有哪些表,檢查。。。

###下面檢查表空間  
select pool_data_p_reads as Total_Data_Reads, Pool_async_data_reads as Asynch_Data_Reads, pool_async_read_time from sysibmadm.snapbp where bp_name='IBMDEFAULTBP'

select pool_async_data_read_reqs as Data_Prefetch_Requests, decimal(POOL_ASYNC_DATA_READS)/decimal(POOL_ASYNC_DATA_READ_REQS) as Data_Page_Per_Prefetch, pages_from_block_ios from sysibmadm.snapbp where bp_name='IBMDEFAULTBP'

###其中DATA_PAGES_PER_PREFETCH要match上extent size,為了得到extent size,  
###(最好打開Automatic Prefetch size,這樣自動計算數值NUM of Containers * Extent Size)使用  
db2 get snapshot for tablespace on tp1  
###最好將IOSERVERS和IOCLEANERS設為自動  
db2 get db cfg show detail | grep NUM_IO  
NUM_IOSERVERS AUTOMATIC?  
NUM_IOCLEANERS AUTOMATIC?


############3,Memory Management##################  
###當然是要看內存當前使用了  
db2 deactivate db tp1  
db2 activate db tp1  
db2 connect to tp1

db2mtrk -d -v  
db2pd -db tp1 -mempools  
db2pd -db tp1 -memsets  
//這里就不多說了,好多我也不明白,明白的具體情況具體分析

############4,Memory Management##################  
db2 get snapshot for database on tp1 | grep -i sort  
//需要看一下total sorts和Sort Overflows的情況  
//如果sort heap不夠用的話,會用臨時表空間  
//可以snapshot一下這個臨時表空間  
//特別注意Buffer pool temprorary data logical reads和Buffer pool temporary data physical reads  
//Buffer pool data writes,Asynchronous pool data page writes  
###接下來就要估一下sortheap是否夠用  
db2expln -d tp1 -f sortquery.sql -g -z \; -o expsort.txt  
###這里主要看Rows * Row Width 和 sortheap大小


############5,Access plan(Optimizer plan)##################  
Monitor ----- Static SQL  
cd $HOME/sqllib/bin  
db2 connect to tp1  
db2 bind sqltp1st.bnd explain yes explsnap yes  
db2exfmt -l -d tp1 -n SQLTP1ST -# / -o exptp1.txt

sort heap size * 4K(PAGE) 和 numrows*rowwidth(BYTE) 比較大小,來決定sort heap size  
PCTFREE & FREEPAGE => 1) 只讀表,如果對于一個表沒有任務更新活動,那么可以將定義為沒有空余空間,而且也沒有任何比較reorg,因為不會產生分頁。  
Monitor ----- Dynamic SQL  
cd $HOME/sqllib/bin  
db2 connect to tp1  
db2 set current explain mode explain  
db2 set current explain snapshot explain  
db2 "select name,address from acct.where acct_grp < 50 order by name"  
 

db2exfmt -l -d tp1 -o extp2.txt

insert優化

你的問題比較簡單,我個人認為,db2插入6000條數據,肯定30秒之內,我建議你做如下的調整:

1、update db cfg using logfilsz 51200

2、update db cfg using logbufsz 1024

3、你插入的6000條數據從哪里來的,怎么插入的,也就是說,如果你的insert 后面使用的是select,那么你要看看你的select本是是不是很慢

4、把你的insert語句中所有涉及到的表,適用下面的語句執行一下:

db2 reorg table <tabschema>.<tabname>

db2 runstats on table <tabschema>.<tabname> with distribution and detailed indexes all

5、如果你的表空間使用的bufferpool太小,那么必須增加你的bufferpool,適用db2 "select bpname,pagesize,npages from syscat.bufferpools"命令查看你的bufferpool總大小,然后在保證所有bufferpool總合不超過1G的情況下,盡量增加buffer的大小,調整bufferpool的大小使用db2 "alter bufferpool ibmdefaultbp size 51200"

關于如何進行DB2性能調節工作分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

db2
AI

郸城县| 峡江县| 隆昌县| 通州区| 海晏县| 岳阳县| 绍兴市| 玛沁县| 衢州市| 名山县| 桓台县| 杂多县| 闻喜县| 平邑县| 五指山市| 卓尼县| 当涂县| 双峰县| 白银市| 辽宁省| 唐河县| 惠州市| 汝南县| 嫩江县| 普兰店市| 无棣县| 沛县| 长兴县| 寻甸| 荔浦县| 昌乐县| 青浦区| 汤原县| 班玛县| 中阳县| 哈密市| 南昌县| 都江堰市| 团风县| 华亭县| 凌源市|