设计可扩展的oracle应用

23
设设设设设设 Oracle 设设

Upload: james-tong

Post on 26-May-2015

5.488 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 设计可扩展的Oracle应用

设计可扩展的 Oracle 应用

Page 2: 设计可扩展的Oracle应用

我是谁 ?

Jametong@ 童家旺 work @alipay (2010.8-) Blog @http://www.dbthink.com/ mail@ [email protected] Weibo @ Jametong

Page 3: 设计可扩展的Oracle应用

议程

可扩展性 ? 纵向扩展 Vs 横向扩展 使用连接池 使用绑定变量 使用批量接口 使用各种缓存 范式化 Vs 反范式化

Page 4: 设计可扩展的Oracle应用

可扩展性 ?

Page 5: 设计可扩展的Oracle应用

可扩展性 ?

Page 6: 设计可扩展的Oracle应用

可扩展性 ?

Page 7: 设计可扩展的Oracle应用

可扩展性 ?

当我们增加一个系统中的资源,并能获取与增加的资源保持适当的比例关系的性能提升,我们就认为这个服务具备了伸缩性。

提供更多单位的服务 处理更大单元的工作量

http://www.dbthink.com/?p=352

Page 8: 设计可扩展的Oracle应用

Amdahl's law

使用多处理器进行 并行处理能够提升的性能的比例受限于程序中需要串行处理的比例 .

Maximum speedup <= p / ( 1 + f * (p – 1 )) P 为并行的数量 , F 没有提升的部分所占比

例 . Percentage improvement = • ( 1 – 1 / ( speedup factor ) ) *

100% Speedup factor 为上面等式的结果 .

http://en.wikipedia.org/wiki/Amdahl%27s_law

Page 9: 设计可扩展的Oracle应用

USL Scalability

使用多处理器进行 并行处理能够提升的性能的比例不仅受限于程序中需要串行处理的比例 , 还受限于进程之间的并发系数 .

Maximum speedup <=• p / ( 1 + f * ( p – 1 ) + k * p * ( p – 1 ) ) p 为并行的数量 , f 没有提升的部分所占比例 . k 为多个进程相互之间的交互影响

Oracle 中的 Enqueue 或者 Latch 争用 .

Guerrilla Capacity Planning Chapter 4 By Neil Gunther

Page 10: 设计可扩展的Oracle应用

可扩展性 ?

实现好的可扩展性,还可能吗?

http://www.dbthink.com/?p=352

Page 11: 设计可扩展的Oracle应用

可扩展性 ?

实现好的伸缩性,还可能吗?

完全可能

但是只有当我们在进行系统架构设计时充分考虑伸缩性时才可能实现

http://www.dbthink.com/?p=352

Page 12: 设计可扩展的Oracle应用

提高扩展能力的方式

拆分 —提高可并行处理的比例 异步 --- 降低系统之间的耦合度与争用 优化响应时间

降低单次处理的耗费的时间 / 资源 减少串行执行部分的比例

减少请求次数 批次处理 --- 降低需要进行处理的交互次数 使用缓存 --- 降低对后端的请求次数

Page 13: 设计可扩展的Oracle应用

横向扩展 Vs 纵向扩展 横向扩展 Vs 纵向扩展 水平拆分 ? 垂直拆分 ? 纵向扩展的限制 ?

单机处理能力 ? 设备 / 软件的维护费用 ? Oracle ExaData?

横向扩展的限制 ? 业务之间的耦合性 ? 系统架构的复杂性 ?

Page 14: 设计可扩展的Oracle应用

使用连接池

大家使用什么开发语言 ? Java ? PHP ? .NET ?

JBOSS connection Pool ? DBCP ? C3P0?

如果开发语言不支持 Connection Pool Oracle Database Resident

Connection Pooling Dedicated Server Vs Shared Server

Page 15: 设计可扩展的Oracle应用

使用连接池—性能比较

Page 16: 设计可扩展的Oracle应用

使用绑定变量

硬解析 – Hard Parse 软解析 – Soft Parse (Bind variable) 软软解析 – Softer Soft Parse

Session Cached Cursors 不解析

Parse Once Execute Many

Page 17: 设计可扩展的Oracle应用

不同解析方式下的性能

Page 18: 设计可扩展的Oracle应用

使用批量接口

使用批量提取接口 PStmt. setFetchSize(50) --- Java oci_set_prefetch($stid, 300); ---PHP

使用批量插入接口 Pstmt.AddBatch() ---Java oci_bind_array_by_name($stmt, ":c1", $arr

ay, 5, -1, SQLT_CHR); ---PHP

Page 19: 设计可扩展的Oracle应用

使用批量接口的性能

Page 20: 设计可扩展的Oracle应用

你了解哪些缓存 ?

缓存技术 ?

缓存方式 ?

缓存的内容 ?

Page 21: 设计可扩展的Oracle应用

使用各种缓存

缓存的使用场景 应用的读写比

使用缓存需要考虑的因素 缓存的一致性维护问题 数据的具体读写比 变更频率 业务对一致性的要求 使用何种缓存方式 .

Page 22: 设计可扩展的Oracle应用

范式化 vs 反范式化

为什么要进行范式化 ? 为什么要进行反范式化 ? 如何控制业务之间的耦合度 ? 改进行何种程度的反范式化 ? 反范式化带来的困难 ?

Page 23: 设计可扩展的Oracle应用

Any

Questions