使用DB2 System Catalog Views获取统计信息

本文介绍了如何利用DB2SystemCatalogViews来统计数据库元数据,包括查找所有空表、列出表里未使用的字段及统计实时行数的方法。还提供了手动更新统计信息的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前阵子另一个团队的同事想获取生产数据库的一些信息(空表,行数之类的), 所以就花了点时间调查DB2本身是如何提供数据库元数据的。发现借助DB2 System Catalog Views 可以帮助我们比较轻松地统计一些数据库信息

找到所有空表
SELECT tabname FROM SYSCAT.TABLES WHERE tabschema='SCHEMA_NAME' AND type='T' AND card=0;

注:SCHEMA NAME必须是大写

列出表里的未使用的字段
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

统计信息应该是被及时更新,因为这些信息可能会被用来帮助优化器优化查询之类,不准确的统计数据有可能反而造成反效果

查看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 开启

但是统计是需要时间的,尤其数据量达到百万级以上的时候,很多数据库可能就不会选择开启自动计算统计信息了,这时想获取最新的统计信息我们可以选择手动方式

手动 runstats

假如发现某个表的统计信息比较老,可手动更新那个表的信息(更新syscat.*内的信息)
db2 runstats on table table_name with distribution and detailed indexes all

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值