免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6232 | 回复: 5
打印 上一主题 下一主题

大表alter为何占用rootdbs空间? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-16 15:03 |显示全部楼层 |倒序浏览
50w记录的表,表大概2G多,包含byte字段,对其中一个varchar字段扩位
alter table t1 modify ( col1 varchar(9) );
事先已经关闭数据库日志

时间较长,onstat -d观察rootdbs可用空间不断减少,最后alter语句报错,为啥会占用rootdbs空间呢?

>time sh alter.sh

Database selected.


  618: Error on copying blob data.

  131: ISAM error: no free disk space
Error in line 1
Near character position 56

Database closed.

=====================
IBM161:informix:/home/informix>onstat -d|grep rootdbs
70000002016ee50  1        0x1        1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   141918            PO-   /home/informix/dbs/rootdbs

IBM161:informix:/home/informix>onstat -d|grep rootdbs
70000002016ee50  1        0x1        1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   117310            PO-   /home/informix/dbs/rootdbs

IBM161:informix:/home/informix>onstat -d|grep rootdbs
70000002016ee50  1        0x1        1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   95294             PO-   /home/informix/dbs/rootdbs

IBM161:informix:/home/informix>onstat -d|grep rootdbs
70000002016ee50  1        0x1        1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   42046             PO-   /home/informix/dbs/rootdbs

。。。。

论坛徽章:
0
2 [报告]
发表于 2009-01-16 16:05 |显示全部楼层

回复 #2 我是DBA 的帖子

有的,alter应该没有排序动作吧,会占用tmp么?

Informix Dynamic Server Version 9.30.FC2R1   -- On-Line -- Up 05:57:22 -- 690320 Kbytes

Dbspaces
address          number   flags      fchunk   nchunks  flags    owner    name
70000002016ee50  1        0x1        1        7        N        informix rootdbs
700000021108ae0  2        0x1        11       1        N        informix phylogdbs
700000021108c58  3        0x1        12       1        N        informix logdbs
700000021108dd0  4        0x2001     13       1        N T      informix tempdbs
700000021109028  5        0x1        8        5        N        informix datadbs
5 active, 2047 maximum

Chunks
address          chk/dbs offset   size     free     bpages   flags pathname
70000002016f028  1   1   0        500000   141918            PO-   /home/informix/dbs/rootdbs
70000002016f520  2   1   0        500000   174               PO-   /home/informix/dbs/datadbs2
70000002016f6a8  3   1   0        500000   422               PO-   /home/informix/dbs/datadbs3
70000002016f830  4   1   0        500000   115               PO-   /home/informix/dbs/logdbs
70000002016f9b8  5   1   0        450000   581               PO-   /home/informix/dbs/datadbs1
70000002016fb40  6   1   0        500000   565               PO-   /home/informix/dbs/datadbs4
70000002016fcc8  7   1   0        500000   425               PO-   /home/informix/dbs/datadbs5
70000002016fe50  8   5   0        512000   43535             PO-   /home/informix/dbs/datadbs6
700000021108028  9   5   0        512000   505145            PO-   /home/informix/dbs/datadbs7
7000000211081b0  10  5   0        512000   511997            PO-   /home/informix/dbs/datadbs8
700000021108338  11  2   0        512000   11897             PO-   /home/informix/dbs/phylogdbs
7000000211084c0  12  3   0        512000   159933            PO-   /home/informix/dbs/161logdbs
700000021108648  13  4   0        512000   511647            PO-   /home/informix/dbs/161tmpdbs
7000000211087d0  14  5   0        512000   511981            PO-   /home/informix/dbs/datadbs9
700000021108958  15  5   0        512000   511997            PO-   /home/informix/dbs/datadbs10

论坛徽章:
0
3 [报告]
发表于 2009-01-16 16:24 |显示全部楼层
刚才做了一张10w记录的表 alter,结构一样,不会有问题,rootdbs一点没动,奇怪了

