第10章 数据库的实施、运行和维护
10.1数据库的实施
定义: 根据数据库的逻辑结构设计和物理结构设计,
在计算机的系统上建立实际的系统结构、导入数据并进行程序的调试, p175图
10.1.1 定义数据库结构
- 为了实现数据库的逻辑结构设计和物理结构设计结果,必须建立实际的数据库,
- 即在确定了数据库的逻辑结构和物理结构后,开发人员使用具体的DBMS提供的数据定义语言(DDL)来严格描述数据库结构。
10.1.2 数据装载(是数据库实施阶段最重要的工作)
- 完成了数据库定义后,还须装入各种实际数据;
- 由于数据的来源不同,其组织方式、结构、格式会不同,可能出现源数据与新数据库结构不相容;
- 我们可以先将源数据提取出来,存入计算机,然后分类转换,成为符合新数据库结构的数据,再存入数据库,
-
具体步骤如下:
(1)筛选数据;(2)转换数据格式;(3)输入数据;(4)校验数据;(不相容情况)
-
为完成初始数据的录入,通常需要设计一些数据录入子系统,由计算机辅助完成入库工作,对某些纸质数据或数据量少的数据,可由人工一条条进行录入;
- 而对于数据量大的数据,可考虑采用批量数据装载程序来实现。
10.1.3 编写与调试应用程序
- 只有当数据库的结构建立好后,才能开始应用程序的编写和调试;
- 可使用模拟数据进行程序的调试。
10.1.4 数据库的试运行
- 应用程序调试完成并已有一小部分数据入库,就可以开始数据库的试运行,也称联合调试;
- 试运行十分重要,因为:
- 检测应用程序在接近真实的环境中运行是否符合设计要求;
- 检测系统设计的性能和评价。
-
试运行的工作主要有两个:
- 功能测试:运行数据库应用程序,执行各种操作,测试程序是否满足设计要求,找出不足,改进现有程序直到符合设计要求;
- 性能测试:测量系统的性能指标,分析是否符合设计目标。
10.2 数据库的运行和维护
- 数据库设计并试运行后,如试运行结果符合设计目标,数据库就可以真正投入运行了,同时也标志着开发任务的基本结束和维护工作的开始;
-
维护工作包括:
- 数据库的转储与恢复;
- 数据库安全性和完整性控制;
- 数据库性能的检测与改善;
- 数据库的重组(按照系统设计要求对数据库的存储空间进行安全调整)和重构(如逻辑结构等作必要调整)。
10.3 监控分析
- 数据库的监控分析:
- 指管理员借助相应工具在数据库运行过程中监测数据库系统的运行情况,掌握数据库当前或以往的负荷、配置、应用和其他相应信息,并对监测数据进行分析,分析数据库的性能参数和环境信息,评估系统的整体运行状态,为系统的安全运行和性能调优提供依据,并提出相应的改善措施,帮助管理人员尽早清除数据库的性能隐患;
-
监控分析的目的:保证数据库系统安全、稳定地运行,以便在发现不正常的情况时,及时对系统进行维护;
- 根据实现的方法不同,监控的机制分为:
- 自动监控机制;
- 手动监控机制。
根据监控的对象不同,监控分为:
- 对数据库架构体系的的监控;
- 对数据库性能的监控。
10. 4 空间管理
- 在数据库运行过程中,对数据库空间使用情况,特别是空间的增长情况进行监控,并采取相应的措施对空间进行管理非常重要;
- 空间管理主要包括(物理结构上的):创建数据库空间,更改空间大小,删除空间,修改空间状态,
- 新建、移动、关联数据文件等;
10. 5 参数调整
1、外部调整:(外部环境与数据库的性能有很大影响)
- CPU:当数据库操作对CPU的要求超过数据库服务器的CPU性能时,数据库性能就受到CPU的限制,使数据库操作变慢;如业务高峰时,CPU的使用量仍然很低,说明服务器CPU资源充足;
- 网络:大量的SQL数据在网络上传输会导致网速变慢,调整网络设备,也可以一定程度上提高数据库的性能;
-
调整内存分配
- 调整磁盘I/O(I/O时间)
- 调整竞争:(资源有限)
- 修改参数以控制连接到数据库的最大进程数;
- 减少调试进程的竞争;
- 减少多线程服务进程的竞争;
- 减少重做日志缓冲区竞争;
- 减少回滚段竞争。
10. 6 查询优化
- 合理使用索引:索引是数据库中重要的数据结构,根本目的就是为了提高查询效率,使用原则如下 :
- 经常在索引中作为条件被使用的列,应为其建立索引;
- 频繁进行排序或分组(即进行group by或order by操作)的列,应为其建立索引;
- 一个列的值域很大时,应为其建立索引;
- 如果待排列的列有多个,应在这些列上建立复合索引;
- 可以使用系统工具来检查索引的完整性,必要时进行修复。
-
避免或简化排序:因为磁盘排序的开销很大,当能够利用索引自动以适当的次序产生输出时,优化器就可以避免不必要的排序步骤,
- 以下是一些影响因素:
- 由于现有的索引不足,导致排序时索引中不包括一个或几个等待排序的列;
- group by或order by子句中列的次序与索引的次序不一样;
- 排序的列来自不同的表。
为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表。
如排序不可避免,那么应试图简化它。
- 消除对大型表行数据的顺序存取:在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响,解决方法就是对连接的列进行索引。还可以使用并集来避免顺序存取。
- 避免相关子查询:查询嵌套层次越多,效率越低,应尽量避免子查询,如不可避免,那么要在子查询中过滤尽量多的行;
-
避免困难的正规表达式:避免含MATCHES和LINK关键字的正规表达式,因为非常耗时间;
- 使用临时表加速查询:把表的一个子集进行排序并创建临时表,有时能加速查询;
- 用排序来取代非顺序磁盘存取;
- 不充分的连接条件;
- 存储过程;
- 不要随意使用游标;
- 事务处理。