sci*_*rus 5 oracle oracle-11g-r2
我正在尝试确定 oracle 客户端将预取的行数的值(即OCI_ATTR_PREFETCH_ROWS,在 JDBC 中公开为 setFetchSize),这将最大限度地减少服务器往返次数,而不会过度增加内存使用量。
为此,我需要从应用程序或数据库中收集有关查询的信息。oracle 能否提供有关以下方面的分类历史信息?
这是我有兴趣生成的报告类型的示例:
在名为 foo 的实例上,周一执行了 20,000 个查询。
60% 的查询返回少于 100 行,20% 返回 100 到 1000 行,20% 返回 1000 到 10,000 行。
50% 的查询返回小于 1KB 的数据,30% 返回 1KB 和 10KB 之间,20% 返回 100KB 和 1,000KB 之间
如果数据库服务器无法提供此信息,但您对我可以收集它的其他方式有想法,请随时回答这些信息。
这是一个有趣的问题,与我使用的方法有很大不同。我对你正在寻找的信息不太感兴趣。我会更关心每个查询显示(或处理)的行数。捕获该信息的位置可能在您的应用程序中。
通过启用查询审核并分析审核数据,您也许能够收集您正在查找的大部分内容。
对于使用完整结果集的批量检索,我通常会设置一个相对较大的预取值(100左右)。在某些情况下,调整可能很有价值,但我会将其限制为频繁运行具有大型结果集的查询,其中数据库获取是开销的很大一部分。
对于交互式应用程序,我通常根据页面上显示的项目数量调整预取限制。除非用户实际翻页,否则预取下一页的数据没有多大价值。根据我的经验,用户不会经常向下翻页。对于初始预取来说,第二页之后的任何内容都将是多余的。
编辑:根据您的评论,将预取大小设置为一两个屏幕的数据可能会减少链接上的延迟。获取未使用的数据会增加链接的负载。将链接设置为预取数据还可以减少链接上的负载。