解析Oracle8i和9i规划的稳定性
从oralce8.1,Oracle的新功能是存储概要,或计划的稳定性(计划稳定)。这个功能带来的三个好处。首先,你可以优化一个非常昂贵的语句的处理。其次,如果有一些语句,Oracle,需要长时间的优化(而不是执行),您可以节省时间减少优化相竞争。最后,它可以让你选择使用新的cursor_sharing参数无需担心优化执行路径。
这是知道如何使用存储配置文件的最好方法。我们从一些非常低效的SQL存储过程开始。我们应该注意我们不能修改源代码。
U3000
我们将了解如何跟踪SQL语句,并查看其在数据库中的当前执行计划,寻找一些改进SQL语句性能的提示,然后重新执行SQL语句,让Oracle使用我们的提示。
在这个例子中,我们将创建一个用户,在用户模式下创建一个表,并创建一个存储过程来访问表,我们将在存储过程中使用包装工具,这样我们可以通过反向方式获得源代码,然后我们将通过这个存储过程调试SQL的执行。
在本例中,我们假设存储时间非常慷慨,创建数据库是自动安装的。
准备工作
要创建一个用户,他的权限是:创建会话、创建表、创建过程、创建任何大纲和更改会话:
然后你需要的代码来创建一个存储过程来访问表。创建一个脚本调用c_proc.sql,如下:
当然,您也可以直接执行这个脚本来建立这个过程。但是,为了更有效地运行操作系统的命令行,执行以下命令。
包c_proc.sql iName =
响应是:
处理c_proc.sql到c_proc.plb
而不是执行c_proc.sql脚本生成的过程中,我们执行的c_proc.plb脚本,不看源代码。你会发现我们的SQL语句是不是在user_source查看发现。
{分页}
这个应用程序的作用是什么
现在我们已经制作了一个模拟的应用,我们可以运行它,打开sql_trace,看看会发生什么。我们会发现这个SQL执行全表搜索得到请求的数据。
在这个测试中,全表搜索可能是最有效的方法。但假设我们已经证明使用单列索引和等选项是最好的执行路径。我们如何修改它(不添加代码中的提示)
通过存储提纲,答案很简单。有几种方法可以实现我在下面所做的工作,所以不要认为这是唯一的方法。Oracle已经改进了它的特性,以便于使用,而且这里的技术可能会在将来的版本中消失。
你想用这个程序做什么
为了让Oracle按照我们的思路运行,有三个阶段:
启动一个新会话(连接)并再次运行它。首先,我们告诉Oracle,我们要跟踪我们要运行的SQL语句和SQL使用的路径。
为有问题的SQL语句创建更好的存储配置文件,然后用一个很好的替代问题。
启动一个新会话,并告诉Oracle在看到匹配的SQL时开始使用新的存储大纲,而不是使用通常的优化方法来执行它,然后再运行它。
我们必须停止并启动一个新的会话,以确保不保留在SQL缓冲区中的游标。存储配置文件生成和(或)只在游标被分析时使用,因此我们必须确认前面类似的游标已关闭。
启动会话并执行以下命令:
改变会话设置create_stored_outlines =演示;
然后运行一小部分匿名代码来执行该过程,例如:
然后停止收集执行的路径。否则,下面执行的一些SQL也会放在存储摘要表中,从而使下一个进程有点困难。
改变会话设置create_stored_outlines = false;
要查看此结果,我们可以查看以下视图来查看Oracle为我们创建和存储的概要细节。
我们可以看到,只有一个存储大纲在演示的分类。我们可以看到sql_text总结,我们可以看到类似但不同于我们原来的PL / SQL代码。这一点是很重要的,因为Oracle使用存储的配置文件只有当存储sql_text是SQL,要执行非常相似。事实上,在Oracle8i,两SQL语句是完全相同的,这是一个大问题,存储概要。
从清单中可以看到,存储配置文件是用来描述Oracle如何执行(或正在执行)SQL的一组提示。该计划使用了一个完整的表搜索——即使是一个完整的表搜索,Oracle也使用大量的提示来确保计划的执行。
请注意,存储配置文件通常被归类为一个类别;这里是演示分类,我们是由更改会话命令指定的。如果我们在上面的命令中使用true而不是demo,那么我们将在一个名为默认的类别中找到存储配置文件。
商店的轮廓有一个名字,必须在整个数据库中是唯一的。没有两大纲的名称是相同的,即使它们是由不同的用户生成的。事实上,轮廓是不是归谁,他们只有创始人。如果你创建一个存储文件和它相匹配的一个SQL语句,我会执行后,Oracle将适用于你的提示列表我的声明——即使这些提示我的模式是没有意义的。(这样我们有完全不同的选项来欺骗商店的轮廓,但这是另一篇文章。)你可能还注意到,当Oracle会自动生成一个存储配置文件,其名称包含一个时间戳这是接近一毫秒。
我们继续处理有缺陷的SQL,我们确定如果一个 / * + and_equal使用(so_demo,sd_i1,sd_i2)*暗示,Oracle将使用我们想要的执行路径,所以我们现在通过以下的方法来创建存储概要:
这明确地创建一个存储文件在我们的演示分类命名so_fix。我们可以查询user_outlines和user_outline_hints通过名称= 'so_fix'condition看到存储的特点是什么。
值得注意的是,全是很重要的(so_demo)线已取代and_equal(so_demo sd_i1 sd_i2),这是我们希望看到的。
现在我们要取代两存储的配置文件。我们认为,Oracle使用一个新的提示列表,当它看到前面的语句;我们要做一些欺骗做this.user_outlines和user_outline_hints视图是由两种形式产生(OL美元美元和OL提示),这是由outln模型拥有,我们必须修改这些形式;这意味着用outln连接数据库,并使用特权帐户更多的新形式。
幸运的是,这outln表没有任何引用完整性限制。方便之间的关系(提纲)OL美元和美元的OL提示(提示)形式的配置文件的名称定义(存储在ol_name列)。所以,仔细检查名称,我们可以通过对OL提示表名称美元交换交换商店分布的提示:
你可能会觉得这样做有点不习惯,尤其是按照建议的指南,但这个更新是允许在上,这是Oracle技术支持网站。然而,你也需要做的第二更新确保每个存储文件相关的提示的数量是一致的。如果你忽略了这个一步,你会发现你的一些存储分布在进出口过程中损坏或摧毁。
完成上述语句后,您可以启动一个新的连接,告诉它使用存储大纲,再运行这个过程,然后退出。同样,你可以使用sql_trace确认Oracle真的。告诉Oracle使用改进的存储配置文件,你可以使用下面的命令:
下一页改变会话设置use_stored_outline =铌{ 1 } { 2 }看是Oracle教程解析计划稳定Oracle 8i / 9i.sp;演示;
检查跟踪文件,你会发现,现在使用的SQL and_equal路径。如果你使用tkprof来处理和解释跟踪文件,你会发现,输出显示了两个矛盾的路径。第一个会显示and_equal路径使用,第二个将全表搜索。这是因为存储的轮廓可能不被调用时的tkprof计划是在SQL正在跟踪执行。
{分页}
从开发到生成环境
现在我们已经生成了一个我们需要转换到生产环境的摘要,存储配置文件的许多特性可以帮助我们做到这一点,例如,我们可以重命名存储概要,从开发环境导出它,并将其导入到生产系统中。首先,我们在生产环境的测试分类中进行测试,然后将其转换到产品分类:
改变轮廓sys_outline_020503165427311重命名为and_equal_sample;
改变轮廓and_equal_sample更改类别prod_cat;
为了将大纲从开发系统导出到生产系统,我们可以使用导出参数文件中的WHERE语句,因此我们的导出参数文件可能是:
甲骨文9的强化
在使用存储配置文件时,还有许多其他细节需要考虑。本书中,有一些限制,他们能做什么和如何工作,但他们中的许多人已经在Oracle 9消除。
用于Oracle存储配置文件最大的缺点是,它只能在相同的文本将被存储和被执行的文本。在Oracle 9,标准化处理可以消除匹配的局限性;对比之前,将文本转换为大写和删除。这提高了不同的SQL使用相同的存储配置文件的机会。
有在复杂的执行计划的多个存储块的一些问题,Oracle的Oracle 9的outln模式引入OL $节点表解决。这有助于减少美元的Oracle OL提示并能正确提示列表交叉运用他们在即将到来的SQL分区。然而,的存储配置文件之间交换暗示政策有副作用,因为OL提示表还需要美元的文本长度和不同细节偏移。当升级到Oracle9,您需要选择管理存储配置文件,某些方面,例如,特殊的数据集或缺失索引的第二图案,或存储视图内置的提示更换命名的文本表。
另一个特点是,对Oracle9管理存储配置有更多的支持,包括软件包允许你直接编辑存储配置文件的第一个版本。更重要的是,有一个选项,允许你管理系统的生产计划更安全。虽然没有人愿意在生产环境中做实验,在一些点,只有生产系统具有正确的数据分布和体积让你决定一个SQL执行的最佳路径。在Oracle9,你可以创建一个表的outln私人复制,发布公共变成了一个私人的实验大纲,所以你不需要看到你的私人存储配置文件被用户暴露的危险。我个人认为这是最后的手段,但我可以想象,有时候是必要的。更安全,如果你有一个全面的测试或开发系统,你可以使用这个功能来测试它的自由。
告诫
本文将为您提供存储摘要实验的足够信息,但在将该技术应用于生产系统时仍有一些需要注意的地方。
在Oracle8i,第一,outln具有默认密码,其中有一个非常危险的权限。你必须修改这个帐号的密码,在Oracle9i数据库,你会发现帐号被锁定。
第二个表保持存储的配置文件是在系统表空间创建的。在生产系统中,当你开始创建一个存储文件,你会发现,你将在该系统中使用的表空间的一个很大的空间。所以最好把这些表以外,最好是在自己的表空间不幸的是,其中一个表包含一个长柱,所以你可能需要使用口 /进出口的把这些桌子移到一个新的表空间。
第三虽然存储配置文件可用于解决严重的性能问题,它也有一个的开销。如果存储模式启动后,Oracle检查是否有相关的存储配置文件时,每一个新的语句进行分析。如果大量的报表不存储大纲,你需要平衡的开销与性能的改善,你很少能够对存储汇总表,看它是否是值得的。不过,这个问题只会出现在一个更严重的性能问题的系统。
结论
存储配置文件有很大的好处。当您不能修改源代码或索引策略时,存储配置文件是使第三方应用程序更高效运行的唯一方法。
此外,如果您仍然需要面对将系统从规则转换为优先级的问题,那么存储摘要将是您最有效和无风险的选择。
If you need to make the most of the benefits of storage summary, Oracle9 has some enhanced SQL that allows it to cover more classes, reduce overhead, and enable you to test, manage and install storage profiles more flexibly.
上一页
{ 1 } { 2 }的最后一页