1 索引对象简介
1.1 索引对象的概念
数据库对象是一种逻辑结构的集合,索引是供用户快速查找到记录的数据库结构,在逻辑上和物理上都独立于表的数据。索引可以在表内创建一个或多个列的组合,当建立索引以后表中数据会按照索引创建语句所定义的排序方式返回给用户。索引有多种类型,除了标准索引外,还包括唯一索引、位图索引、组合索引、基于函数的索引、反向键索引等。
建立索引能够提高 SQL 语句执行的性能,减少磁盘I/O。无索引查询,通常是全表搜索后才会得到结果,全表搜索会让数据库服务程序遍历表中的所有记录然后返回结果;而建立索引后查询,可以让数据库服务程序快速地定位到表中的确定行。当表被删除时所有与表相关的索引也将被删除。
索引可以被创建、重建和删除,索引建立语句:CREATE INDEX item_index ON itemfile (itemcode) TABLESPACE index_tbs;索引重建语句:ALTER INDEX item_index REBUILD;索引删除语句:DROP INDEX item_index。
创建索引是为了提升数据库查询性能,在使用索引时需要注意以下情况:
1) 对于小表来说,使用索引对于性能不会有任何提高;
2) 当索引列中有极多的不同的数据和空值时索引会使性能有极大的提高;
3) 经常执行更新、修改操作的字段需要谨慎创建索引,因为更新索引的开销会降低创建索引所期望获得的性能;
4) 不要将索引与表存储在同一个驱动器上,分开存储会去掉访问的冲突从而使结果返回得更快。
1.2 索引对象优化方法
在业务系统中针对索引对象的优化,主要包括三种方式:一是重建过高的索引层次;二是清除无效的索引;三是对索引碎片的清理。
2.2 风险防范措施
针对数据库对象的优化,总体应该遵循如下的风险防范原则:
1) 确保数据库备份完整可用;
2) 所有操作和检查环节都使用事前完成并预演通过的脚本,避免临时修改脚本;
3) 每部分完成,通过检查确认无误,再进行其它部分,避免互相干扰;
4) 专家现场支持,及时处理突发问题。
在遵循上述原则的基础之上,对索引对象的优化需要注意以下风险:
1) 监测时间不够,在一个监测周期内未操作过表,监测过后又用到了这个表,需要索引,但此时此索引已被列为被优化的对象;
2) 监控过后,需要取消在用索引的监控;
3) 监控时如果rebuild index ,会取消监控,同时索引标记为已使用,这种情况下会影响监控效果;
4) 监控时如果在做统计分析时涉及到此索引,索引也会标记为已使用,同样影响监控效果。
为避免上述风险发生,通常采用的措施是在监控期间停止database、schema、table、index等级别的索引收集,避免影响监控效果。
2.3 优化效果分析
数据库级别的性能数据主要是以下关键指标:响应时间、CPU时间、等待时间、物理读,这些指标可以看出目前平均每事务的反应速度、每事务需要消耗的CPU与IO量。为了得到优化的效果,还需要保证进行数据对比的时间内,数据库的负载基本相同。数据库的负载指标一般以执行的事务数、Redo size等指标来表示。表1是某业务系统的这些指标在索引对象优化前后的对比数据。
通过索引对象的优化,可以从对比表中明显看出性能得到了大幅提升,影响较大的数据库操作瓶颈主要集中在大表的查询操作、关联表的更新操作、大业务数据的统计分析操作等,在优化后其操作响应时间已经能够满足用户的业务需求。这些数据对比符合数据库索引优化方案的预期成效,也说明索引对象对数据库性能的重要影响。
3 总结
企业的业务系统经过长期的运作,积累了大量的业务数据,同时随着业务增长、流程优化、人员变动等因素,会造成系统性能瓶颈。此时,需要运维和管理人员根据实际需求,按照系统优化原则,制定详细、多番论证的优化方案,对系统实施优化,这样才能满足用户不断变化、业务不断增长的需求。该文通过详述数据库索引对象的优化方法、应用案例,阐述了索引对象对系统性能影响的范围和程度,并就优化方案给出了应遵循的原则和风险防范措施。在性能优化中,针对数据库性能瓶颈,索引对象优化只是其中最常见的一种方案,具体优化还需要根据对系统长时间监测情况的分析,做出正确选择。
参考文献:
[1] 罗海滨,范玉顺,吴澄.工作流技术综述[J].北京;软件学报,2000,11 (7).
[2] 盖国强.深入浅出Oracle数据库——DBA入门、进阶与诊断案例[M].北京:人民邮电出版社,2006.
[3] 卢辉.数据挖掘与数据化运营实践:思路,方法,技巧与应用[M].北京:机械工业出版社,2013.
[4] Kenneth E.Kendall, Julie E.Kendall .施平安,郝清赋,等,译,系统分析与设计[M].北京:机械工业出版社,2010.