用户名: 密码: 免费注册 忘记密码? 网站地图 | 加入收藏 | 设为首页
首页 | 新闻 | 工具 | 系统 | 办公 | 聊天 | 多媒体 | 网页 | 运营 | 平面 | 欣赏 | 数据库 | 程序 | 服务器 | 组网
网页 | 3dmax | Ghost | Windows Xp| Dreamweaver | photoshop | Flash | office | Alexa | Css | QQ | Asp | PHP | Jsp | Access
Flash MX 2004入门 | 网站推广策略 | CorelDRAW入门 | ASP学习 | 网站建设大师功 | Word入门
  iTbulo.com > 学院 > 数据库开发教程 > Mssql教程 > Mssql使用技巧 > 正文
用共享游标提升 SQL 性能
iTbulo.COM 2007-4-23 动态网站制作指南()

当cursor_sharing采用相似语句共享游标的时候,硬解析转换为软解析。注意,由于判断语句相似性的附加成本,软解析比已使用绑定变量的应用的软解析(用绑定变量在内部替换文字标量)花费要昂贵一些。但是,完全保存在CPU内部,内存和锁竞争任然需要考虑。
对于cursor_sharing,Oracle任然首先搜索一个精确匹配。只有当一个完全相同文本语句的游标没有找到时,Oracle搜索一个相似语句的游标。这样做是为了确保当遇到相同的没有硬编码文字标量的SQL文本的时候,不会对性能有所影响。
因为在寻找游标之前置换文字标量,其他的Oracle优化,像session_cached_cursors和cursor_space_for_time 可以方便地和cursor_sharing整合。例如,将cursor_sharing和session_cached_cursors设置为一个合理的值,在文字标量被内部绑定变量置换之后,相似语句就可以使用缓冲打开游标。
主要好处的概要如下:
l         应用程序不需要做改变
l         对已经使用绑定变量的语句没有副作用
l         使用SIMILAR,经常共享的游标不会影响执行计划
l         作为最后的办法,所有的相似语句都可以用FORCE强制共享游标
忠告
混合语句(Mixed statements)
混合语句是既有绑定变量也有硬编码文字标量的语句。如:
INSERT INTO T VALUES(5, ‘alpha’, :X)
如果是使用Oracle7 OCI的客户端,混合的相似语句不会通过cursor_sharing共享游标;在更新的版本中可以共享游标(从Oracle8 OCI开始)。实际上,这也同样适用于在服务器上的PL/SQL存储过程的SQL语句,因为在服务器上的PL/SQL使用了较老的客户端接口。
通过PL/SQL的静态SQL
Cursor_sharing对于在PL/SQL中的静态(嵌入)SQL没有任何影响。
存储概要(Stored outlines)
任何存储概要建立都没有将cursor_sharing设置为FORCE或SIMILAR,当cursor_sharing被设置时(FORCE或 SIMILAR)速度并不会有提升。那是因为存储概要被SQL文本索引,当前的cursor_sharing实现修改语句文本。为了使用带有游标共享的存储概要,它们必须使用create_stored_outlines参数重建(并且不要使用创建概要语句)。
 
耗费(Overhead)
使用FORCE或SIMILAR参数,搜索为相似语句创建的游标存在一个耗费。像前面提及的,这包括:
l         用原始语句文本搜索游标
l         用内部绑定变量替换文字标量,并且基于新文本的搜索
当共享游标工作的时候,这个耗费并不重要,因为大量的硬解析会被花费很小的软解析替换。但是,当游标共享没有明显的增加的时候,这些耗费会对性能产生负面的影响。在三种情况下它会发生时:
1.       应用程序没有使用绑定变量,发布相同的语句,并且没有相似语句
如果应用程序一直用同样的文字标量硬编码执行同样的语句,它会发生。这样的应用程序默认使用软解析,并且设置游标共享为FORCE或SIMILAR,会使软解析更昂贵。
 
针对这样一个应用的情况,有一个窍门可以使用:在共享池暖启动以后,也就是,在所有有相同文字标量的语句都被编译了以后,cursor_sharing可以被设置为FORCE或SIMILAR。这种情况下,Oralce会立刻发现哪些语句的游标,避免额外的消耗。
 
如果在一个应用中,有一些语句使用同样的文字标量而有一些语句改变文字标量,这非常的有用。
 
2.       应用程序发布不同结构的语句,因而没有任何相似语句
这样的应用默认使用硬解析,设置cursor_sharing为FORCE或SIMILAR会使硬解析更昂贵一些。
 
3.       没有使用绑定变量的应用,设置cursor_sharing为SIMILAR,大部分相似语句被次最优化共享
这样的应用默认采用硬解析,将cursor_sharing设为FORCE,大量使用软解析。设置cursor_sharing为SIMILAR,将使硬解析更昂贵一些。
 
使用FORCE
使用FORCE可能会导致一个非常坏的执行计划被使用。在有些情况下,坏的执行计划和好的执行计划之间的差异是非常重要的,如,DSS环境。因此,Oralce不推荐在这种情况下使用FORCE。

上一页  [1] [2] [3] 下一页

文章搜索
相关资讯
相关文章 相关下载
Mysql关于数据库和表的几个最基本命令
成批更改sql server数据库所有者的对象
SQL SERVER 2000 安装
Mysql数据库操作新手入门,手把手的教会你
SQL Server 存储过程嵌套示例
焦点信息