使用DB2 System Catalog Views獲取統計信息

前陣子另外一個團隊的同事想獲取生產數據庫的一些信息(空表,行數之類的), 因此就花了點時間調查DB2自己是如何提供數據庫元數據的。發現藉助DB2 System Catalog Views 能夠幫助咱們比較輕鬆地統計一些數據庫信息數據庫

找到全部空表

SELECT tabname FROM SYSCAT.TABLES WHERE tabschema='SCHEMA_NAME' AND type='T' AND card=0;

注:SCHEMA NAME必須是大寫bash

列出表裏的未使用的字段

SELECT tabname, colname, colcard, high2key FROM syscat.columns WHERE tabschema='SCHEMA_NAME' AND (
    colcard=0 
    OR ( 
        colcard=1 AND 
        ( high2key='' OR high2key='''''' ) 
    )
);

統計某個schema下全部表的實時行數的一個小腳本

趕時間隨手寫的,見笑了優化

#!/bin/bash
SCHEMA=$1
DBNAME=$2
: ${SCHEMA:="DB2INST1"}

db2 connect to $DBNAME

echo "" > /tmp/rownumber.txt

for t in `db2 -x "select tabname from syscat.tables where tabschema = '$SCHEMA' and type = 'T'"`;
do db2 "select '{', '$t', '}', '{', count(1), '}' from $SCHEMA.$t" >> /tmp/rownumber.txt;
done

awk '/{*}/ {print $2,$5}' /tmp/rownumber.txt > /tmp/tables.txt

統計信息應該是被及時更新,由於這些信息可能會被用來幫助優化器優化查詢之類,不許確的統計數據有可能反而形成反效果code

查看DB2是否開啓AUTO_RUNSTATS

首先鏈接到目標數據庫 db2 connect to DB_NAME
而後執行 db2 get db config | grep runstatsdb2 get db cfg | grep runstats
若是開啓的話會看到
Automatic runstats (AUTO_RUNSTATS) = ON
若是是OFF,可以使用命令 db2 update db cfg using auto_runstats on 開啓get

可是統計是須要時間的,尤爲數據量達到百萬級以上的時候,不少數據庫可能就不會選擇開啓自動計算統計信息了,這時想獲取最新的統計信息咱們能夠選擇手動方式it

手動 runstats

假如發現某個表的統計信息比較老,可手動更新那個表的信息(更新syscat.*內的信息)
db2 runstats on table table_name with distribution and detailed indexes allio

相關文章
相關標籤/搜索