精通数据库管理

weixy 2002-05-21 11:52:27
精通数据库管理
(松下客 2001年06月08日 20:16)


一、数据库设计
成功的数据库设计意味着数据库能够存储所有必需的数据,而且其存储方式保证了我们能够快速地保存、提取、编辑、删除数据。有许多因素影响数据库设计是否成功:数据库规范化,索引,运用存储过程和触发器,以及正确地选择一个能够满足需要的DBMS。

数据库规范化(Database Normalization)是一个很重要的问题。数据库规范化可以简单地理解为每一份数据只在数据库中保存一次。这样,在每次更新数据库中的数据时,我们不再需要在多个位置更新同一份数据。数据库规范化有不同的深度,而且我们可以运用多种不同的技术对数据库进行规范化(请参见参考资源中关于数据库规范化的文章)。如果数据库没有规范化,则数据更新必须在多个地方进行,倘若数据库更新实际上只应该在一个地方进行,此时它就给数据库带来了数倍的额外开销。当然,如果你对数据库规范化的了解很深入,你可以降低部分数据的规范化程度,使得数据访问更加方便。

一般地,表里面的记录不按照特定的顺序存储,因此在表中查找数据意味着对表进行完全扫描,这是一个相当耗时的操作。我们可以用索引来避免对表进行完全扫描。数据库的索引保存了特定字段(比如身份证号、姓名等)或字段组合(比如产品类别以及产品序号)键值的有序列表,因此通过索引查找键值要比扫描原始的表快得多。如果你创建了大量的索引,插入记录的时间可能略有延长,但提取记录的速度将有很大的提高。

Access、SQL Server以及Oracle都支持存储过程(Stored Procedure)和触发器(Trigger)。存储过程是数据库预先编译的、可以随时调用执行的查询或者过程。与动态创建和执行的查询相比,存储过程的执行效率更高,因为查询在执行之前必须有一个检查、解释过程,它需要一定的时间。

触发器是一种特殊的函数,它在特定的事件出现时对数据进行预定的操作。数据库(以及访问数据库的应用程序)在插入或者修改记录的时候会频繁地执行触发器。触发器可以验证数据是否合法,可以调用其他存储过程或者程序,也可以进行某些计算。在服务器端运用存储过程和触发器能够提高效率,减少网络传输,使得客户端能够留出更多的时间给其他任务,比如更新屏幕。

最后,请确保数据库能够满足自己的需要。考虑一下系统可能有多少数据量,数据库是一个独立的系统还是用来支持局域网、Internet,确定访问数据库的用户数量。例如,如果系统只有一个用户,而且它永远不需要和其他系统交互,Access是一种理想的选择;但是,如果数据库用来支持企业级访问,则Access不再适用;如果系统需要涉及大量XML数据并要求支持Unicode,有好几种DBMS能够为我们提供这方面的支持。

注意数据库使用情况随着时间的推移而改变,定期地复审数据库的使用目的、用法以及设计是否需要调整,以便优化数据库的性能。

二、数据库配置
每一种数据库管理系统都有各种影响其性能的配置参数,其中部分参数比较重要。下面是在使用Access、SQL Server和Oracle数据库系统时,我们必须熟悉的一些地方。

选择Access 2000数据库时一定要慎重。对于随时准备升级到SQL Server的多用户应用,如果用户数量比较少(5个或者以下),则Microsoft数据引擎(MSDE,Microsoft Data Engine)是一种理想的选择。Microsoft的Jet 4.0数据引擎支持多达255个的用户,但从整体来看,它的速度比较慢。其它需要考虑的因素包括独占访问(速度快)或共享访问(速度慢),记录级加锁(Access 2000独有)或页级加锁(Access 2.0)。如果数据库可能变得非常大,应当注意Jet 4.0和MSDE都有一个2 GB的上限。

SQL Server有一些重要的配置参数(参见表1)。例如它有一个“min memory per query”参数,这是为系统中每一个用户提供的最小内存总量,SQL Server利用这些内存进行排序和连接操作,增加这个数值可能提高查询的速度。把“awe enabled”设置为1并在boot.ini文件中加上“/pae”就可以启用Address Windowing Extensions(即AWE,它是SQL Server 2000的新功能,要求Windows 2000 Advanced Server)。启用AWE之后,我们能够使用多达8 GB的RAM。但是,启用这个功能有一个副作用。启用这个功能之后,SQL Server将在启动时获取大部分可用RAM,而不再是动态分配内存,因此我们必须监视max server memory以及min server memory参数,以免系统变得太慢。

表1,SQL Server的参数设置
参数 默认值 如何调整
max_worker_threads 255 依赖于数据库负载的大小,降低这个数值可能提高性能。
min_server_memory zero (0) SQL Server能够动态分配内存。预先分配一些内存可能会提高响应速度(例如,把这个参数设置成50 MB,然后看看性能是否有所改善)。
max_server_memory SQL Server根据需要动态分配内存。 如果不启用AWE,SQL Server 2000最多能够使用3 GB内存(SQL Server 7最多使用2 GB内存)。
你可以通过设置各种参数来提高数据库性能。max_worker_threads、min_server_memory以及max_server_memory都属于重要的参数。

