得到:
SELECT A.TABLE_NAME,A.COLUMN_NAME FROM USER_CONS_COLUMNS A,USER_CONSTRAINTS B
WHERE A.CONSTRAINT_NAME=B.CONSTRAINT_NAME
AND B.CONSTRAINT_TYPE='R'; 所以我们就可拼得建这一类索引的脚本: a. 通过Sql*PLUS以NC数据用户连接数据库
b. 输入: spool c:\\cre_index1.txt
select ‘create index I_’||a.column_name||’ on ‘||a.table_name||’(‘||a.column_name||’) tablespace pctfree 0 storage(pctincrease 0);’ from user_cons_columns a,user_constraints b where a.constraint_name=b.constraint_name and b.constraint_type=’R’; spool off
c. cre_index1.txt文件生成后,我们来执行此文件便可将索引建立起来:
@c:\\cre_index1.txt
依据二:对于SQL语句中的分组字段建组合索引。如以下语句:
select column1,column2,sum(column3) from table1 group by column1,column2
我们的索引就要这样建:
create index I_column1_column2 on table(column1,column2) tablespace pctfree 0 storage(pctincrease 0); 建索引的字段顺序是先column1后column2,与group by 子句中字段顺序一致不能打乱。
我们又如何知道NC业务操作过程中哪些SQL语句有类似的操作呢?一我们看能不能从NC事业部中获得相应的SQL语句文档;二我们可以借助于日志文件。在中间件启动文件中加入 -DEnableSqlDebug=true 参数后,日志文件中会打印SQL语句执行信息,包括SQL语句及执行时间。我们重点针对那些执行时间较长的语句进行处理。
依据三:对where条件子句所涉及到的字段上酌情加索引。
对于这一类问题,我们只能借助于日志文件。花一定时间(比如两至三天)跟踪SQL语句的执行信息对于执行时间较长的语句进行分析,看where子句中所
涉及到的字段是否未建立索引同时还要看他们是否是编码、金额类型的字段。满足以上两条件后考虑增加索引。索引加完后对业务操作仍需跟踪一段时间看性能是否得到提升,若无变化或某些点出现性能下降将此索引删除。
6. Exp/Imp(导出/导入)
我们经常利用exp/imp工具来做数据的备份/恢复及数据迁移工作。 命令:exp
userid=system/manager@
file=d:\\nc.dmp
owner=ncadmin log=d:\\expnc.log
imp
userid=system/manager@
file=d:\\nc.dmp
fromuser=ncadmin touser=ncadmin2 buffer=2048000 commit=y log=d:\\impnc.log
作用:1. 将NC用户(ncadmin)数据通过exp命令导出以固有格式存放在
d:\\nc.dmp文件中;再通过imp命令将nc.dmp文件中的数据导给ncadmin2用户,使ncadmin用户的数据得以恢复。
2. 优化存储性能的作用。在数据的导出/导入过程中,会压缩数据块
中的碎片、将数据行重新排列,从而减少了行链接及行迁移,提升了数据读取的效率。
第三章 DB2 通用数据库系统管理
1、创建数据库 1.1创建数据库
在windows服务器上安装DB2产品时要选择创建实例,安装结束后在该实例下面创建数据库,可以使用控制中心也可以使用命令行,下面是命令行的一个例子(分为3步,NC中有些表较宽,需要pagesize 足够大的表空间): STEP 1) 创建数据库 DB2 CREATE DATABASE DB1 ON C: USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM USER TABLESPACE MANAGED BY DATABASE USING (FILE 'C:\\dms\%user.dms' 256000) EXTENTSIZE 32 PREFETCHSIZE 32 CATALOG TABLESPACE MANAGED BY SYSTEM USING ('C:\\dms\\catalog') EXTENTSIZE 8 PREFETCHSIZE 8 TEMPORARY TABLESPACE MANAGED BY SYSTEM USING ('C:\\dms\\temp') EXTENTSIZE 32 PREFETCHSIZE 32 STEP 2) 创建PAGESIZE=8KB的BUFFERPOOL : DB2 CREATE Bufferpool BP8K SIZE 250 PAGESIZE 8 K STEP 3) 创建PAGESIZE=8KB的表空间: DB2 CREATE REGULAR TABLESPACE USER8K PAGESIZE 8 K MANAGED BY DATABASE USING ( FILE 'C:\\dms\%user8k.dms' 12800) EXTENTSIZE 32 PREFETCHSIZE 32 BUFFERPOOL BP8K 注释:运行db2cmd命令就进入了DB2的命令行,以上提到的命令都可以在此运行,注意每条命令前面要加db2字符。
1.2表空间管理
当创建数据库时,总要创建三个表空间,即系统编目表空间、临时表空间、用户表空间,它们分别用于存放数据字典。用户可以选择其特性,比如,这三个表空间的类型和大小。 几个概念:
数据页大小(pagesize):在缺省情况下,表数据存储在4KB的数据页上,在4KB页上行的宽度不能超过4005字节,一行不会横跨多页。Pagesize在表空间级别上定义,安装NC系统时需要执行上文step2、3来创建pagesize=8k的表空间。 区段大小(extentsize):在表空间容器内部给单个数据库对象分配的空间。此分配的空间由多页组成,默认值通常是16。表空间的区段大小不能事后更改。 预取装大小(prefetchsize),在被查询引用之前,预取装(操作)读取查询所需的数据以便在执行查询前不必等待 I/O。该参数大小影响可从表空间中读取数据的速度,稍后可更改预取装大小。该参数取值应该是extentsize的整数倍;
1.2.1系统管理表空间(SMS)
在操作系统中,SMS容器用目录 (directories)来表示;在SMS表空间中的容器不预先分配它的存储空间。在创建表空间期间分配少量的存储空间。
1.2.2数据库管理表空间(DMS)
当表空间没有剩余空间时,需要为该表空间增加容器,可以使用alter tablespace语句进行,该操作也可以起到均衡I/O负载作用;可以使用裸设备,对win2k来说DMS表空间可以直接使用未格式化的分区或磁盘。通常,精心调整的DMS表空间性能优于SMS表空间。所以NC系统的用户表空间推荐使用DMS表空间。
与SMS相比,DMS存储模型有重要的好处。下面列出它的主要优点: 1).用户可以根据数据库对象的类型对它们存放位置进行更多的控制。表可以被分散到多个 DMS表空间中存放,允许将表数据与它的索引分开。
2).用户对于诸如后备和恢复这样的操作任务在管理上有着更多的灵活性。用户可以控制那些不被经常访问的数据项,比如 BLOBs它们可以将映象存放在不同的表空间中。这些BLOBs 可以包含那些既不被经常访问又不被经常更新的数据。 3).使用DMS表空间具有性能一的优势,因为 DB2了解更多有关数据存放方面的知识。如果使用用于 DMS表空间的设备,那么用户就可以避免使用操作系统的文件系统所带来的开销。 4).DMS表空间提供了方便的可伸缩性,因为用户能够动态的把容器增加到表空间。当增加新的容器时, DB2可以自动地完成数据的平衡分布任务。 5).如果用户了解自己表空间的最大值,那么可以考虑使用 DMS表空间。当插入数据库对象时,DMS会为它们预分配存储空间。数据库不需要与其它的应用程序争夺磁盘空间。如果用户了解自己表空间的最大值,那么可以考虑使用 DMS表空间。当插入数据库对象时,DMS会为它们预分配存储空间。数据库不需要与其它的应用程序争夺磁盘空间。
SMS和 DMS用户表空间的特性对照表 特性 能够在表空间中动态地增加容器数目吗? 能够把索引数据存放到不同的表空间中码? 能够把长型数据存放到单独的表空间中码? 表可以分散存放到多个表空间中码? 仅在需要时才分配空间? 表空间可以被定向到不同类型的磁盘空间码? 创建之后,区段大小能够改变码?
SMS DMS 不能 能 不能 能 不能 能 不能 能 是 否 是 否 不能 不能 1.3 Buffer Pool管理
缓冲区(buffer pool)的大小决定分配给服务器作为数据库高速缓存使用的数据页的数目。这些内存空间是应用程序第一次与数据库连接时分配,并且在最后一个应用程序与该数据库断开时被释放。这一内存空间作为数据库存取的数据高速缓存使用。如果缓存区足够大,将可减少磁盘 I/O 次数。作为经验法则,如果机器是专用数据库服务器,用户开始可以先使用50%的可用物理内存量。可以把临时表空间放入单独的缓冲池,以便为需要临时存储器的查询尤其是执行大量排序的查询提供更佳性能。 DB2 CREATE Bufferpool Bp01 SIZE 250 PAGESIZE 4 K 注释:创建bufferpool后要重启实例才能生效。
2、实例和数据库的参数配置 2.1参数概述
图3.1显示 DBM和 DB配置参数和它们之间的关联关系。其中的一些参数用来确定分配给每个 DB2实例、数据库和应用程序的内存。
数据库活动涉及磁盘存取 (I/O)和内存存取 (CPU)。每个 DB2配置参数或是影响内存资源或是影响磁盘资源。因为访问磁盘要比访问内存慢得多,数据库性能优化的关键条件是减少访问磁盘的次数。如果用户能够消除 I/O等待时间,数据库请求则与 CPU紧紧相关,要增加性能将需要更快或更多的CPU 。
图 3.1给出了各种可配置的内存参数。内存可以在服务器上或客户机上分配,为 database global memory(数据库全局内存)分配的内存数量取决于当前活动数据库的数目。 数据库全局内存 服务程序堆 数据库堆
(util_heap_sz) 缓冲区(buffpage) (dbheap)
Backup Buffer LogBuffer
( backbufsz ) (logbufsz) 锁列表(locklist) 程序包高速缓存 (packcachesz) Restore Buffer Catalong Catche
(restbufsz ) (catalogcache _sz)
代理私用内存Agent private memory 应用程序堆 ( applheapsz ) 代理堆栈 (agent_stack_sz) DRDA堆 (drda_heap_sz) 统计堆 (stat_heap_sz) UDF内存 (udf_men_sz) 排序堆 (sortheap) 语句堆 (stmtheap) 客户I/O块 (rqrioblk) 查询堆 (query_heap_sz) JAVA堆 Java_heap_sz 代理/应用程序共享内存 应用程序 支持层堆 (aslheapsz) 应用程序共享内存 客户I/O块 (rqrioblk) 用户或应用程序进程(本地客户、远程客户)