DB2維護(hù)0724

維護(hù)管理相關(guān)

1.表空間監(jiān)控

  • db2 list tablespaces
  • db2 list tablespaces containers for <tablespace_id>
  • db2pd -d <db_name> -tablespaces
  • db2 get snapshot for tablespaces on <db_name> sysibmadm.snaptbsp和sysibmadm.snapcontainer管理視圖

2.表空間類型:

SMS,DMS,自動(dòng)存儲(chǔ)管理,SMS不支持表空間容器的更改,只能更改表空間容器所在文件系統(tǒng)的大小 DMS提供了下面幾種更改表空間的方法
ADD新增容器     
DROP刪除容器
Extend 用來(lái)擴(kuò)展已有容器大小    
Reduce 用來(lái)減小已有容器大小
Resize 重新設(shè)定容器大小
db2 "alter tablespace tbs_data extend (FILE '/data1/tbs_data/cont0' 15M,FILE '/data1/tbs_data/cont1' 15M)" --新增30M 
db2 "alter tablespace tbs_data Reduce (FILE '/data1/tbs_data/cont0' 15M,FILE '/data1/tbs_data/cont1' 15M)" --減小30M 
db2 "alter tablespace tbs_data Resize (FILE '/data1/tbs_data/cont0' 15M,FILE '/data1/tbs_data/cont1' 15M)" --變?yōu)?0M 
db2 "alter tablespace tbs_data drop   (FILE '/data1/tbs_data/cont0')"  --刪除容器(不能刪除最后一個(gè)容器!) 
db2 "alter tablespace tbs_data add    (FILE '/data1/tbs_data/cont0' 15M)"  --新增容器

3.表空間狀態(tài):db2tbst 0X0040

DML操作性能問(wèn)題

1.DML操作性能問(wèn)題(INSERT,SELECT,UPDATE,DELETE)

SELECT:

  1. 在查詢的連接或條件子句中的相關(guān)字段是否加了索引
  2. 看緩沖池的大小,緩沖池太小會(huì)造成很多數(shù)據(jù)不能讀到緩沖池而直接從硬盤(pán)上讀取,造成很大的瓶頸另一方面關(guān)于緩沖池預(yù)取的設(shè)置,一般能將預(yù)取大小(PREFETCHSIZE)設(shè)定為區(qū)段大小與容器個(gè)數(shù)的積,這樣可以最大利用到預(yù)取的并行性
  3. 在查詢中涉及到order by字句時(shí),如果排序的字段沒(méi)有設(shè)置索引那么排序?qū)?huì)用到內(nèi)存中的排序堆(sortheap)如果排序堆過(guò)小會(huì)造成排序溢出到硬盤(pán)上(Overflowed)造成性能衰退
  4. 同時(shí)還要考慮到RUNSTATS/REORG因素
  5. 從存儲(chǔ)方面應(yīng)當(dāng)注意的是選取裸設(shè)備的DMS要比SMS性能要好,因?yàn)樗倭艘粚游募到y(tǒng)的緩沖而直接訪問(wèn)緩沖池

2.增刪改的性能優(yōu)化方法:

  1. 首先是索引因素,在做增刪改時(shí)數(shù)據(jù)庫(kù)會(huì)對(duì)表中的索引做相應(yīng)的修改。這會(huì)消耗一定的資源,所以在保證數(shù)據(jù)完整性的前提下可以先將索引刪除,待到增刪改結(jié)束后再重建這些索引。這也會(huì)節(jié)省一些時(shí)間。將索引和數(shù)據(jù)放在不同的硬盤(pán)上也可以增加寫(xiě)操作的并行性
  2. 其次要考慮日志因素,在數(shù)據(jù)寫(xiě)操作的同時(shí),數(shù)據(jù)庫(kù)系統(tǒng)也在維護(hù)著事務(wù)日志,所以應(yīng)盡量減少日志維護(hù)的代價(jià)Log file size (4KB) (LOGFILSIZ) =156072 ##定義了每個(gè)日志文件的大小增大LOGBUFSZ,LOGFILSZ可以減少刷新日志的次數(shù)以及日志文件切換的次數(shù)或者將表的屬性改為”ACTIVATE NOT LOGGED INITIALLY”,這樣可以屏蔽表的日志操作,以提高寫(xiě)操作的性能,但是失去事務(wù)日志的表的數(shù)據(jù)很難修復(fù),這一點(diǎn)需要權(quán)衡

查看表大小

1.查表大?。簊yscat.tables大小就是用NPAGES*PAGESIZE就可以了

  • CARD-指出表中數(shù)據(jù)行的數(shù)量
  • NPAGES-指出包含數(shù)據(jù)的頁(yè)面總量Number of pagescontaining rows
  • FPAGES—指出分配給這個(gè)表的頁(yè)面總量 Number of pagesbeing used by a table
  • OVERFLOW-指出溢出行的數(shù)量

給一個(gè)范例:

SELECT A.TABSCHEMA, A.TABNAME,A.TBSPACE, B.PAGESIZE, A.NPAGES, DECIMAL(B.PAGESIZE*A.NPAGES/1024/1024, 20,5)TABLESIZE
 FROMSYSCAT.TABLES A
 LEFT JOINSYSCAT.TABLESPACES B
 ONA.TBSPACEID=B.TBSPACEID
 WHERE TABNAMELIKE '%TABLE%' AND TYPE='T' ORDER BY A.TBSPACE

這句可以計(jì)算名稱包含“TABLE”的每張表所使用的空間,NPAGES是表使用的表空間頁(yè)數(shù),

乘以對(duì)應(yīng)表空間的PAGESIZE就可以算出一張表的大小,至于想要針對(duì)某個(gè)模式名或者其他變化就自己調(diào)整一下語(yǔ)句,或者增加一些GROUPBY

db2 "select NPAGES,FPAGES from syscat.tables where tabname='ZB_ZMCCCALL57520120715'

d2b "SELECT TABNAME,SUM(DATA_OBJECT_P_SIZE)/1024FROM TABLE (SYSPROC.ADMIN_GET_TAB_INFO('DW',TABNAME')) AS T 

GROUP BY TABNAME";

那用SYSIBMADM.ADMINTABINFO管理視圖,速度慢

db2pd -db dbname -tcbstats其中datasize字段用來(lái)表示表的頁(yè)數(shù),乘以頁(yè)大小即為表的大小

elect funcname from syscat.functions where funcschema='SYSPROC' and funcname like 'SNAPSHOT_%' with ur;

Reorg/runstats

1.reorg+runstats

db2 reorg table EMPLOYEE
db2 runstats on table db2inst2.employee with distribution and detailed indexes all

db2 reorg table department
db2 runstats on table db2inst2.department with distribution and detailed indexes all

A classic table reorganization (offline reorganization)rebuilds the indexes during the last phase of the reorganization. When more than one temporary table spaceexists, it is possible that a temporary table space in addition to the one specified on the REORG TABLEcommand may be utilized for additional sorts that can accompanying table reorg processing. However,the inplace table reorganization (onlinereorganization) does not rebuild the indexes. It is recommended that youissue a REORG INDEXES command after the completion of an inplacetable reorganization. An inplace table reorganization isasynchronous, therefore care must be taken to ensure that the inplacetable reorganization is complete before issuing the REORG INDEXES command. Issuing the REORG INDEXES command before the inplace table reorganization is complete, might cause the reorganization to fail (SQLCODE -2219).

注意:

在indexrebuild階段force reorg,之后隨便一個(gè)進(jìn)程執(zhí)行SELECT語(yǔ)句就會(huì)帶是INDEXREBUILD,而且這個(gè)進(jìn)程還會(huì)對(duì)那張表加上一個(gè)Z鎖,所謂的超級(jí)排他鎖,其他進(jìn)程如果也想SELECT查詢就會(huì)進(jìn)入LOCK-WAIT狀態(tài)。之前就是不知道Z鎖是怎么產(chǎn)生的,結(jié)果鬧了不少麻煩事。

reorg:階段

