日期:2014-05-16  浏览次数:20785 次

海量数据库及分区3——《12年资深DBA教你Oracle开发与优化——性能优化部分》

目录:

Oracle数据完整性和锁机制?
索引及优化之表分析?
表分析、约束及表间关系?
Oracle体系结构1
Oracle体系结构2?
海量数据库及分区1?
海量数据库及分区2?
海量数据库及分区3?
海量数据库及分区4?
高级SQL优化(一)??
高级SQL优化(二)??
高级SQL优化(三) 常用优化工具?
PPT和源码下载:????http://sishuok.com/forum/posts/list/6365.html
配套视频课程
????Oracle性能优化?http://sishuok.com/product/601?
????海量数据库和高级SQL优化?http://sishuok.com/product/602
?
?
分区的性能
分区剪切
分区剪切功能能极大的提高SQL性能,原因是Oracle优化器分析SQL的FROM语句和WHERE子句时,在构建分区访问列表时会首先排除掉不需要的分区,因而确保SQL只在相关的分区上操作,这就必然会带来数据范围的缩减,降低了I/O,中众所周知I/O是性能的瓶颈。
1.环境准备
?创建一个与表ACCOUNT_TRADE_CLL结构完全想相同的表ACCOUNT_TRADE_CLL_NP,但该表不分区,然后写入数据,且确保二者均没有建立索引。
?
详见附件脚本1
?
2.PL/SQL Developer执行计划设置
?
3.对比两个表的?执行计划
此时发生了分区剪切

?
?
此时未发生了分区剪切
?
结论:采用了分区的表的耗费为没采用的:41/240=17.08%
???? 时间为:1/3=33.33%,I/O耗费为:41/238=17.23%,CPU成本为:
???? 3748539/34875284=10.74%
?
分区智能连接
?? 当连接并行执行时,分区智能连接通过最小化并行执行服务器之间的数据交换从而能显著降低查询的响应时间。分区智能连接引人关注的特征就是?减少?响应时间、?提高CPU和内存资源的使用效率
在RAC(实时应用集群)环境中,分区智能连接同样能最大程度的减少数据互连(相互连接)之间的数据通讯,甚至能避免这种互连的数据通讯。
分区智能连接分为全分区智能连接和部分分区智能连接,使用那种连接,由Oracle数据库根据不同的情形决定。
?
1.全分区智能连接
?? 此时,将来自于相连的两个表的一对分区之间的很大的连接分解成小连接。只有当基于连接键的两个表是均衡的,或者参照分区时才可使用本特征。如:
假定表sales和customers通过列customer_id相连,该连接是一个大连接,查询某个1999年第三季度购买次数超过100的客户记录,则会使用全分区智能连接,如下:
SELECT c.customer_name, COUNT(*)
? FROM sales s, customers c
?? WHERE s.customer_id = c.customer_id? AND
???????????????? s.time_id BETWEEN TO_DATE('1999-07-01', 'YYYY-MM-DD')?? AND?????
????????????????????????????????????????????????? (TO_DATE('1999-10-01', 'YYYY-MM-DD'))
??????? GROUP BY c.customer_name HAVING COUNT(*) > 100;
上述SQL执行时整个customers表与salse表的第三季度数据相连,在一个大数据仓库中,这意味着数以百万计的数据行被连接,此时是一种明显的散列连接,如果此时两个表中的数据是按customer_id均衡分布的,则越发能缩短该散列连接的处理时间,原因是Oracle可以使用全分区智能连接。
在并行操作中要使用全分区智能连接时,最小的并行粒度也是分区,因此并行度也被限制为分区的数量。如,请求至少16个分区,则会导致查询的并行度也被设置为16。
下面是三种均衡化两个连接表的分区方法:
如右图,通常,在一个大事物中,由于customer表是字典表,因而数据量少,为了降低I/O和CPU时间,该表会被选择为驱动表。但在并行查询中,由于可以?使用并行查询且一般?最终只有几行会被选中以及?对小表?的限制条件(Where条件)少,所以大表一般被选择为驱动表。如果此时连接的两个表的列均建立了?主键索引或唯一索引,则对于并行查询,效率会更高。
(1).单级分区-单级分区的全分区智能连接
适合于R-R、H-H、L-L的单级分区连接的两个表,且分区键是建立在连接的两个列上。
?
??使用执行计划查看并行查询的选项包括:
? A.P->P,即PARALLEL_TO_PARALLEL,输出步骤重新分配到并行服务器的下一个集合,此时性能最好。
B.P->S,即PARALLEL_FROM_SERIAL,输出步骤返回至序列化的查询协调器(QC)进程。
C.PCWP(PWP), PARALLEL_COMBINED_WITH_PARENT,输出步骤在同一个并行进程内转向下一步,此时没有与父进程间通讯
? D.PCWC(PWC), PARALLEL_COMBINED_WITH_CHILD,输入步骤来自在同一个并行进程的前一步,此时也没有与父进程间通讯
?