Chinaunix首页 | 论坛 | 博客
  • 博客访问: 95905
  • 博文数量: 39
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 405
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-25 09:25
文章分类

全部博文(39)

文章存档

2011年(1)

2010年(5)

2009年(4)

2008年(29)

我的朋友
最近访客

分类: DB2/Informix

2008-10-22 11:51:08


摘自:
级别: 初级
Jianing Fan, 高级软件工程师, Motorola
2005 年 2 月 01 日
如果您是一名 Informix? DBA,那么您是否想要知道如何更高效地创建表和索引?为了获得更好的性能,在创建表和索引之前,您需要思考数据库的物理结构。作者将详细介绍所有这些考虑事项,并用实际例子进行说明。
简介
任何稍微了解 SQL(结构化查询语言)的人都知道如何在数据库中创建表和索引。但是就系统和数据库性能而言,如何才能更高效地创建表和索引呢?以下是在创建表和索引之前需要考虑的事项:
数据库空间(Dbspace)
区段大小(Extent size)
锁模式
约束键字
本文将仔细研究所有这些考虑事项,并通过工作环境中收集的实际例子进行说明。
数据库空间
数据库空间(Dbspace)是逻辑数据库对象和物理磁盘位置之间的链接。在创建诸如表和索引等逻辑数据库对象时,
需要物理磁盘空间来存储这些对象,这些空间就称为数据库空间(dbspace)。Dbspace 由一个或多个磁盘空间块组成。对于 9.40 之前的 Informix 版本,块的大小是有限制的;每块不能超过 2 GB。现在已不再有块大小限制。当首次初始化数据库服务器时,有两个选择:可以配置数据库服务器,以便使用较小的块(每块小于或等于 2 GB),也可以使用较大的块(每块大于 2 GB)。
Dbspace 是由 Informix onspaces 实用程序创建并管理的。您既可以在格式化后文件系统上创建 Dbspace,也可以在原始磁盘设备上创建 Dbspace。格式化后文件系统指的是已格式化并安装的磁盘设备,而原始磁盘设备指的是那些还未安装的磁盘设备。在 UNIX? 系统中,为了获得更好的性能和更简单的数据库管理,Informix 推荐对 dbspace 使用原始磁盘设备,因为原始磁盘设备可以避免操作系统缓冲并创建到物理磁盘设备的符号链接。只有具有数据库管理员(DBA)权限的用户才可以使用这个 onspaces 实用程序。同时,在创建新的 dbspace 之后,不要忘记在 Informix 实例上进行一次完全备份。关于如何创建和管理 dbspace 的详细信息,请参阅 IBM Informix Dynamic Server Administrator's Guide, Version 9.4。
当 Informix 数据库服务器首次进行初始化时,它将自动创建一个 dbspace,以存储所有数据库对象。这个 dbspace 通常称为 rootdbs。下列列表展示了主要的 Informix 数据库对象:
逻辑日志数据。由逻辑日志生成的数据。
物理日志数据。由物理日志生成的数据。
表数据。数据库表中的数据。
索引数据。由表上的索引生成的数据。
大二进制对象数据,如大型文本和内部图形。
临时数据。对表和构建索引生成的数据进行排序,并对它们进行更改。
为了取得更好的数据库性能,Informix 文档建议为每个数据库对象创建一个不同的 dbspace。例如,应该为逻辑日志创建一个 dbspace,
为表创建一个 dbspace,为索引创建一个 dbspace,等等。Informix 文档还建议跨磁盘展开 dbspace,以获得平衡后的磁盘 I/O。
一种获得这种效果的方法就是应用现代的 RAID 技术来划分条带(stripe),并合并磁盘分片。另一方法则是在不同的磁盘上配置块(chunk)。
要获得详细信息,请参阅 IBM Informix Dynamic Server Administrator's Guide, Version 9.4。
在正确创建这些 dbspace 的同时,还需要知道哪个 dbspace 是用于表的,哪个 dbspace 是用于索引的,这样,您就可以遵照建议,
不去将不同的数据库对象放置在同一 dbspace 中。您可以在 CREATE TABLE 和 CREATE INDEX 中使用 IN 子句,将标和索引指派到合适的 dbspace 中。
下面是一个例子:
CREATE TABLE element
  (
    workspace_id integer,
    element_id integer,
    cpbsc_instance integer,
    acgid_bsc integer,
    dap_cluster_id integer,
    acgid_dap integer,
    acg_class smallint,
    preconfig_flag smallint,
    cptimr_inst integer,
    acgglob_inst integer,
    tdapfr_primary integer,
    tdapfr_secondary integer,
    barred_state_tmr integer
  ) IN data1;
CREATE INDEX elmentidx1 on element (workspace_id,cpbsc_instance)
    IN idx1 ;
 
以上例子将 element 表及其索引分别指派给 data1 和 idx1 表空间(dbspace)。
如果您发现某个 dbspace 具有比其他 dbspace 多得多的磁盘 I/O,并找到了磁盘 I/O 的源表,换言之,用户在十分频繁地访问这些表,那么 IN 子句还可以用于将表和索引从一个 dbspace 移至另一个 dbspace。操作过程如下所示:
保存您计划使用 Informix dbschema 实用程序进行移动的表和索引的模式。
从您计划移动的表中卸载数据。
删除该表。
用您所保存的同一模式重新创建该表。
重新加载表数据。
用您所保存的同一模式重新创建索引。
对该表执行 update statistics high,以激活索引。
在删除表之前,需要研究它与其他表的关系,并特别注意其外键约束。还需要极其小心地处理其外键约束;
如果没有正确处理,就会打乱整个数据库的完整性。
-------------------------------------
systables:描述数据库中的很张表;
syscolumns:描述数据库中表的列;
sysindexes:描述数据库中列的索引;
sysfragments:存储了分段索引的片段信息;
sysfragauth:表识别列级权限;
sysviews:描述了数据库中定义的每个视图;
sysdpend:描述了视图是如何依赖其他视图和表的;
syssyntable:定义每一个同义词及其所代表的对象;
sysconstraints:记录了加载在数据库表列上的约束;
sysreferences:列出了放置在数据库上的参照约束,它为数据库的每个参照约束建立一行
syscoldepend:记录了涉及检查约束的所有列,包括在约束中每列都会在syscoldepend表中创建一行;
sysprocedures:存放数据库中每个过程的特征;
sysprocplan:装载了过程执行所需的两项内容(执行计划或查询计划、附属列表);
sysprocauth:描述授予存储过程的权限;
systriggers:装载了关于触发器的信息;
sysblobs:确定BLOB列的存储位置;
sysroleauth:描述授予用户的角色;
sysobjstate:存储了关于数据库对象的状态信息;
sysvlolations:违例或诊断表;
阅读(1333) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~