数据块
应尽可能让数据块保存在内存当中
SQL
尽可能使用变量绑定技术来达到SQL重用 减少物理I/O 和重复的SQL 解析 从而极大的改善数据库的性能
影响性能的因素
热快(hot block)
当一个块被多个用户同时读取时 Oracle 为了维护数据的一致性 需要使用Latch来串行化用户的操作 当一个用户获得了latch后,其他用户就只能等待 获取这个数据块的用户越多,等待就越明显 这就是热块的问题 这种热快可能是数据块 也可能是回滚段块
- 数据块
通常是数据库的数据分布不均匀导致 如果是索引的数据块,可以考虑创建反向索引来达到重新分布数据的目的
- 回滚段数据块
可以适当多增加几个回滚段来避免这种争用
OLAP
即DSS决策支持系统或数据仓库
要对几亿条或者几十亿条数据进行聚合处理 这种海量的数据,全部放在内存中操作是很难的 同时也没有必要,因为这些数据快很少重用 缓存起来也没有实际意义,而且还会造成物理I/O相当大 所以这种系统的瓶颈往往是磁盘I/O上面的。 对于OLAP系统,SQL 的优化非常重要 因为它的数据量很大,做全表扫描和索引对性能上来说差异是非常大的
- 考核标准
考核标准是磁盘子系统的吞吐量(带宽)如能达到多少MB/s的流量 不看一条语句的执行时间可能会非常长,读取的数据也非常多
- 磁盘吞吐量
磁盘子系统的吞吐量则往往取决于磁盘的个数 Cache基本是没有效果的 数据库的读写类型基本上是db file scattered read与direct path read/write 应尽量采用个数比较多的磁盘以及比较大的带宽,如4Gb的光纤接口
分区技术
体现在数据库管理的方便性 并不能绝对保证查询性能的提高
- 通过分区交换的方式实现数据库加载
- 通过备份分区表空间实现备份
- 通过分区进行删除数据
分区对性能的影响
- 使得一些大表的扫描变得很快(只扫描单个分区
- 分区结合并行可以使得整个表的扫描会变得很快
优化器模式
- all_rows
绝大多数时候数据库上运行着的是报表作业 执行基本上是聚合类的SQL 操作,比如group by
- first_rows
对于一些分页操作比较多的网站类数据库
注意
不是大范围地使用分区关键字,而采用其它的字段作为where条件
- 本地索引,将不得不扫描多个索引,而性能变得更为低下
- 全局索引,又失去分区的意义
并行技术
在Oracle 10g中 可把一个任务,如select的全表扫描 平均地分派到多个RAC的节点上去
不需要使用绑定(BIND)变量
整个系统的执行量很小 分析时间对于执行时间来说,可以忽略 而且可避免出现错误的执行计划 OLAP中可以大量使用位图索引,物化视图 对于大的事务,尽量寻求速度上的优化 没有必要像OLTP要求快速提交,甚至要刻意减慢执行的速度
一般在完成大型任务时才使用
如在实际生活中,翻译一本书,可以先安排多个人,每个人翻译不同的章节,这样可以提高翻译速度 如果只是翻译一页书,也去分配不同的人翻译不同的行,再组合起来,就没必要了,因为在分配工作的时间里,一个人或许早就翻译完了
数据集市
数据仓库是企业级的,能为整个企业各个部门的运行提供决策支持手段 数据集市则是一种微型的数据仓库,它通常有更少的数据,更少的主题区域,以及更少的历史数据 因此是部门级的,一般只能为某个局部范围内的管理人员服务,因此也称之为部门级数据仓库 数据仓库向各个数据集市提供数据 几个部门的数据集市组成一个数据仓库 数据仓库中数据结构采用规范化模式 数据集市中的数据结构采用星型模式 通常仓库中数据粒度比集市的粒度要细
建库模版
- OLAP使用数据仓库模板
数据量大,DML少
- OLTP使用一般用途或事务处理模板
数据量少,DML频繁,并行事务处理多,但是一般都很短
- DDS 决策支持系统
典型的操作是全表扫描 长查询,长事务 但是一般事务的个数很少 往往是一个事务独占系统
参考资料
https://blog.csdn.net/weixin_39935887/article/details/83902522