- 浏览: 308092 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
z390174504:
恩,确实,我也遇到了,好像是库冲突了,我在一个库项目中,单独引 ...
VerifyError: Error #1053: Illegal override of… -
cl1154781231:
您好,为什么使用tk-filter不用过滤*.gzip???我 ...
ExtJS使用gzip压缩 -
YY008871:
仅限ie下登录成功或失败吗?
单点登录—基于cookie的简单实现(IE) -
蛋的懒蛋:
不好用啊,IE7是运行了,但是就是一启动就报错了,接着就关了 ...
IE7绿色版下载-转载 -
fireinwind:
harman001 写道 ,为什么我的id大写同样没事啊!- ...
Spring配置文件中id的第二个字母不能大写问题
informix9.4表空间满问题,extent size小,重建表结构,设置extent size,倒数据到新表中:
1.
unload to 100000.unl select * from 表1
load from 100000.unl insert into 表2
2.
CREATE TABLE 表(
id SERIAL NOT NULL,
exe_id INTEGER,
exe_response LVARCHAR(3000),
exe_exception VARCHAR(10),
exe_fid INTEGER,
exe_man VARCHAR(160),
exe_manid VARCHAR(30),
exe_time VARCHAR(60),
display_name VARCHAR(255),
real_name VARCHAR(255),
remark VARCHAR(255),
PRIMARY KEY(id)
)
EXTENT SIZE 1100 NEXT SIZE 10240
LOCK MODE ROW
3.rename table 表1 to 表2
关于IBM Informix数据库中两个基本概念(任何大型数据库的Page和Extent的含义都是一样的,无论是Oracle,DB2,甚至垃圾的Microsoft SQL-Server):
Page:是一最基本的I/O单位。一个 page的大小是由OS来决定的,有2K的,也有4K的。我们拿2K的来举例说明。一个page有2048个bit,页头由24bit组成,页尾有一个 4bit的时间戳,也就是说每一个page剩余的空间只有2020个bit,另外在每一个page上还有一个槽表,一个槽表4bit,一条记录对应一个槽 表,这样在每一个page上存放的记录数就可以定下来。说这些的目的是为了说明在我们建表的时候尽量表不要建的太大,有的表一条记录的大小就超过了一个 page,这样在读取的效率上并不是太高。另外还有一个FILLFACTOR的参数决定了数据页的填充程度,如果此值设置的不是太合理,经常上现节点分裂 的情况,那对表的读取效率肯定是有影响的。
Extent:是磁盘上连续page的一组 集合。在每个extent内的page都是连续的,在表中默认的 extent的大小是16K,extent&的大小决定了表中数据存放的集中程度。如果数据存放的过与分散在做磁盘I/O的时间肯定会变长,一般 的情况下每个表的extent的大小建议不要超过50,如果太大,就需要做合理的调整。另外不能不提的是在随着extent数目的增长,每次分出的空间的 大小是不不一样的,在每到16的时候,就翻倍。例如第一个extent是16K,第17个extent就是32K,第33个就是64K了,在翻倍的增长。
首先,这是IBM官方PDF教程中关于Extent Size的叙述:
1. Estimate the number of rows that you want to store initially.
2. Add the widths of all columns in the table to calculate the row size.
Add four bytes for the slot table entry. The result is rowsize.
For each Text and Byte column, whether stored in the table or in a blobspace, add
56 bytes to the rowsize. Tables that contain LVARCHAR, TEXT, VARCHAR and
BLOB columns located in the table are impossible to size accurately. You can use
the maximum possible size or an average size, but the resulting row size is always
an estimate.
3. Subtract 28 from the total size of a page, pagesize, to account for the header and footer
timestamp that appears on the page. The result is the usable space on the page, pageuse.
4. If rowsize is less than or equal to pageuse:
number of data pages = number of rows/maxrows,
where
maxrows = min(pageuse/rowsize, 255)
If rowsize is greater than pageuse, the database server divides the row between pages.
The initial portion of the row is the homepage. Subsequent portions are stored in
remainder pages.
The size of the table is calculated as
number of data pages = number of homepages +
# of remainder pages
5. Calculate the total space required in kilobytes:
(number of data pages * pagesize)/1024
To calculate an appropriate NEXT SIZE value for successive extents allocated for the table,
apply steps 1 through 5, but instead of using the initial number of rows, use the number of rows
by which you anticipate the table will grow over a period of time. Also, be sure to consider how
much disk space you have available and whether or not you plan to add additional disks to the
system at a specific time.
这是ChinaUNIX上一"高人"的解释:
1,确定行数.(当前+增长)=总行数
2,确定每行长度:全字段长
3,rowsize=全字段长+4 bye(slot table)
4,确定每页可以存放多少rows:2020/rowsize
#2020=2048-28 是page减去(页头+timestamp)
5,确定需要多少页
First Extent=总行数/rows per pages
Next Extent=增长/rows per pages
6,确定空间
First Extent Size=First Extent *2(页大小)
Next Extent Size=Next Extent *2 (页大小)
IBM官方PDF教程上的一个例子:
Example
Assume that your table initially has 1,000,000 rows and is expected to grow
between 10 percent and 30 percent per year. Also, assume that you have budgeted
to purchase more disks in 12 months and that you will reload your database to
distribute it over existing and new devices at that time.
Given these assumptions, you might want to size additional extents to hold
100,000 rows. If your table grows at 10 percent per year, the database server only
allocates one extent during the year. If your table grows at 30 percent, the database server
might have to allocated 3 or 4 additional extents. In either case, the number of extents
allocated will be small enough to avoid affecting performance, or the need to reorganize your
table, before the scheduled maintenance period.
I本人觉得,要想真正搞懂,还要再看得细点儿...
以下是BM官方网站上的帮助文档中关于Extent Size的Calculating的叙述:
区段大小
区段(extent)是磁盘上一块物理位置连续的页面,用以存储数据库对象。在创建表时,默认的区段大小是 16 KB。这对于大多数据库表通常都太小。在填满了一个区段时,Informix 服务器将自动分配更多区段,直到它具有足够的区段来存储整个表中的数据。为了获得高性能,Informix 文档建议将一个表中的所有数据置于一、两个较大的区段中,而不是将它们置于许多较小的区段中。给出这样的建议有两个原因:
* 如果一个表有一个以上区段,则无法保证这些区段是连续的;区段可能分散在这个表驻留的整个数据库空间(dbspace)中。物理磁盘页面的连续性对于性能是至关重要的。当数据页面连续时,用于访问磁盘上数据的时间是最少的,数据库也可以连续读取行。如果表中有太多的区段,那么这些区段极有可能是交错的。这将大大损害性能,因为当您为某个表检索数据时,磁盘头需要查找同属于该表的大量非连续的区段,而非不是查找一个包含连续物理页面的大型区段。这极大地降低了磁盘寻址(disk-seeking)速度。
* 另一个原因是为了避免自动分配表的区段,这是一个代价极高的操作,将使用大量系统资源,例如 CPU 和内存。
为了实现 Informix 文档的建议,在创建表时,需要指定区段大小,不让 Informix 服务器使用 16 KB 的默认区段大小。CREATE TABLE 语句中的 EXTENT SIZE 和 NEXT SIZE 子句允许您指定 Informix 服务器将分配给所创建的每一个表的第一个和第二个区段大小。
但是,如何估算区段大小呢?这是一项很困难的任务,特别是对于 OLTP 数据库,要不断在这个数据库中更新和插入表。实质上,您需要知道该表将包含的行数、行的大小和系统的页大小。然后,必须对那些数字进行一些数学运算。 Informix 文档为我们提供了关于完成这项工作的详细指南:
* 确定每个索引的长度。
* 确定索引的总长度。
* 计算索引开销。
* 确定表的初始大小。
* 索引空间需要的大小。
* 将索引空间转换成千字节(kilobyte)。
* 确定以字节为单位的页大小;用它减去 28 就可以获得可用的页面空间。
* 确定行的长度。
* 确定一页上可以完整放置多少行。
* 确定初始表的数据页的数目。
* 初始表中数据页面所需的空间大小。
* 将数据大小转换成千字节(kilobyte)。
* 确定以千字节(kilobyte)为单位的初始区段大小。
* 确定表的增长。
* 下个区段的大小。
现在,让我们来浏览一个例子。根据这个指南为 item 表一步步估算第一个和第二个区段大小。以下是 item 表的结构:
列 数据类型 长度(以字节为单位)*
Item_num smallint 2
Order_num integer 4
Stock_num smallint 2
Manu_code char(3) 3
Quantity smallint 2
Total_price money(8) 5
* 您可以在 IBM Informix Dynamic Server Administrator's Reference, Version 9.4 中获得每种数据类型的长度。
现在,让我们假设该表在 order_num 上有一个索引,而且还有 stock_num 与 manu_code 上的复合索引。该表最初有 20,000 行,几个月内,它会增加 35,000 行。
以下是每项计算的结果:
步骤 描述 计算(以字节为单位)
1 确定每个索引长度 order_num 上的索引 = 4+9 = 13
stock_num 和 manu_code 上的索引 = 2+3+9 = 14
2 确定索引的总长度 13 + 14 = 27
3 计算索引开销 27 * 1.25 = 33.75
4 确定表的初始大小 20,000 行
5 所需的总的索引空间 20,000 * 33.75 = 675,000
6 将索引空间转换成千字节(kilobyte) 67,5000/1,024 = 660 (Kbytes)
7 确定以字节为单位的页大小
减去 28 以获得页面开销 2,048 - 28 = 2,020
8 确定行的长度 2 + 4 + 2 + 3 + 2 + 5 + 4 = 22
9 确定每页有多少整行 2020/22 = 91
10 确定初始表的数据页面数目 20,000/91 = 220
11 数据所需的总空间 220 * 2,048 = 450,560
12 将数据大小转换成千字节 450,560/1,024 = 440
13 确定初始区段大小 440 + 660 = 1,100
14 确定表的增长 增加 35,000 行
15 估算下个区段的大小 所需的索引空间 = 35,000 * 33.75 = 1,181,250
转换成 Kbytes = 1,181,250/1024 = 1,154
所需的附加数据页 = 35,000/91 = 385
转换成 bytes = 385 * 2,048 = 788,480
转换成 Kbytes = 788,480/1,024 = 770
所需的总空间 = 770 + 1,154 = 1,924
基于这些计算,就可以确定该表所需的第一个和下一个区段的大小,现在,您可以在 CREATE TABLE 语句中指定第一个和下一个区段的大小:
CREATE TABLE item(
Item_num smallint,
Order_num integer ,
Stock_num smallint,
Manu_code char(3) ,
Quantity smallint,
Total_price money(8))
EXTENT SIZE 1100 NEXT SIZE 1924;
在创建该表时,Informix 服务器将自动为该表分配前两个区段,并且如果您的估算正确,那么这两个区段即使不能包含该表的所有数据,也能包含其中的大部分数据。以上计算是极其机械的,并且易于在 Microsoft® Excel 电子数据表(spreadsheet)中实现,从而可以自动化整个过程。从上述计算中还可以发现,估算的基础就是表将包含的行数。这种估算当然是基于业务规则的,但很大程度上也取决于数据库中表之间的关系。例如,假设有两个表,customer 和 address,并知道有 100,000 位客户,每位客户最多可能有 4 个地址。因此,您可以很容易地计算出 address 表最多可能有 100,000 *4 行。
然后,该如何验证估算值,并查看该值与实际值是否接近呢?在创建表并装入数据之后,您可以使用 Informix oncheck 实用程序来获得该表的表空间(tblspace)报告。以下就是这条命令:
oncheck -pt prod1:item
示例输出如下:
TBLspace Report for prod1:item
Physical Address 9:652153
Creation date 08/31/2004 11:41:05
TBLspace Flags 802 Row Locking
TBLspace use 4 bit bit-maps
Maximum row size 220
Number of special columns 0
Number of keys 0
Number of extents 1
Current serial value 1
First extent size 1100
Next extent size 1924
Number of pages allocated 4107
Number of pages used 886
Number of data pages 885
Number of rows 7960
Partition partnum 7340289
Partition lockid 7340289
Extents
Logical Page Physical Page Size
0 9:299243 4107
以上输出告诉您,item 表仅有一个区段。如果表空间(tblspace)报告显示表中包含太多的区段,那么可以使用该统计数据来优化估算算法,然后使之更符合实际情况。
实际上,表空间(tblspace)报告包括两个部分,第一部分是关于表的区段信息,第二部分包含关于索引的区段信息。无法像对表那样直接为索引指定区段大小;在创建索引时,Informix 服务器将基于所指定的表区段大小,自动为索引分配区段。然而,您可以使用 oncheck 实用程序来查看索引获得了多少个区段。以下是示例输出:
Index item_idx1 fragment in DBspace prod1_idx
Physical Address 9:907200
Creation date 08/31/2004 12:48:45
TBLspace Flags 802 Row Locking
TBLspace use 4 bit bit-maps
Maximum row size 220
Number of special columns 0
Number of keys 1
Number of extents 1
Current serial value 1
First extent size 224
Next extent size 32
Number of pages allocated 224
Number of pages used 36
Number of data pages 0
Number of rows 0
Partition partnum 7340624
Partition lockid 7340289
Extents
Logical Page Physical Page Size
0 9:831443 224
以上输出显示索引 item_idx1 仅有一个区段。关于如何使用 oncheck 的详细信息,请参阅 IBM Informix Dynamic Server Administrator's Guide, Version 9.4。
发表评论
-
oracle 数据库里查看表空间使用状况
2012-02-14 10:29 843Oracle表空间的执行状况要经常查看,一般空闲比例过低的时候 ... -
ORA-12518 TNS:监听程序无法分发客户机连接 解决办法(转)
2011-09-02 10:59 2326ORA-12518: TNS:listener cou ... -
ORA-12518 TNS:监听程序无法分发客户机连接 解决办法
2011-09-02 10:58 18851在网上查了一下,主要 ... -
(转)Oracle em中出现按钮乱码的实际解决方案
2010-07-15 14:45 1201Oracle em中出现按钮乱码在实际的应用中是经常出现的在实 ... -
Linux下安装Oracle 10g以及设置utf-8的编码
2010-07-15 10:07 2735一.资源需要: 至少1024 MB物理内存 1024-20 ... -
oracle扩展表空间
2010-03-01 15:51 1372ORACLE数据库操作中,会遇到表空间不足的情况,通过以下方法 ... -
informix如何查看及修改table的lock级别
2010-01-06 10:36 32431、看表的锁级别 (1)oncheck -pt databa ... -
informix 锁表
2009-12-31 18:36 2770早晨来了,发现今天所有数据都没有上来,查看发现快照表里没 ... -
Windows下面配置 Oracle10g 即时客户端-安装配置
2009-09-22 16:03 1718安装指导 安装步骤: 1. 为您的平台下载相应 ... -
oracle exp问题
2009-04-14 10:16 4520Message 206 not found; No messa ... -
Hibernate query specified join fetching ...
2009-03-10 19:27 4710写道 hql.append(" from DutyC ... -
ORACLE Sequence 自增长
2009-03-06 16:02 3222Sequence是数据库系统按照一定规则自动增加的数字序列。这 ... -
sequence与会话有关--oracle一个比较烂的特性
2009-03-06 16:01 1241如果刚刚打开一个会话 ,例如用PL/SQL developer ... -
设置Linux的服务自动启动Oracle服务器
2009-03-02 10:39 1753Oracle安装完毕以后,如果重新启动Linux ,Oracl ... -
Oracle10g启动与关闭的方法
2009-03-02 10:18 1461Oracle10g和之前的Oracle似乎有点不一样.照理来说 ... -
配置客户端,访问远程Oracle服务器
2009-02-27 09:33 1394一、用oracle客户端 打开Oracle Net Confi ... -
Oracle数据库导出(exp)导入(imp)说明
2009-02-24 10:49 1249exp 将数据库内的各对象 ... -
oracle创建表空间,创建用户以及授权
2009-02-20 17:04 1280//创建临时表空间 create temporary tab ... -
informix新建表空间256M
2008-09-12 12:32 3539数据库用户tmn登录,dbaccess->databas ...
相关推荐
在GBase 8s数据库管理系统中,`ALTER TABLE`语句的`MODIFY EXTENT SIZE`子句用于调整表的第一个extent(扩展区)的大小。Extent是数据库存储分配的基本单元,通常包含多个数据页。这个功能允许用户根据存储需求优化...
`CREATE TABLESPACE exoatbs IN DATABASE PARTITION GROUP Ibmdefaultgroup PAGESIZE 8K MANAGED BY SYSTEM USING('/home/exoa2/exoacontainer') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL ibmdefault8k OVERHEAD ...
这些命令中,`PARTITION GROUP`定义了分区组,`MANAGED BY SYSTEM`表示由系统自动管理,`USING`后面是数据文件的路径,`EXTENTSIZE`是扩展大小,`PREFETCHSIZE`是预读取大小,`OVERHEAD`是页开销,`TRANSFERRATE`是...
`IN DATABASE`指定了数据库,`PARTITION GROUP`定义了分区组,`MANAGED BY SYSTEM`意味着由系统自动管理,`USING`后面跟的是表空间的数据文件路径,`EXTENTSIZE`是扩展大小,`PREFETCHSIZE`是预取大小,`BUFFERPOOL`...
CREATETABLESPACE exoatbs IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 8K MANAGED BY SYSTEM USING ('/home/exoa2/exoacontainer') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT8K OVERHEAD ...
CREATE TABLESPACE exoatbs IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 8K MANAGED BY SYSTEM USING('/home/exoa2/exoacontainer') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT8K OVERHEAD ...
- **`CREATE TABLESPACE [name] IN DATABASE PARTITION GROUP [group] PAGESIZE [size] MANAGED BY SYSTEM USING [path] EXTENTSIZE [size] PREFETCHSIZE [size] BUFFERPOOL [pool] OVERHEAD [value] TRANSFERRATE ...
CREATE TABLESPACE EXOATBS IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 8K MANAGED BY SYSTEM USING('/home/exoa2/exoacontainer') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT8K OVERHEAD ...
CREATE TABLESPACE exoatbs IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 8K MANAGED BY SYSTEM USING ('/home/exoa2/exoacontainer') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT8K OVERHEAD ...
EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT8K OVERHEAD 24.10 TRANSFERRATE 0.90 DROPPED TABLE RECOVERY OFF; ``` - **创建16K表空间**: ``` CREATE TABLESPACE exoatbs16k IN DATABASE PARTITION ...
CREATETABLESPACE exoatbs IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 8K MANAGED BY SYSTEM USING('/home/exoa2/exoacontainer') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT8K OVERHEAD ...
CREATE TABLESPACE exoatbs IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 8K MANAGED BY SYSTEM USING ('/home/exoa2/exoacontainer') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT8K OVERHEAD ...
CREATE TABLESPACE [表空间名称] IN DATABASE PARTITION GROUP [分区组] PAGESIZE [页面大小] MANAGED BY SYSTEM USING ('/路径') EXTENTSIZE [范围大小] PREFETCHSIZE [预取大小] BUFFERPOOL [缓存池名称] OVERHEAD...
CREATE TABLESPACE exoatbs IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 8K MANAGED BY SYSTEM USING ('/home/exoa2/exoacontainer') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT8K OVERHEAD ...
- **命令**: `#DB2CREATE USER TEMPORARY TABLESPACE STMASPACE PAGESIZE 32K MANAGED BY DATABASE USING(FILE 'D:\DB2_TAB\STMASPACE.F1' 10000) EXTENTSIZE 256` - **功能**: 创建一个临时表空间。 - **参数**:...
PREFETCHSIZE参数决定了预读的数据量,应该设置为EXTENTSIZE的整数倍,并根据表空间的EXTENTSIZE和容器数量调整。多容器表空间设计可以均衡磁盘I/O。 - **区段大小**:EXTENTSIZE参数用于定义区段大小,可以根据...
db2 create large tablespace "DMSsfoa8K" in database partition group IBMDEFAULTGROUP page size 8192 managed by database using (file '/opt/ibm/db2/db2data/sfoa/dmssfoa8k' 50000) extent size 32 prefetch...
- `CREATE TABLESPACE [表空间名称] IN DATABASE PARTITION GROUP [分区组名称] PAGESIZE [页大小] MANAGED BY SYSTEM USING ('[路径]') EXTENTSIZE [扩展单位] PREFETCHSIZE [预读单位] BUFFERPOOL [缓存池名称] ...