SORT、BUILD、REPLACE、IDXRECREAT(有z鎖)

well, replace phase is

  1. copy extentsfrom temp space to user tablespace if it's reorg using temp

  2. repointing theobject table to the new reorganized copy if it's not reorg using temp...

監(jiān)視r(shí)eorg執(zhí)行過(guò)程

select

substr(tabname, 1, 15) as tab_name,substr(tabschema, 1, 15) as tab_schema, reorg_phase,

substr(reorg_type, 1, 40) as reorg_type, reorg_status, reorg_completion,

dbpartitionnum from sysibmadm.snaptab_reorg

order by dbpartitionnum

數(shù)據(jù)庫(kù)監(jiān)控KPI指標(biāo)

1.緩沖池命中率

db2 "select substr(BP_NAME,1,16) BP_NAME,TOTAL_HIT_RATIO_PERCENT from sysibmadm.bp_hitratio"

命中率不高解決辦法

1.增大緩沖池,最好能夠達(dá)到數(shù)據(jù)量的10%

2.針對(duì)不同的應(yīng)用使用不同的緩沖池

2.有效索引讀

db2inst1@db2server:~> db2 "select rows_read,rows_selected,rows_read/(rows_selected+1) as IREF from sysibmadm.SNAPDB"

   ROWS_READ              ROWS_SELECTED         IREF
-------------------- -------------------- --------------------
     13596                 2978                    4
1 record(s)selected.
OLTP<5

解決辦法:

1.根據(jù)語(yǔ)句為表設(shè)計(jì)合理索引

2.反復(fù)校準(zhǔn)確認(rèn)能夠使用匹配索引掃描

3.平均結(jié)果集

平均每條查詢語(yǔ)句所返回的結(jié)果集行數(shù)

db2inst1@db2server:~> db2"select rows_read,select_sql_stmts,rows_read/(select_sql_stmts+1) as avg_result_set from sysibmadm.SNAPDB"

    ROWS_READ           SELECT_SQL_STMTS    AVG_RESULT_SET

-------------------- -------------------- --------------------

        13618                 1005                   13

1record(s) selected

4.排序溢出

db2inst1@db2server:~> db2"select sort_overflows,total_sorts,sort_overflows/(total_sorts+1) as avg_sort_overflow from sysibmadm.SNAPDB"

  SORT_OVERFLOWS      TOTAL_SORTS         AVG_SORT_OVERFLOW
-------------------- -------------------- --------------------
    0                   24                    0

1record(s) selected.

解決辦法:

  • 盡量為orderby/group by的謂詞創(chuàng)建索引
  • 盡量避免為排序字段使用索引
  • sortheap盡量能夠大于所排序的行數(shù)

5.同步讀取比例-read

通過(guò)索引直接訪問(wèn)數(shù)據(jù)叫同步IO,對(duì)OLTP異步讀越少越好,否則對(duì)CPU利用率較高。對(duì)OLAP來(lái)說(shuō)預(yù)取多一點(diǎn)比較好。

解決辦法:

部署合適的索引,減少異步讀取時(shí)候的預(yù)取

db2inst1@db2server:~> db2"select100-(((POOL_ASYNC_DATA_READS+POOL_ASYNC_INDEX_READS)*100)/(POOL_DATA_P_READS+POOL_INDEX_P_READS+1))as SRP from sysibmadm.snapdb"

  SRP
--------------------
  97
1record(s) selected.

6.數(shù)據(jù)索引頁(yè)清除-write

頁(yè)面清除程序?qū)?shù)據(jù)寫(xiě)入磁盤(pán)的效率

db2inst1@db2server:~> db2"select(POOL_ASYNC_DATA_WRITES+POOL_ASYNC_INDEX_WRITES+POOL_ASYNC_XDA_WRITES)/(POOL_DATA_WRITES+POOL_INDEX_WRITES+POOL_XDA_WRITES+POOL_ASYNC_DATA_WRITES+POOL_ASYNC_INDEX_WRITES+POOL_ASYNC_XDA_WRITES+1)as async_write_ratio from sysibmadm.snapdb"

 ASYNC_WRITE_RATIO

 --------------------
       0

 1record(s) selected.

7.包緩存命中率

理想值是100%

db2inst1@db2server:~> db2 "selectPKG_CACHE_INSERTS,PKG_CACHE_LOOKUPS,(1-PKG_CACHE_INSERTS/PKG_CACHE_LOOKUPS)*100pkg_hitratio from sysibmadm.snapdb"

   PKG_CACHE_INSERTS   PKG_CACHE_LOOKUPS    PKG_HITRATIO

-------------------- -------------------- --------------------

         78                 1702                  100

1record(s) selected.

8.編目緩沖區(qū)命插入比率

理想值是0

db2inst1@db2server:~> db2 "selectCAT_CACHE_INSERTS,CAT_CACHE_LOOKUPS,CAT_CACHE_INSERTS/CAT_CACHE_LOOKUPS as cat_insert_ratio from sysibmadm.snapdb"

CAT_CACHE_INSERTS   CAT_CACHE_LOOKUPS   CAT_INSERT_RATIO
-------------------- -------------------- --------------------

      40                 4105                    0

1 record(s)selected.

9.臟頁(yè)偷取

當(dāng)緩沖池不夠容納新頁(yè)面時(shí),就選擇一個(gè)臟頁(yè)將其寫(xiě)入磁盤(pán)。臟頁(yè)偷取屬于同步寫(xiě)入,對(duì)數(shù)據(jù)庫(kù)是個(gè)負(fù)擔(dān),應(yīng)當(dāng)減少。

db2inst1@db2server:~> db2"select POOL_DRTY_PG_STEAL_CLNS from sysibmadm.snapdb"

POOL_DRTY_PG_STEAL_CLNS

-----------------------
         0

1 record(s) selected

? OLTP的值應(yīng)該小于10.

解決辦法:

通過(guò)調(diào)整NUM_IOCLEANERS,softmax,chngpgs_thres的值,讓改值處于一個(gè)合理范圍

10.緩沖池讀取IO響應(yīng)時(shí)間

 ```sql

db2inst1@db2server:~> db2"select substr(TBSP_NAME,1,16)TBSP_NAME,POOL_READ_TIME/(POOL_DATA_PREADS+POOL_TEMP_DATA_PREADS+POOL_INDEX_P_READS+POOL_TEMP_INDEX_P_READS+1) tsormsfrom sysibmadm.snaptbsp"
TBSP_NAME TSORMS
---------------- --------------------
SYSCATSPACE 2
TEMPSPACE1 0
USERSPACE1 0
IBMDB2SAMPLEREL 1
IBMDB2SAMPLEXML 0
5 record(s)selected.
```

DB2組件

DB2的底層組件主要有OSS組件、BSU組件、CCI組件、RDS組件、DMS組件、IXM組件、BPS組件、DPS組件等

Fourth Position Letters Type of Activity indicated
b Bufferpool management and
c Communications between clinets and
d Data management
e Database engine processes
o Operating system calls
p Data protection
r Realational database services
s Sorting operations
x Indexing operations

1.組件:OSS

  • 負(fù)責(zé)DB2和OS之間的工作交互
  • 內(nèi)存管理:啟動(dòng)實(shí)例、數(shù)據(jù)庫(kù)和應(yīng)用程序時(shí),DB2需要向操作系統(tǒng)去申請(qǐng)共享內(nèi)存
  • I/O管理:當(dāng)DB2進(jìn)行文件的I/O讀取訪問(wèn)時(shí),OSS組件負(fù)責(zé)磁盤(pán)訪問(wèn)
  • DB2相應(yīng)進(jìn)程和線程的創(chuàng)建于管理
  • 安全認(rèn)證【db2ckpwd】:使用db2ckpwd進(jìn)程到操作系統(tǒng)文件/etc/passwd和/etc/security/passwd中驗(yàn)證用戶名和密碼 錯(cuò)誤日志輸出
2014-03-11-23.32.44.321745-240 E5279E576           LEVEL: Warning
PID     : 35581                TID  : 140680089298688PROC : db2sysc 0
INSTANCE: db2inst1             NODE : 000
EDUID   : 1                    EDUNAME: db2sysc 0
FUNCTION: DB2 UDB, oper system services, sqloSystemControllerMain, probe:100
DATA #1 : String, 242 bytes
Address Space Layout Randomization (ASLR) is enabled in this environment.
ASLR may cause intermittent failures in shmat() for any processes other than
db2sysc, and is recommended to be disabled.  To disable it, set
kernel.randomize_va_space=0

2.組件:BSU

  • Base Services Utilities,BSU[SQLE]
  • 為實(shí)例和數(shù)據(jù)庫(kù)分配內(nèi)存,攔截和處理信號(hào),并處理發(fā)送到DB2的異常 。就是DB2的底層引擎—發(fā)動(dòng)機(jī)
  • 在DB2啟動(dòng)的時(shí)候啟動(dòng)所有相關(guān)的進(jìn)程、線程和其它相關(guān)的EDU,并分配實(shí)例和數(shù)據(jù)庫(kù)所需的內(nèi)存

3.組件:DPS

  • Data Pretection Services,DPS[SQLP]
  • 交易管理、處理數(shù)據(jù)庫(kù)日志和數(shù)據(jù)庫(kù)并發(fā)服務(wù)
  • 負(fù)責(zé)將日志緩沖區(qū)的記錄寫(xiě)到日志文件中

4.其他組件

組件名 作用
Commen Client, CCI[SQLC] 處理通信協(xié)議;當(dāng)客戶端通過(guò)相應(yīng)的編程接口API連接數(shù)據(jù)庫(kù)時(shí)要通過(guò)該組件。這個(gè)組件在DB2后臺(tái)主要是通過(guò)DRDA來(lái)實(shí)現(xiàn)的,所以通常是先通過(guò)DB2RA通信接口來(lái)實(shí)現(xiàn)通信。
Relation Data Services,RDS [SQLR] 用來(lái)優(yōu)化和處理SQL語(yǔ)句
構(gòu)造查詢?cè)L問(wèn)計(jì)劃APM
Data Management Services,DMS [SQLD] 用來(lái)處理數(shù)據(jù)并返回?cái)?shù)據(jù);按照RDS獲得查詢?cè)L問(wèn)計(jì)劃
Index Management Component,IXM[SQLI] 對(duì)DB2中的所有索引進(jìn)行管理
Bufferpool Services,BPS[SQLB] 負(fù)責(zé)從磁盤(pán)中將數(shù)據(jù)頁(yè)和索引頁(yè)讀取到內(nèi)存緩沖區(qū)中

HANG住時(shí)分析

解決方法圖:

BufferPool定義的太大, 無(wú)法連接數(shù)據(jù)庫(kù)

如果是BufferPool定義的太大, 無(wú)法分配造成的數(shù)據(jù)庫(kù)不能連接, 可以嘗試用下面的步驟來(lái)解決:

  1. 用DB2實(shí)例Owner的用戶登錄到系統(tǒng),

  2. 執(zhí)行下面的命令來(lái)設(shè)置環(huán)境變量DB2_OVERRIDE_BPF

    db2setDB2_OVERRIDE_BPF=number-of-pages

    其中number-of-pages為頁(yè)數(shù), 應(yīng)該是一個(gè)較小的, 操作系統(tǒng)可以分配的值, 如5000; 下一次DB2數(shù)據(jù)庫(kù)連接以激活數(shù)據(jù)庫(kù)時(shí), DB2系統(tǒng)會(huì)嘗試按照此參數(shù)指定的大小來(lái)分配BUFFERPOOL;

  3. 執(zhí)行db2 terminate,

    運(yùn)行命令db2connect to db來(lái)建立數(shù)據(jù)庫(kù)連接; 由于我們已經(jīng)設(shè)置了DB2_OVERRIDE_BPF環(huán)境變量, 此連接應(yīng)該可以成功;

  4. 連接建立后,不要做其他操作, 立刻修改bufferpool;

    db2 alter bufferpool bufferpool-name size number-of-pages

  5. 為了使得我們修改的新buffer pool的大小可以生效, 需要先運(yùn)行命令 db2 connect reset 斷開(kāi)當(dāng)前的連接;

  6. 運(yùn)行命令 db2set DB2_OVERRIDE_BPF=以去掉該環(huán)境變量, 使得我們配置的新的buffer pool的大小可以生效;

  7. 重新連接數(shù)據(jù)庫(kù)

刪除有小寫(xiě)字母表的方法

刪除有小寫(xiě)字母表的方法:

db2 => connect to sample      
Database Connection Information
Databaseserver = DB2/LINUXX8664 10.1.3
SQL authorizationID = DB2INST2
Local databasealias = SAMPLE
db2 => drop table "EMP_TESTACZI4ko"          
DB20000I  The SQLcommand completed successfully.

或者用下面方法:

hadrinst@linux-nhmg:~> db2 drop table \" EMP_TESTACZI4ko \"
DB20000I  The SQLcommand completed successfully.

bin用戶禁用安裝DB2失敗

場(chǎng)景:開(kāi)發(fā)反饋風(fēng)險(xiǎn)緩釋項(xiàng)目申請(qǐng)了一臺(tái)測(cè)試環(huán)境的虛擬機(jī),原先只裝了WAS,現(xiàn)因需求變化要另裝DB2客戶端。

但我們?cè)诎惭b過(guò)程中一直報(bào)這個(gè)錯(cuò),能幫忙看下是什么原因嗎?

查看日志提示如下:

ERROR: The output will be saved in /tmp/db2chgpath.log.16360 DBI1149E You have to be the ownerof the install copy to execute this program. ERROR: An error occurred whilesetting DB2 runtime path. Contact a technical service representative. 

原因如下:

/etc/passwd 里bin用戶被禁用,DB2安裝失敗

DB2 HADR介紹

  1. 技術(shù)成熟、可靠,滿足同城及異地災(zāi)備需要
  2. 備庫(kù)性能或故障對(duì)主庫(kù)的影響盡可能最小
  3. 網(wǎng)絡(luò)擁塞或不穩(wěn)定情況下,對(duì)主庫(kù)性能影響盡可能小
  4. 實(shí)施便捷、成本經(jīng)濟(jì)

HADR同步模式-4種

模式 主庫(kù)何時(shí)發(fā)送日志頁(yè) 主庫(kù)何時(shí)落實(shí)應(yīng)用事務(wù)
同步 成功地將日志頁(yè)寫(xiě)入主數(shù)據(jù)庫(kù)日志磁盤(pán)后 日志已寫(xiě)入主數(shù)據(jù)庫(kù)上的日志文件; 主數(shù)據(jù)庫(kù)已接收到來(lái)自備用數(shù)據(jù)庫(kù)的應(yīng)答,確定日志也已寫(xiě)入備用數(shù)據(jù)庫(kù)上的日志文件時(shí)。
準(zhǔn)同步 以并行方式寫(xiě)日志頁(yè)并發(fā)送它們 日志已寫(xiě)入主數(shù)據(jù)庫(kù)上的日志文件; 主數(shù)據(jù)庫(kù)已接收到來(lái)自備用系統(tǒng)的應(yīng)答,確定日志也已寫(xiě)入備用系統(tǒng)上的內(nèi)存時(shí)。
異步 日志的寫(xiě)操作和發(fā)送操作是并行進(jìn)行的 主數(shù)據(jù)庫(kù)已將日志記錄傳遞給主系統(tǒng)主機(jī)的 TCP 層時(shí); 主系統(tǒng)不會(huì)等待來(lái)自備用系統(tǒng)的應(yīng)答。
超級(jí)異步(9.7新功能) 日志的寫(xiě)操作和發(fā)送操作是并行進(jìn)行的 日志記錄已寫(xiě)入主數(shù)據(jù)庫(kù)上的日志文件時(shí); 主系統(tǒng)不會(huì)等待來(lái)自備用系統(tǒng)的應(yīng)答。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容