精通数据库管理

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
...全文
68 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yang_ 2002-05-21
  • 打赏
  • 举报
回复
不错,收藏!!
谢谢大家的支持,我会陆续上传相关电子书 由于体积较大,本书分两卷压缩,请都下载完再解压! Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二) http://download.csdn.net/source/3268312 内容简介   本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型、对象类型、大对象类型)。   除了为读者提供编写sql语句和开发pl/sql块的方法外,本书还为应用开发人员提供了一些常用的pl/sql系统包。通过使用这些pl/sql系统包,应用开发人员可以开发出功能更强大的数据库应用程序。本书不仅适合sql和pl/sql初学者,也适合于有经验的oracle应用开发人员。 前言 第一部分 sql和pl/sql相关工具  第1章 在windows 平台上安装oracle database 11g  第2章 配置网络服务名  第3章 使用sql database  第4章 使用sql*plus 第二部分 sql  第5章 sql和pl/sql综述  第6章 简单查询  第7章 sql单行函数  第8章 操纵数据  第9章 复杂查询  第10章 管理常用对象 第三部分 pl/sql  第11章 pl/sql基础  第12章 访问oracle  第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象类型 第四部分 pl/sql系统包  第23章 使用大对象  第24章 读写os文件  第25章 开发多媒体应用  第26章 开发web应用  第27章 dbms_sq动态sql  第28章 管理统计  第29章 使用数据库资源管理器  第30章 数据加密和解密  第31章 使用调度程序  第32章 使用flashback  第33章 使用重定义联机表  第34章 修正损坏块  第35章 使用日里民挖掘  第36章 使用管道  第37章 使用精细访问控制  第38章 使用精细审计  第39章 使用预警事件  第40章 转换rowid  第41章 其他常用包 习题答案

34,874

社区成员

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

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