性能优化的原则:
1) 提高操作中最慢部分的速度
2) 剔除不必要的操作
获取性能的技术:
基于数据使用模式生成索引
问题:需要加载索引,加载时间可能会比较长
需要额外的存储空间
在线更新索引,会带来其他的性能问题
补充:稀疏索引-对表格的一部分数据记录进行索引(大部分dbms不支持,需编写代码)
使用数组
将数据物理地组织在一起
表格合并
将多个经常联合使用的表格合并成一张表,可以一次访问到这些数据,减少IO
建立冗余数据
一些描述性字段可以在需要它的数据表里冗余,而不是每次要去访问属性表获取描述,浪费额外的IO
聚集数据
如果需要重复进行相同的底层数据聚集操作,可以建立起对应的聚集表格,并允许用户访问聚集值
拆分事务使IO最少
将事务拆分成几个较小的事务,而不是一次完成造成大量的IO和序列等待
工作日管理
对高性能的时段进行拆分,在可能的闲时运行大事务或长序列事务
容量计划和管理
监视系统活动,分析趋势,主动扩展系统资源;采用并行体系,使得系统性能可以获得线性扩展
管理大容量数据
对数据仓库中老化的数据,可以转移到二级存储设备中,因此可以存储大量数据而不会降低系统性能
原因:索引可能变得过大而且低效
数据因基本空间问题,进行应急空间而难以访问
散列数据冲突,可能出现两行数据在同一算法上相同的键值
顺序搜索需要太长的时间
长数据链的创建
数据集市与性能
数据集市可以满足所属部门的需求,使用性能高,而且分散了数据仓库的压力
ETL效率和性能
ETL尽量设计成独立运行单元,可以支持更大容量的数据流;如果使用公共接口,会出现性能问题
补充:尽可能使用快照,每次生成新的生产数据的快照,而不是更新已有数据,当然可能带来记录数量的问题,而且不可能在所有情况下适用
移动少量数据
对少量数据的频繁移动,而不是对大量数据的非频繁移动(会造成阻塞和系统等待队列)
使用日志文件
尽可能的使用日志文件,因为包含细节数据,而且可以离线处理,不会造成生产系统的额外负载
生成在线报表
一次性生成报表,并保持在线状态,可以减少对系统的重复访问
重复查询
与报表类是,对查询结果保持在线,也有助于优化重复查询的性能
滚动式汇总数据
每天结束时,将这一天的细节数据汇总存入每天的数据表,每周、每月同理操作。可以减少细节数据的重复访问,减少资源开销。