Oracle11g新特性: Server Result Cache
Google订阅 | 鲜果榜 | Technorati | Delicious | 又拍 | Twitter | Oracle DBA | Taobao DBA | 管理 | 阿里妈妈

Oracle11g新特性: Server Result Cache

注:本文已经发表于IT168Oracle11g新特性之Server Result Cache),版权所有,未经允许,请勿转载。

对于同样的操作,如果能在多个process或者session间共享结果,对于性能优化自然是非常有帮助的。从oracle7开始提供的share pool,可以让同样的SQL可以解析一次,执行多次,有效的减少了多个session执行相同SQL语句时的硬解析,如果应用很好的使用了绑定变量,那么共享SQL对于系统整体性能的提升是不言而喻的。

那么,除了能共享SQL和执行计划,还能共享什么?直接共享SQL执行后的结果,使得相同或者部分相同的SQL语句甚至只需要执行一次,以后再次执行时就直接得到结果?没错,Oracle11g的新特性Server Result Cache就能提供这样功能。Oracle在白皮书上宣布,对于读频繁的系统,通过该特性,甚至有可能提升系统性能200%,对于大量报表的数据仓库项目来说,这个特性应该是一个不错的消息。

Server Result Cache通过在SGA中分配一个缓冲区来保存查询结果,Oracle引入了一个新的初始化参数来控制这个cache的大小:result_cache_max_size。可以在system、session、table或者语句级别来设置cache的使用。在语句级可以使用一个新的hint来控制是否缓存查询结果。另外,Oracle还提供了一个新的PL/SQL用来监控和管理Server Result Cache,比如可以清空整个cache的内容或者清空某个查询的结果,也可以生成cache的使用报告等。

既然使用了cache,自然会有cache查找和cache数据清除算法的问题。估计查找还会是通过hash算法,这样还需要引入几个相关的latch。Cache中的数据,也应该是通过LRU或者类似LRU的算法来管理其生命期。

Server Result Cache不仅仅能缓存整个查询的结果,也能缓存查询中某部分操作的结果,比如缓存一次排序的结果,就可以避免再次执行时的排序操作。对于一些比较耗资源的查询操作,缓存结果应该能很好的提升性能。不知道11g对于该特性的引入,会不会像Oracle7引入共享池一样,极大的改善系统性能呢?我们只好拭目以待更进一步的测试了。

除了Server端引入Result Cache,Oracle11g另外一个值得期待的特性就是Client端cache机制的引入。通过OCI接口,在Client端也可以缓存查询结果。典型的场景就是我们在应用服务器端缓存查询结果,这样在前端执行该查询时,甚至不需要到数据库中去执行该查询。客户端结果缓存在OCI进程中,可以被该进程中的多个session或者线程共享。客户端缓存机制通过一个新的初始化参数来控制:client_result_cache_size,当该参数大于0时,该特性被启用。同样的,该特性也可以在system、session、table或者语句级来设置。通过在服务端设置参数而不是客户端设置,可以集中的管理该特性,但是也可以在各个客户端单独进行设置,客户端的设置将覆盖服务端的设置。

通过在服务端和客户端引入对于查询结果的缓存机制,Oracle11g或许能极大的提高查询性能。对于一些读比较频繁的系统,比如数据仓库应用,Oracle11g或者更值得期待。

bookmark

本文网址:http://www.ningoo.net/html/2007/oracle11g_new_feature_server_result_cache.html

如果您喜欢我的Blog,欢迎订阅到Google | 收藏到Del.icio.us | 推荐到鲜果

相关文章 随机文章

本文Tags: , ,

1 条评论


(Required)
(Required, will not be published)