DB2数据库设计与性能

时间:2022-07-25 08:35:26

DB2数据库设计与性能

摘 要:影响数据库性能的因素众多,其中系统设计就是一个重要的因素。文章以DB2数据库为例,分析了系统设计中的一个重要方面――数据库设计,阐述了影响DB2数据库性能的数据库设计方面的几个关键因素,并为改善性能提出了建议。

关键词:DB2 性能 设计

中图分类号:TP39 文献标识码:A 文章编号:1007-3973 (2010) 03-048-02

任何性能调整都需要涉及的一些该程序的知识,关系型数据库系统也一样。事实上,越多地了解该系统,越能做出决定,提升系统的性能。虽然可以在数据库运行时对其性能进行优化,但如果能够在设计时就更注意系统性能的话,往往可以产生更好的结果。

1影响性能的因素

有一些方面的因素会影响到应用程序的整体性能。令人关注的一般方面的因素有:数据库设计、应用程序设计以及硬件设计和操作系统的使用等等。本文只讨论其中的数据库设计。

术语“数据库设计”可能对不同的人意味着不同的事情。主要有两种类型的数据模型:逻辑和物理。“逻辑”模式是一种表现形式,在性质上往往是一个业务领域的信息需求的图形表达,它不是一个数据库。其主要目的是确保其结构和内容可以表示和支持一个领域的业务需求。它是独立于任何数据库技术。

在完成你的逻辑数据库设计,有一些实际环境的问题你应该考虑,这些环境用来存储你的数据库和表。其中包括了解被创建的用来支持和管理你的数据库的文件,理解需要多少空间来存储数据,并确定应该如何使用表空间来存储你的数据。本文只涉及物理数据库设计方面。

2数据库设计细节

2.1表空间

一个表空间是一个物理存储对象,为数据库和存储在数据库中的表提供间接的一层。它由一系列用来存储数据对象的容器组成。容器是分配给表空间的存储空间。根据表空间类型,容器可以是一个目录,设备,或文件。数据,索引,长字段和表的LOB部分可以存储在相同的表空间,也可以分解成单独的表空间。

与数据库系统一起工作时,主要目标是尽可能地快速与高效存储和检索数据。在设计数据库或分析现有数据库性能问题时,一个重要的考虑是数据库本身的物理布局。DB2提供了两种类型的表空间支持:

(1)系统管理的空间(SMS)- 在操作系统文件中存储数据。它们是一般用途的最佳选择。能提供良好的性能和很小的管理成本。

(2)数据库管理空间(DMS)- 对于数据库管理空间(DMS)表空间,数据库管理器控制存储空间。一个设备或文件列表被选择属于当它定义的表空间。这些设备或文件的空间是由DB2数据库管理器来管理的。DMS表空间有一些额外的管理成本主要是由于监测和调整预分配文件的大小。DMS表空间可以很容易地通过改变现有容器或增加新容器来增加空间大小。

2.1.1建议

(1)DMS表空间通常表现比SMS更好,因为它们是预分配的,当新行添加时,不需要花时间扩展文件大小。DMS表空间可以是原始设备或文件系统文件。在原始设备容器DMS表空间提供最佳的性能,因为双缓冲不会发生。双缓冲,它发生在数据先缓冲在数据库管理层然后在文件系统层,对文件容器或者SMS表空间来说,可能是一项额外的成本。

(2)如果你使用SMS表空间,可以考虑使用db2empfa命令。db2empfa(启用多页文件分配)工具对数据库启用多页文件分配。随着SMS表空间的多页文件分配的启用,磁盘空间一次分配是一个扩展块(extent),而不是一个页面,提高了插入(INSERT)吞吐量。

(3)使用DMS表空间还允许一个单一的表来存储它的数据,索引和大型对象在最多三个不同的DMS表空间上,从而通过并行磁盘I/O操作来提高性能。并行I/O是在同时读取或写入两个或更多的I/O设备,以便减少响应时间的一个过程。

