haqer0825的专栏

少壮不努力,只能开夏利。吃得苦中苦,才能开路虎。

译 ADF View Object Performance Tuning Analysis

在下文我们将研究表格性能在各种显示方案下的调优:

我们将从顶部的优化过程中,浏览如下:查看ADFM和ADFBC

ADFM

在界面我们使用af:table组件

打开data control面板,拖拽一个VO到你的页面上做成一个table.

单击你最新的那个table然后选择属性,进入到behaviorshowdetail


FetchSize定义了 从服务器一次传递给客户端行的数量,FethcSize默认是与绑定的VO的迭代器的rangeSize是同步的。

为了获得最佳性能,Oracle建议保持同步表FETCHSIZE和迭代RangeSize,同时 在满足视图行数的前提下,rangesize应该尽可能的小。

更多表组件的性能方面的考虑,可以在这里找到:

table的 rangesize是个传统的属性,我们用户一般不会考虑其值。

打开jspx页面所对应的pageDefine文件,选择需要优化的table所对应的Iterator查看属性,RangSize建议等于25


Iterator'sRangeSize属性定义了从BC层传到ADFM记录的行数

当iterator创建时 RangeSize默认被赋值25

为了减少服务器客户端的交互传送TABLE的数据,Oracle建议把rangeSize的值设成你的UITABLE充满整个屏幕时的行数。

ADF BC

在VO中也要做出必要的配置

Open Model project -> select your view object -> General -> Tuning


或者在此VO被引用到某个AM中的单独调优路径


Open Model project -> Application Module -> Data Model -> View Object Instances -> Data Model -> select your view object -> press Edit… button -> Tuning


对于您的需求,您可以使用上述任何一种方法,但要记住,在第一种情况下,将配置所有实例的应用,而在第二种情况下只对选定的实例将被改变

in batches of 

首先我们需要设置 in batches of 这个域,它指的是一次同时从数据库里读取的记录数;

当视图对象创建领域分批被自动设置为1,这可能会影响性能,除非只有1行被取出,这几乎是从来没有的情况下。

而为了最优的性能,Oracle文档中告诉我们 in batches of 设置的数应该为n+1,其中n为UI展现给用户的行数,因为多出的1我们可以认为就不必再有下一次请求就可以让下个选项启用或禁用。这就是我们看到的图中显示的是26而给用户展现的却是25(iterator设置的和Fetchsize也是25).现在table中就会和服务器交互一次取出25行数据而如果VO in batches of 设为默认1的话则交互则要26次。

 Steve Muench建议in batches of 应该设为n+3,这个理论在https://forums.oracle.com/forums/thread.jspa?threadID=1073058争论不休。

Query Optimizer Hint field or QueryHint是用来提高查询速度用的。

在我们的例子中,查询优化器提示栏位设定为FIRST_ROWS_26在这种情况下,,一个基于成本的方法,用于优化与目标的最佳响应时间查询返回的26行=>更好的速度=>提高了整体性能。.尊重您的特殊需要,可以使用下面的查询提示:ALL_ROWS,FIRST_ROWS_n和FIRST_ROWS。

所有的 query optimization hints信息都会在下文说明

Access Mode

在默认情况下 access mode设置成Scrollable,只要您不通过大数据量进行迭代它都能满足您的要求。如果需要大数据集,您应改为 range paging或range paging incremental。
当我们的table来自一个VO包含100W条记录时,试图滚动现实另一次交互出现的数据时,如下窗口问题会展现爱你在浏览器中:

在控制台会抛出outofmemory错误。
所以access mode属性对我们来说是十分重要的,怎样选择合适的mode您最好阅读 chapter 39.1.5 Efficiently Scrolling Through Large Result Sets Using Range
更多的ADF VO性能调优操作如下:
BUG1:

确定您的Range paging cache factor设置为2
拖拽一个VO到PAGE上,滚动table上的行 则会提示 table’ s vertical scroll bar will DISAPPEAR。这个BUG在谷歌浏览器和火狐测试过
BUG2: 
access mode选择scrollable
range size 设为25
在page上使用键盘上的 up 和down 不会现实最后的page。就像hit a wall
您可以使用鼠标滚轴而不使用键盘,或者table的滑块。这只是在谷歌或火狐好用。
BUG3:
如果 access mode设为 RangePaging  
range size = 25或 
acess mode设为Range Paging incremental
range size = 1 
Range Paging Cache factor=1
查询table会提示currentrow is lost .同时在控制台报错误 no row found for rowkey.


阅读更多
个人分类: Oracle ADF
上一篇Oracle ADF 一个页面实现 维护区域Form和查看区域Table 方法 另一种方法(推荐)
下一篇ADF各种性能调优
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