通过持续的调优工作和监测可以找到运行中应用程序的最佳值。此时,UNIX内核的内存不易减少,需要有效地调优数据库内存区域,使用更少内存发挥相同水平的性能。如果内核内存使用约100 MB,并发用户为30名,每个Oracle进程的内存为 10 MB,假定 sort_area_size为 1MB,按以下公式计算出430 MB。100 MB+30×=430 MB因此,物理内存为1 GB的系统,可分配大约600 MB的SGA使用。......
2023-11-01
优化器因各种限制制定无效执行计划,或主要由更了解实际数据特点和应用程序用途的用户进行分析和判断,为制定更优化的执行计划而引导优化器时使用提示(HINT)。在制定由优化器执行的SQL语句的执行计划过程中,提示为用户提供了可直接进行介入的方法。
1)使用提示的原因
(1)优化器选择与预期路径不同的执行路径而影响性能时,为引导正确的路径而使用提示。
(2)校正应用的优化器模式、数据访问方法、连接方法以及顺序等。
注意:提示只影响SQL的处理路径,不会影响SQL的结果。提示是用户对优化器下达的指示,但优化器可能会忽略不合理的提示。
2)忽略提示时的情形
(1)语法错误(syntactic)—被识别成 comment(注释)而忽略。
(2)逻辑错误(semantic) :
①请求的访问与其他提示冲突或语法处理不合理时;
②请求使用前导列不使用的索引;
③在包含仅在CBO运行的功能的SQL上使用RULE提示;
④在查找已指定分区、并行处理选项的表时,即使要使用RULE优化器还是会使用CBO。
3)提示的使用方法
(1)提示在SELECT语句后以/*+提示区分 */的方式使用。
(2)意味着除了RULE和DRIVING_SITE外的所有提示将选择CBO用作优化器。无统计资料下使用HINT时应慎重。
(3)已指定 ALIAS(别名)的表名必须使用 ALIAS(别名)。
(4)若提示无效,则要检查 SQL处理机制是否请求不可用的路径。
参考以下例子:
如果按上述方法运行查询,则会执行FULL TABLE扫描。反之,如果按下述方法使用提示,则可以修改为使用emp表的pk扫描索引。
在最新版Oracle中两种情况都会执行索引扫描。以上例子是笔者为介绍提示而制定的执行计划。
4)常用的提示语句
常用提示语句如图2-7所示。
图2-7 提示语句
(1) OPTIMIZATION GOAL。
ALL_ROWS:以整个范围的处理速度为标准制定执行计划(连接时通常选择HASH JOIN)。
FIRST_ROWS:以部分速度处理为标准确立执行计划(连接时通常选择NESTED LOOP JOIN)。
CHOOSE:有ANALYZE信息时使用CBO,否则使用RBO处理。
RULE:通过SQL syntax制定执行计划。
(2) JOIN ORDER。(www.chuimin.cn)
ORDERED:按FROM子句中所列的表顺的序连接。
STAR:先连接 dimensional table后连接 FACT table。
(3) PARALLEL EXECUTION。
PARALLEL (table, degree):访问特定表时使用的并行处理进程数。
NOPARALLEL (table table … ):访 问特定表时请勿并行处理 。
(4) ACCESS METHOD。
FULL (table):全局扫描对象表。
INDEX (table index):访问特定表时使用的索引定义。
INDEX_DESC (table index):扫描索引时按倒序进行。
INDEX_FFS (table index):全局扫描索 引时 。
USE_CONCAT:有OR条件语句时分为两个以上的SQL语句并CONCATENATION(串联)结果。
NO_EXPAND:有OR条件语句时,请勿分开运行SQL语句。
(5) JOIN OPERATION。
USE_NL (table table … ):按顺序列 出执行 NESTED LOOP JOIN的表 ,与“ordered”一起使用。
USE_HASH (table table … ):按顺序列出执行 HASH JOIN的表,与“ordered”一起使用。
USE_MERGE (table table … ):按顺序列出执行 SORT MERGE JOIN的表,与“ordered”一起使用。
HASH_AJ / MERGE_AJ:使用 NOT IN子查询时请执行 HASH ANTI JOIN。
HASH_SJ / MERGE_SJ:使用EXISTS子查询时请执行HASH SEMI JOIN。
MERGE (table):如果Inline View中的表条件还存在于MAIN QUERY中,请进行合并处理。
NOMERGE (table):如果Inline View中的表条件还存在于MAIN QUERY中,请进行合并处理。
PUSH_SUBQ:访问特定表时如果有相关的子查询,请务必执行后再与表连接。
使用Orange Template Browser查看优化器提示如图2-8所示。
图2-8 Orange Template Browser查看优化器提示
单击方框部分图标()、单击最顶端菜单的[View]—[Template Browser]或按快捷键 Alt+F2则会运行[Template Browser]。 [Template Browser]将以树的形式对DML 、DDL 、PL/SQL 、PL/SQL control structure、Pseudo column、SQL function、SQL optimizer hint的目录进行排序,使用户创建指令时可以轻松使用指令规则。双击所选指令时,SQL Tool的 editor窗口中将生成 template。此外,单击该项目时将在底部的 comment选项卡中显示该项目的说明和事例,任何人都可以轻松使用函数和指令。而且[Template Browser]可以单独创建窗口,创建SQL时可以帮助用户方便快捷的进行操作。
(6) stats manager。 stats manager 工具(图2-9)可以帮助用户轻松生成表、索引、簇等段对象的统计信息,可按多种选项设置统计信息生成对象的选择和方法。而且 stats manager提供有DBMS_ STATS方法和ANALYZE方法,操作时DBMS_ STATS可将table、index、column、schema、database用作对象,ANALYZE 可将 table、index 用作对象。此外,可以不立即生成统计信息,只生成script作为参考资料使用。
图 2-9 Stats Manager工具
【注释】
[1]access method作为数据 access的方式,表示 INDEX ACCESS或 FULL-TABLE SCAN ACCESS, join method作为优化器的选择的方式,表示 NESTED LOOP、SORT MERGE、HASH JOIN等。
有关数据库性能管理与调优的文章
通过持续的调优工作和监测可以找到运行中应用程序的最佳值。此时,UNIX内核的内存不易减少,需要有效地调优数据库内存区域,使用更少内存发挥相同水平的性能。如果内核内存使用约100 MB,并发用户为30名,每个Oracle进程的内存为 10 MB,假定 sort_area_size为 1MB,按以下公式计算出430 MB。100 MB+30×=430 MB因此,物理内存为1 GB的系统,可分配大约600 MB的SGA使用。......
2023-11-01
统计信息中保存有列选择度、数据量等大量信息,因此基于规则的优化器可以更灵活地创建执行计划。extent是由相关联的数据块构成的逻辑单位。否则,会因表的random access造成表扫描的平均成本增高。排序操作成本并非用于访问对象数据的成本,而是用于排序已提取数据的成本。若使用以特定列为标准排序的索引提取数据时,可以减少额外的排序操作成本。要了解SQL语句实际应访问的对象范围程度才能计算实际成本,这是非常重要的概念。......
2023-11-01
HASH JOIN是突出SORT MERGE JOIN优点并弥补其缺点的连接方法。该连接是对连接的对象表应用 HASH函数进行合并的方法。其特征是不仅只使用 HASH JOIN,而且提供通过并行处理大容量数据的最佳解决方案。但不建议在OLTP等状况下使用,因为HASH JOIN已为大容量处理进行优化,会占用大量系统资源。不会受JOIN条件(链路)索引有无的影响。2)使用标准由于链路使用HASH Key,因此仅用于EQUI-JOIN。在执行计划中成为HASHING对象的表始终在最前面,但如果是OUTER JOIN则完全相反。......
2023-11-01
SORT MERGE JOIN指各自访问两侧表的处理范围后逐一扫描排序结果,同时使用连接条件进行合并的方式。通过SORT MERGE JOIN引导调优的情况几乎不存在,但可能对减少RANDOM ACCESS、大容量处理对象集有效。以下将介绍SORT MERGE JOIN的其他特征以及能保证良好性能的情形。通常NESTED LOOP JOIN对待处理数据量较少的在线应用程序更为有效,因此请勿随意使用SORT MERGE JOIN。......
2023-11-01
1)例子(一)正确使用SQL的例子(一)如图5-12所示。因此B.ORDD = : TrDay或B.ORDD = : WorkDay的扫描范围较窄,使用索引时响应速度非常快。在这种情况下,优化器使用OR从内部分为两个SQL语句并各自使用索引,再将执行结果合并为一个结果。图5-13正确使用SQL的例子(二)问题:连接的两个表的条件中决定扫描范围的条件是"AND SUBSTR LIKE : IN_org_cd AND SUBSTR < 600000"。因此可按以下方法变更条件公式并使用相应索引。......
2023-11-01
而重中之重仍然是调优访问数据库SQL语句的方法,因为很少能像SQL调优这样可以在短时间内以低成本得到效果。因此,为了性能考虑,开发者应不遗余力地投入时间和精力进行SQL调优。如果对未优化的SQL进行调优,则计划增设容量的许多企业都无须执行容量增设。大量数据排序的SQL或者大量访问数据块的未优化的SQL,可能会过量地使用内存。就因为这种现象,才会因未优化的SQL而出现磁盘I/O增加的情况。SQL的优化过程必然也涉及索引的优化。......
2023-11-01
为根据不同情况使用适当的索引,要学习各种类型的索引。因为只有明确了解表和索引的概念才能轻松解决复杂的内容。创建索引抽屉时,应考虑偶有发生的损益分歧点,考虑是否创建。总体来说,索引是用户使用SQL语句查找时为提高查找速度而创建的对象。但若创建太多索引,购买新书或废弃时,会产生额外的维护费用。这是由于添加或删除书籍时应更新现有的索引抽屉。......
2023-11-01
实例已启动意味着数据库系统运行所需的后台进程已启动,并且处于“确保内存可用于数据处理”的状态,这种实例的调优将成为DBMS性能调优的重要基础。1) DBMS 内存 区域——SGASGA 是作为实例启动时确保控制器信息保存和数据处理空间的内存区域,存在于实例访问的所有进程共享的内存区域中。SGA相关调优的基准基本以命中率评价为主,通过适当地调整相关参数,将实际运行反映到评价结果中。......
2023-11-01
相关推荐