将数据放在不同的磁盘驱动器的不同的表空间,以使并行I/O操作成为可能,这是很重要的。其实,每个表空间可以有多个容器,其中每个容器可在不同的磁盘驱动器。理想的配置要考虑很多因素,如可用的磁盘数量,RAID级别,等等。

2.1.2平台的具体建议

Windows

实行文件系统缓存如下:

(1)对DMS文件容器(和所有SMS容器),操作系统可能会在文件系统缓存中缓存页面。

(2)对DMS设备容器表空间,操作系统不会在文件系统缓存中缓存页面。

(3)在Windows中,DB2注册表变量DB2NTNOCACHE用来指定DB2是否使用NOCACHE方式来打开数据库文件。如果DB2NTNOCACHE = ON时,不使用文件系统缓存。如果DB2NTNOCACHE = OFF时,操作系统缓存DB2文件。这适用于除含有长数据字段或LOBS的其它所有文件。清除系统缓存使得更多内存可以被数据库使用,以便缓冲池或排序堆可以增加。

2.2表

如前所述,在创建物理数据库表前,你应该为你的数据模型做一个逻辑设计。在此将简要讨论逻辑数据库设计对性能的影响。

2.2.1规范化

这是调整数据模型以至将数据关系减少到最简单的形式的一个过程。是在建设一个逻辑关系数据库设计任务的关键一步。规范化减少了数据冗余,可以提高更新和删除语句的性能,因为你不需要重复操作同一数据。通过规范数据,努力确保表中的所有列依赖于主键。一个完全规范化的数据结构的缺点是数据检索操作,特别是当查询是通过联合操作来访问在多个表中的数据块。

2.2.2非规范化

故意在多个表中重复某些列的后果是增加了数据冗余。为了减少性能问题,非规范化有时是必要的,在物理关系数据库设计时,也是关键的一步。有关是否非规范化,应该基于以下决定:

(1)不使用非规范化,你是否能使用和实现其它的方法去调整和改善你的数据库性能,以使其达到一个可以接收的地步。

(2)你是否能确定非规范化可获得的可能的性能,并且这些是否能够合理平衡增加的更新费用?

2.2.3其他考虑

(1)空值――一般情况下,列定义为非空(NOT NULL)表现优于可空列,因为路径长度减少了。数据库管理器不需要在非空列作空值检查。此外,每一个可空列需要一个额外的字节值。在适当情况下使用空值,而不是作为默认。

(2)列长度――你应该定义列长度,特别是VARCHAR列,尽可能让你的应用程序最小。通过这样节省空间,可能会减少表和索引页面的使用,以及索引层次,从而提高查询性能。 如果你为VARCHAR列创建一个索引,该列的所有索引项采取的定义是VARCHAR的最大长度,即使是列中的实际数据长度小于最大值。

(3)标识列 - 与程序实现的标识相比,使用DB2生成的的标识值能够显着地提升性能。它们通常用于生成唯一的主键值。

(4)将经常更新的列放在一起,置于行的末尾。这对更新性能有影响,因为以下的日志考虑:

1)对于固定长度行更新,DB2日志记录从第一个更新列到最后一个更新列。

2)对于可变长度行更新,DB2日志记录从第一个更新字节到行尾。如果一个可变长度列的长度变化了,这将导致行头(它包括行的长度)变化,因此整个行会被记录。

2.3缓冲池

缓冲池是一块内存区域,数据库页面在其中读、写和保留(held)。在任何系统中,内存访问速度都比磁盘I/O快,DB2使用数据库缓冲池设法减少磁盘I/O。

没有确定的答案来回答应该分配多少内存给缓冲池。一般来说,越多越好。一个好的经验法则是首先将大约你系统主存的75%用于缓冲池内存,但这一规则只适用专用的数据库服务器。既然是内存资源,它的使用,都必须考虑与所有其他应用程序和进程一起运行在服务器上。