在Oracle 8i中,我们也可以通过调整一些重要参数来提高数据库性能(参见表2)。这些配置参数都可以在init.ora文件中找到,或者我们也可以用Oracle Enterprise Manager来设置这些参数。我们可以结合运用Oracle Performance Manager、查询命令以及AUTOTRACE功能,辅助优化这些配置参数。AUTOTRACE功能能够显示出系统如何解析SQL语句,并给出它的执行情况统计报告。执行下面这个命令将启动AUTOTRACE功能:


SET AUTOTRACE ON


  如果要查看执行情况统计报告,但不想查看执行计划,我们执行如下命令:

SET AUTOTRACE TRACEONLY

 

表2,设置Oracle配置参数
参数 作用
DB_BLOCK_BUFFERS 设置系统全局区(SGA,System Global Area)的大小。Oracle使用这个缓冲区保存和处理数据。
DB_BLOCK_SIZE 设置内存块的大小。警告:如果改变这个数值,你必须重新构造数据库。在Oracle 8或者更高版本中,它可以设置为32K;在早期版本中,最大限制是16K。
SHARED_POOL_SIZE Oracle用这个内存处理过程、包、触发器。
SORT_AREA_SIZE 这是用于排序的内存空间大小。
每一个Oracle系统都包含上述配置参数。你可以在init.ora中找到这些参数。正确地设置这些参数将对数据库性能产生积极影响。如果你使用Oracle的时间很长,可能经历版本变换(包括次版本号变换),请注意核对这些参数。

三、硬件
在大型机占统治地位的年代里,对于所有性能问题的唯一回答就是加入更多的硬件。现在我们已经可以通过采用更好的算法、更好的软件来提高性能。随着计算机性能的提高,我们在寻找解决方案时逐渐忘记了硬件因素。实际上,许多数据库问题的起源和根本都是硬件。下面我们来看看可能遇到的三个硬件问题。

影响数据库性能最常见的硬件问题是硬盘空间不足。考虑一下磁盘在计算机中的各种用途:程序数据存储,注册数据存储,数据库,程序或者用户信息文件,临时工作区,等等。当前使用的大部分数据库还要在临时工作区分配空间。另外,计算机还要用磁盘为操作系统提供虚拟内存空间。

磁盘空间不足导致一个很直接的结果:操作系统将拒绝继续运行程序。程序、数据库、操作系统可能会在操作遇到磁盘空间不足问题时发出警报。临时工作区、虚拟内存的磁盘空间不足却属于隐藏的危险。这些问题的主要症状就是数据库处理所需要的时间越来越长,有时甚至根本不能完成。

对于计算机本身的磁盘空间问题,我们可以从检查可用空间开始。如果磁盘空间利用率已经超过了80%,增加存储空间就是首要任务。对于数据库,我们也要进行类似的检查。Access数据库会在需要的时候扩展数据库文件的大小,有一个简单的经验可供参考:检查数据库大小,至少留下50%以上的自由磁盘空间。注意不要忘记利用Access的Compact命令。

对于SQL Server、MSDE以及Oracle,我们可以按照类似的原则保留自由磁盘空间,但同时还应该检查数据库中实际存储数据的空间。任意一个超过70%的利用率意味着空间利用超越了警戒线,如果超过80%则意味着进入了危险区域。

第二个硬件问题是内存不足。从技术上来说,数据以及辅助数据查询、处理的索引,都和存储过程、经过编译的查询一起驻留在内存之中。查询将在内存中执行,查询优化器将在内存中执行,应用程序将在内存中执行,操作系统也将在内存中运行——这一切都要求有足够的内存。

如果没有足够的内存,操作系统、应用程序、数据库将把部分操作转移到磁盘上进行,从而拖累了整个系统的性能。解决方法是在合理的范围内安装尽可能多的内存(用Windows NT/2000的Server System Monitor或Performance Monitor检查系统的内存使用情况,或页故障、缓存命中率、分页数等其他感兴趣的项目)。

网络传输能力属于第三个硬件问题。如果系统在每天的固定时间基本上停止响应(不管数据库访问情况如何),它可能是一个网络问题。

其他需要检查的硬件因素包括处理器速度(包括客户机以及服务器)、处理器数量(SQL Server以及Oracle支持多处理器并行处理),以及数据库分布(比如,是否可以把表放到一台机器,把索引放到另一台机器)。

四、数据库管理工具
数据库管理员通常运用多种工具简化管理任务,这已经不再是什么秘密。我们应该使用的第一个管理工具是“系统监视器”(在Windows 2000中是“性能监视器”)。系统监视器显示了系统负载以及其他几个性能指标,比如错误页数等,我们可以通过它来了解系统性能优化的效果。当然,对于SQL Server以及Oracle,我们还可以使用这些系统所提供的DBA工具。



图1:SQL Server的Query Analyzer提供了许多帮助我们优化数据库的工具。在这里,Query Analyzer显示了一个查询的执行计划。Query Analyzer除了执行查询之外,还提供有关查询执行时间的统计数据。

SQL Server提供了四个工具:Enterprise Manager,Profiler,Index Tuning Wizard,以及Query Analyzer。Ent
...全文
29 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yang_ 2002-05-21
  • 打赏
  • 举报
回复
不错,收藏!!

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