>time sh alterwa2.sh

Database selected.


Table altered.



Database closed.


real    2m16.94s
user    0m0.02s
sys     0m0.03s


=================

IBM161:informix:/home/informix/test>onstat -d|egrep 'rootdbs|tmpdbs'
70000002016ee50  1        0x1001     1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   141918            PO-   /home/informix/dbs/rootdbs
700000021108648  13  4   0        512000   511647            PO-   /home/informix/dbs/161tmpdbs
IBM161:informix:/home/informix/test>onstat -d|egrep 'rootdbs|tmpdbs'
70000002016ee50  1        0x1001     1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   141918            PO-   /home/informix/dbs/rootdbs
700000021108648  13  4   0        512000   511631            PO-   /home/informix/dbs/161tmpdbs
IBM161:informix:/home/informix/test>onstat -d|egrep 'rootdbs|tmpdbs'
70000002016ee50  1        0x1001     1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   141918            PO-   /home/informix/dbs/rootdbs
700000021108648  13  4   0        512000   511551            PO-   /home/informix/dbs/161tmpdbs
IBM161:informix:/home/informix/test>onstat -d|egrep 'rootdbs|tmpdbs'
70000002016ee50  1        0x1001     1        7        N        informix rootdbs
70000002016f028  1   1   0        500000   141918            PO-   /home/informix/dbs/rootdbs
700000021108648  13  4   0        512000   511647            PO-   /home/informix/dbs/161tmpdbs

论坛徽章:
0
4 [报告]
发表于 2009-01-19 09:28 |显示全部楼层
建表的时候没指定dbspace,但建库的时候指定了datadbs的,应该没问题吧,最后一个字段byte型
执行的sql就是 alter table wastebook1 modify ( transerialid varchar(9) );

{ TABLE "informix".wa1 row size = 193 number of columns = 16 index size = 315 }
create table "informix".wa1
  (
    frontid varchar(1),
    transerialid varchar(7),
    serviceserialid varchar(2),
    frontrecycle varchar(,
    sourcenodeid varchar(10) not null ,
    channelsys varchar(10),
    channelwasteid varchar(19),
    channelrecycle varchar(,
    tranid varchar(6),
    servicesys varchar(10),
    servicewasteid varchar(19),
    servicerecycle varchar(,
    serviceid varchar(10),
    transtatus varchar(1) not null ,
    flowstatus varchar(1) not null ,
    servicedata byte
  );
revoke all on "informix".wa1 from "public";



create unique index "informix".tranindex3_1 on "informix".wa1
    (transerialid,serviceserialid,frontrecycle,frontid) using
    btree ;
create unique index "informix".tranindex3_2 on "informix".wa1
    (channelwasteid,serviceserialid,channelsys,channelrecycle)
    using btree ;
create index "informix".tranindex3_3 on "informix".wa1 (frontrecycle)
    using btree ;
create index "informix".tranindex3_4 on "informix".wa1 (frontrecycle,
    transerialid) using btree ;
create index "informix".tranindex3_5 on "informix".wa1 (servicesys,
    servicewasteid,servicerecycle) using btree ;
create index "informix".tranindex3_6 on "informix".wa1 (servicewasteid,
    servicerecycle,servicesys,serviceid) using btree ;

论坛徽章:
0
5 [报告]
发表于 2009-01-19 13:42 |显示全部楼层

回复 #10 我是DBA 的帖子

也就是说如果没有专门的 blob空间,我做alter时候,blob字段数据会占用rootdbs?
可我alter的是其他varchar2的字段啊

alter table ** modify ( transerialid varchar(9) );

论坛徽章:
0
6 [报告]
发表于 2009-01-22 16:50 |显示全部楼层

回复 #15 日月如尧 的帖子

原来是 onload的时候,没指定表空间,放到root里面去了,
对于DDL建表,如果不指定,他应该会放到db创建的时候指定的dbs中,如不指定,就是rootdbs
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP