浇铸

博客园 首页 新随笔 联系 订阅 管理

提升快车数据获取性能建议解决方案

一般性数据性能提升途经

1.连接

提升方式:

  1. 使用数据连接池,异步连接
  2. 使用语句分析工具进行查询语句分析,调整语法以提高索引利用程度.
  3. 尽量避免每次返回大量结果集

 

2.索引

改善方式:

针对表连接建立索引

3.数据缓存

  1. 调整数据缓存大小,提升缓存命中率
  2. 将热点表放入keep buffer cache, 防止其被挤出default pool 。从而减少physical read所带来的I/O开销。
  3. 使用Result Cache进行结果集缓存

 

快车获取数据解决方案分析

程序现状

  1. 每十秒根据发布时间得到最新的最多两百条数据
  2. 货物信息状态可能会随时发生变更,状态由0变成1,发布时间变更为当前时间.
  3. 使用EJB直接操作,获取数据,继而向客户端返回数据请求,未使用连接池,数据缓存.

 

数据库现状(非确定)

  1. 针对表连接做了唯一索引(即主外键关联)
  2. 库缓存性能情况:

NAMESPACE

PINS

PINHITS

RELOADS

INVALIDATIONS

PINHITRATIO

SQL AREA

119389

116961

22

0

97.9663118042701

TABLE/PROCEDURE

201813

200076

1

0

99.1393022253274

BODY

47

39

0

0

82.9787234042553

TRIGGER

695

693

0

0

99.7122302158273

INDEX

31

0

0

0

0

CLUSTER

668

657

0

0

98.3532934131737

OBJECT

0

0

0

0

100

PIPE

0

0

0

0

100

JAVA SOURCE

0

0

0

0

100

JAVA RESOURCE

2

1

0

0

50

JAVA DATA

6

4

0

0

66.6666666666667

 

PINS

PINHITS

RELOADS

INVALIDATIONS

REPARSING

329089

324844

23

0

1.28992461005989

命中率到了接近99%,但是由于数据库是开发测试用,具体使用性能不能作准

共享池大小:

POOL       SIZE

shared pool    125829120

改善建议

  1. 针对十秒内获取的两百条数据在EJB端进行缓存,返回给客户端的即EJB上存储的数据,而非每次即时的向数据获取
  2. 在货物信息表状态列建立位图索引,在发布时间上建立索引,提升筛选速度.
  3. 建立数据连接池,减少创建Connection消耗.
  4. 更改读写同步的请求方式,以提升查询速度.

想要完全避免是不可能的,主要还是避免频繁查询数据库,尽量将数据缓存在程序端,这样就能尽可能的避免等待资源

  1. 将查询的热点表(KC_INFO)加入到keep buffer,减少物理读取过程.
  2. 在客户端提交变更请求并执行后,非必要应避免commit,这样避免频繁写入I/O,与数据读取竞争资源,oracle优先于写入.

 

 

 

 

posted on 2010-06-04 15:25  浇铸  阅读(262)  评论(0编辑  收藏  举报