如果您的表空间有多个页面,那么你应该为每一页只创造一个缓冲池。

有些情况下,定义同样大小的多个缓冲池可以提高性能,但是,如果配置不正确,可能对性能有巨大的负面影响。决定创建多个缓冲池,可以从以下几个方面来考虑:

(1)你创建的表使用的表空间的页面大小不是默认的4KB。

(2)你有些表经常和快速地被许多短的更新事务访问。为这些表设置专用缓冲池可以改善响应时间。

(3)你有些表比主存大,而且总是全表扫描,这可以设置它专用的缓冲池。

2.4日志记录

所有数据库系统的一个主要目的是在保持数据的完整性。所有数据库都维护日志文件以便记录数据库的变化。DB2的日志记录由一组主要和次要日志文件组成,它们包含了记录所有数据库更改的日志。该数据库日志用于回滚未提交的工作单元,并恢复数据库到一致状态。DB2提供了两种日志记录的策略。

2.4.1循环日志记录

这是默认的日志模式。循环日志记录,日志记录填充日志文件,然后覆盖最初的日志文件里的初始日志记录。被覆盖的日志记录是无法恢复的。这种记录类型通常是不适合生产应用程序。

2.4.2保留日志记录

当日志文件被日志记录填满时,日志文件被存档。新的日志文件又可用于日志记录。保留日志文件可以做到前滚恢复。前滚恢复基于记录在日志中的完全的工作单元(事务),重新将改变应用到数据库。你可以指定前滚恢复到日志末尾,或日志末尾之前的某个特定时间点。DB2永远不直接删除归档的日志文件,因此,维护它们是应用程序的责任,如:存档,清空等。

2.4.3日志性能

忽略数据库性能与日志记录之间的关系是一个重大的错误,主要是时间成本。日志文件的存放需要优化,不仅是因为写性能的考虑,而且关系到读性能,因为数据库管理器需要是数据库恢复时读取日志文件。

2.4.4建议

(1)用最快速的磁盘存放日志文件

如果可能的话,使用一个单独的阵列和/或通道

(2)使用日志保留记录

(3)镜像的日志文件

(4)增加数据库配置日志缓冲区参数(logbufsz)

此参数指定数据库堆大小作为日志记录的缓冲区,在日志写入磁盘前,会被先写到缓冲区。在以下几种情况,日志会被写到磁盘:

(1)按MINCOMMIT的配置参数定义,在事务或事务组提交时。

(2)日志缓冲区已满。

(3)其他一些内部数据库管理事件触发。

缓冲日志记录会使日志文件I/O更加高效,因为日志记录被写入到磁盘的频率减小了,以及一次会写入更多的日志。

(5)调整日志文件大小(logfilsiz)的数据库配置参数,以便不会造成过量的日志文件。

3结束语

数据库优化是一个系统工程,涉及的知识不仅仅是数据库方面,还包括应用软件、操作系统平台以及硬件等等。同时,系统设计也只是整个过程中的一个环节,后续还有应用、维护等等。本文选取了设计环节中的数据库设计进行了阐述,并没有非常全面地从整个过程和涉及面去考虑,在实际应用中,我们需要更加全面地去平衡各个方面。笔者也会在今后的课题研究中,去分析其它设计以及应用、维护方面对数据库性能的影响。

参考文献:

[1]牛新庄.循序渐进DB2――DBA系统管理、运维与应用案例[M]. 清华大学出版社,2009.

[2]牛新庄.DB2数据库性能调整和优化[M]. 清华大学出版社,2009.

[3]IBM:Relational Database Design and Performance Tuning for DB2 Database Servers.

[4]IBM:Administration Guide: Performance.

[5]Patrick O'Neil Elizabeth O'Neil: Database-Principles, Programming, and Performance.

[6]IBM: IBM DeveloperWorks.

上一篇:基于宽带接入的局域网安全问题分析 下一篇:心理保健操缓解认知疲劳效果的脑电检验