免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8197 | 回复: 16

自己写的检查数据库中表的extents数及相应处理的shell [复制链接]

论坛徽章:
0
发表于 2004-09-03 00:00 |显示全部楼层
平时经常要监测数据库中各表的情况,于是写了两个shell,用起来蛮方便。。。

一、检查数据库中所有的表的extents数并输出到文件中。输出的文件中,表是按extents数目大小倒序排列。
>;cat check_extents.sh

  1. today=`date +%Y%m%d%H%M%S`
  2. dbaccess - <<EOF >; sql_tab_ext_${today}.txt
  3. database sysmaster;
  4. select dbsname,tabname,
  5. count(*) num_of_extents,
  6. sum( pe_size ) total_size
  7. from systabnames,sysptnext
  8. where partnum = pe_partnum
  9. group by 1, 2
  10. order by 3 desc,4 desc;
  11. EOF
复制代码


二、如发现表的extents过大,可采取下列步骤
0。dbschema 导出表结构
1。rename 原表名
2。以原结构新建表,但增大extents和next size
3。unload出原表数据
4。dbload 数据到新表

例如发现表t_prox_pb_log的extents过大,可以这样:
0.dbschema -t t_prox_pb_log -d dbname -ss t_prox_pb_log.sql
1-4步可以写成pblog.sh如下:
>;cat pblog.sh
(表结构用第0步生产的结构即可)

  1. dbaccess  << -- 2>;>;pblog.err
  2. !
  3. database dbname;
  4. rename table t_prox_pb_log to t_pb_log_bak;

  5. create table t_prox_pb_log
  6.   (
  7.     oper_kind char(3) not null ,
  8.     oper_detail char(6) not null ,
  9.     trn_mode char(1) not null ,
  10.     user_no1 char(20) not null ,
  11.     cust_name char(40) not null ,
  12.     trn_amt float,
  13.     cert_no integer,
  14.     cert_num integer,
  15.     trn_code char(4),
  16.     trn_date char(8),
  17.     trn_time char(6),
  18.     trn_bank char(4),
  19.     oper_no char(4),
  20.     seq_no smallint,
  21.     trn_stat char(1),
  22.     primary key (trn_date,trn_bank,oper_no,seq_no)
  23.   ) extent size 2048 next size 1024 lock mode row;
  24. revoke all on t_prox_pb_log from "public";

  25. create index i_prox_pb_log2 on t_prox_pb_log (user_no1);


  26. unload to "t_pb_log.txt" select * from t_pb_log_bak;
  27. !
  28. --
  29. dbload -d dbname -c load_log -l dbload_errlog -n 1000  -k

复制代码

控制文件load_log如下:
>; cat load_log
FILE t_pb_log.txt DELIMITER '|' 15;
INSERT INTO t_prox_pb_log;

论坛徽章:
0
发表于 2004-09-06 12:08 |显示全部楼层

自己写的检查数据库中表的extents数及相应处理的shell

不错
不过表的 extent应该是在数据库设计的时候就规划的

论坛徽章:
0
发表于 2004-09-09 16:10 |显示全部楼层

自己写的检查数据库中表的extents数及相应处理的shell

前几天从尚洋的一位工程师手里看到这篇文章,原来是楼主写的,总结的不错哦!
补充两句,官方finderr里建议重建表的时候,把初始extents设成整个表那么大,也就是一个extent就放进整个表。然后next extents设成初始extents的1/4 ~ 1/16。
大家试试~

论坛徽章:
0
发表于 2004-09-09 16:17 |显示全部楼层

自己写的检查数据库中表的extents数及相应处理的shell

原帖由 "czw1413_cn" 发表:
不错
不过表的 extent应该是在数据库设计的时候就规划的


理论上是这样,可惜我们都太懒了,开发人员设计表的时候没有注意,数据库管理员创建表的时候也没有理睬,结果数据库里面都是默认的extent设置。
我决定下次重建数据库好好整一下,呵呵~

论坛徽章:
0
发表于 2004-09-09 22:40 |显示全部楼层

自己写的检查数据库中表的extents数及相应处理的shell

不错啊。。学习ing 。。

论坛徽章:
0
发表于 2004-09-10 11:40 |显示全部楼层

自己写的检查数据库中表的extents数及相应处理的shell

原帖由 "cruelsun" 发表:


理论上是这样,可惜我们都太懒了,开发人员设计表的时候没有注意,数据库管理员创建表的时候也没有理睬,结果数据库里面都是默认的extent设置。
我决定下次重建数据库好好整一下,呵呵~


我们有一个版本的数据库,这方面做得很差,性能不好,
后来重新搞这个东西费了我好大的劲啊,吃力不讨好。
下一个版本的时候,在上线前花的大工夫彻底整了一遍
库表的分片和存储管理,这下子就好多了。
各位DBA这方面的工夫还可真是不能省....  :em11: .

论坛徽章:
0
发表于 2004-09-10 15:21 |显示全部楼层

自己写的检查数据库中表的extents数及相应处理的shell

原帖由 "cruelsun" 发表:
前几天从尚洋的一位工程师手里看到这篇文章,原来是楼主写的,总结的不错哦!
补充两句,官方finderr里建议重建表的时候,把初始extents设成整个表那么大,也就是一个extent就放进整个表。然后next extents设成初始..........

呵呵,一摸一样吗?那就巧了,我可不认识尚洋的工程师呢。。。

论坛徽章:
0
发表于 2004-09-12 17:22 |显示全部楼层

自己写的检查数据库中表的extents数及相应处理的shell

不错,收藏!多发点这样的文章

论坛徽章:
0
发表于 2004-09-13 11:48 |显示全部楼层

自己写的检查数据库中表的extents数及相应处理的shell

原帖由 "lianyong" 发表:

呵呵,一摸一样吗?那就巧了,我可不认识尚洋的工程师呢。。。


真的是一摸一样哦,可能是他来我们之前到CU恶补了一下,结果成了楼主的fans。。。

论坛徽章:
0
发表于 2004-09-13 11:53 |显示全部楼层

自己写的检查数据库中表的extents数及相应处理的shell

有个问题:
我将一张表重建了一次,初始extents设得比整张表都大,next extents设成原大小的1/10,为什么重建之后这张表占了6个extents呢?而表的大小比原来减少了。

占用extents的个数和表的大小是根据楼主的SQL语句。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP