如何挑选Oracle优化器
挑选合适的Oracle优化器
Oracle优化器种类繁多:
a 规则型(RULE) b 成本型(COST) c 选择型(CHOOSE)
可通过调整init ora文件中的OPTIMIZER_MODE参数来设置默认优化器,例如:RULE、COST、CHOOSE、ALL_ROWS、FIRST_ROWS等,你当然也可以在SQL语句级或会话(session)级对其进行覆盖。
若想使用基于成本的优化器(CBO Cost Based Optimizer),你必须定期运行*** yze命令来提高数据库中对象统计信息(object statistics)的精确度。
若数据库的优化器模式设置为选择型(CHOOSE),则实际优化器模式将取决于是否运行过 yze命令。如果table已被 yze过,优化器模式将自动切换为CBO;反之,数据库将采用规则型(RULE)的优化器。
默认情况下,Oracle采用选择型(CHOOSE)优化器。为了避免不必要的全表扫描(full table scan),你应尽量避免使用选择型优化器,而直接采用规则型或成本型优化器。
访问Table的方式
Oracle采用两种访问表中记录的方式:
a 全表扫描:
全表扫描即顺序访问表中每条记录。Oracle通过一次读入多个数据块(database block)来优化全表扫描。
b 通过ROWID访问表:
你可以采用基于ROWID的访问方式来提高访问表的效率。ROWID包含表中记录的物理位置信息。Oracle通过索引(INDEX)实现数据和存放数据的物理位置(ROWID)之间的联系。通常,索引提供了快速访问ROWID的方法,因此基于索引列的查询可以得到性能上的提升。
共享SQL语句
为了防止重复解析相同的SQL语句,Oracle在第一次解析后将SQL语句存储在内存中。这块位于系统全局区域(SGA system global area)的共享池(shared buffer pool)中的内存可以被所有数据库用户共享。因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它与之前执行过的语句完全相同,Oracle就能快速获取已被解析的语句及最佳执行路径。Oracle的这个功能大大提高了SQL的执行性能并节省了内存使用。
遗憾的是,Oracle仅对简单表提供高速缓冲(cache buffering)功能,该功能不适用于多表连接查询。
数据库管理员必须在init ora中为这个区域设置合适的参数。当这个内存区域越大,可以保留更多的语句,共享的可能性也就越大。
当你向Oracle提交一个SQL语句时,Oracle会首先在这块内存中查找相同的语句。
需要注意的是,Oracle对两者采取的是严格匹配。要实现共享SQL语句,必须完全相同(包括空格、换行等)。
共享的语句必须满足以下三个条件:
A 字符级的比较:
当前被执行的语句和共享池中的语句必须完全相同。
例如:
SELECT*FROMEMP;
与以下任何一个都不同:
SELECTfromEMP; SelectFromEmp; SELECT*FROMEMP;
B 两个语句所指的对象必须完全相同:
例如:
用户对象名如何访问
Jacksal_limitprivatesynonym Work_citypublicsynonym Plant_detailpublicsynonym Jillsal_limitprivatesynonym Work_citypublicsynonym Plant_detailtableowner
考虑以下SQL语句能否在这两个用户之间共享:
C 两个SQL语句中必须使用相同的名字的绑定变量(bind variables)
例如:
第一组的两个SQL语句是相同的(可以共享)而第二组中的两个语句是不同的(即使在运行时赋予不同的绑定变量相同的值)
a
selectpin namefrompeoplewherepin=:blk pin; selectpin namefrompeoplewherepin=:blk pin;
b
lishixinzhi/Article/program/Oracle/201311/17116
处理器计划调整以优化性能选哪个
选择“高性能”选项卡。
处理器计划调整以优化性能,选择“高性能”选项卡。右键点击任务栏中的电池图标,选择“电源选项”,再选择“创建电源计划”选项,选择“高性能”选项卡,设置电源计划的名称和电池续航时间,在“高级设置”选项卡中,可以选择处理器的运行模式和电压。选择“最大处理器性能”选项,让处理器以最高频率运行,以达到最优性能表现。最后单击“确定”按钮,保存电源计划设置。