《Oracle数据库性能优化精解》由会员分享,可在线阅读,更多相关《Oracle数据库性能优化精解(46页珍藏版)》请在金锄头文库上搜索。
1、李轶楠Mail:ora-13331192030 技术服务人生,Oracle数据库性能优化精解,李轶楠Mail:ora-13331192030 技术服务人生,诊断工具中的七种武器,多情环 sql tuning advisor/sql access advisor:多情环似乎是一个情种,谁拥有它似乎都会产生感情,从而对许多江湖事看的很淡。在Oracle应用中,谁对性能影响最大,不言而喻,是SQL,准确地说是SQL语句的算法,可以说,80%以上的性能问题都可以通过调整SQL来解决或者缓解,拥有调优SQL性能的能力,基本上可以算作一个DBA高手咯。,李轶楠Mail:ora-13331192030 技术
2、服务人生,以前检查系统使用情况查看等待事件查看数据库分散读取上的等待事件通过以下方法识别 SQL(难以操作)识别具有大量数据库分散读取等待事件的会话并跟踪它们,或者在 OEM 中查看最突出的会话获得解释计划检查被访问的对象(大小/基数)查看 SQL 统计信息和/或与对象统计信息相比较 (v$sql) (难以操作)识别问题联系打包应用程序的供应商为供应商提供测试方案供应商提供补丁/升级安装在客户的下一个维护周期中的补丁/升级,Oracle10g查看 ADDM 建议根据链接来运行自动 SQL 调整接受来自 SQL 调整的 SQL 描述文件建议,李轶楠Mail:ora-13331192030 技术服
3、务人生,执行计划,执行计划是一系列的优化器用来完成SQL操作的步骤和操作,李轶楠Mail:ora-13331192030 技术服务人生,曾经我们如何查看执行计划,通过下面的工具能够看到执行计划EXPLAIN PLAN V$SQL_PLANSQL Trace SQL*Plus AUTOTRACE看到执行计划不是目的,优化与分析仍然靠DBA去努力。,李轶楠Mail:ora-13331192030 技术服务人生,SQL调优建议,SQL Tuning & Access Advisors能够对系统中的SQL语句提供优化指导 从多个不同的方向为SQL提供优化建议建议包括了:统计信息的重新收集,创建/删除索
4、引,创建/删除物化视图,是否需要物化视图日志,SQL语句的书写以及固化执行计划的SQL Profiling 通过存储在Oracle内部的SQL Profiling 能够在不改变SQL代码的基础上强制执行计划,SQLProfile,PackagedApps+,Indexes, MVs, Partitions,Well-tuned SQL,Customizable Apps+,李轶楠Mail:ora-13331192030 技术服务人生,SQL Tuning Advisor Overview,Add Missing Indexes,Modify SQL Constructs,Create a SQ
5、L Profile,Automatic Tuning Optimizer,SQL Structure Analysis,Access Path Analysis,SQL Profiling,Statistics Analysis,Gather Missing or Stale Statistics,DBA,SQL TuningRecommendations,SQL Tuning Advisor,李轶楠Mail:ora-13331192030 技术服务人生,SQL Tuning Usage Scenarios,SQL Tuning Advisor,ADDM,High-load SQL,Curso
6、r Cache,AWR,SQL Tuning Set(STS),User-defined,Filter / Rank,SQL Sources,Manual Selection,Automatic Selection,AWR,李轶楠Mail:ora-13331192030 技术服务人生,SQL Tuning in Oracle Database 10gEnd-to-End Workflow,Workload,AWR,one hour,A good end-to-end solution, but manual intervention is required,李轶楠Mail:ora-133311
7、92030 技术服务人生,Automatic SQL Tuning in Oracle 11g,Its Automatic!,Workload,李轶楠Mail:ora-13331192030 技术服务人生,Automatic SQL Tuning,完全自动的SQL优化自动捕捉高负载的SQL自动创建SQL Profile,不改变SQL代码自动优化 SQL不能完全取代DBA,代码的书写还是需要DBA来调整的,PackagedApps,Custom Apps,Automatic SQL Tuning,SQL Profiles,Nightly,Well-tuned SQL,Automatic impl
8、ement,Manually implement,SQL Analysis,Report,李轶楠Mail:ora-13331192030 技术服务人生,SQL优化指导,李轶楠Mail:ora-13331192030 技术服务人生,顶级SQL,李轶楠Mail:ora-13331192030 技术服务人生,运行SQL优化指导,李轶楠Mail:ora-13331192030 技术服务人生,SQL Access Advisor,同时考虑 索引解决方案物化视图解决方案两者的结合优化物化视图以获得最大化查询重写使用率快速刷新为快速刷新推荐物化视图日志将类似索引合并到单一索引,李轶楠Mail:ora-133
9、31192030 技术服务人生,SQL Access Advisor Overview,Partitions (11g only),MV and MV Logs,Bit-map indexes,Automatic Tuning Optimizer,Access Path Analysis,B*-tree indexes,DBA,Recommendations,SQL Access Advisor,除了像在 Oracle 数据库 10g 中一样可以分析索引、物化视图等,Oracle数据库 11g 中的 SQL Access Advisor 还可以分析表和查询以提供可能的分区策略 这在设计最佳模式
10、时可以提供很大帮助,李轶楠Mail:ora-13331192030 技术服务人生,诊断工具中的七种武器,离别钩 提示(hints),Oracle很强大的工具,优化SQL的利器,能够强制SQL的执行算法,确保SQL按照我们希望的执行计划执行。钩,用的好伤人,用不好伤己,hints也如此。非高手者,非思路清晰者,且忌乱用,用不好的话,你会很受伤的。,李轶楠Mail:ora-13331192030 技术服务人生,为什么要用hints,为什么有了CBO仍然考虑用hints:RBO只看规则CBO代价计算仍然有缺陷不能考虑实际运行环境什么时候用hints首选用于测试执行计划其次可用于在需求确定时,固化执行
11、计划常用的hints:FIRST_ROWS, ALL_ROWS ,RULEFULL(tab) INDEX( tab index ) NO_INDEX ( tab index ) USE_NL(tab)USE_MERGE(tab.) USE_HASH(tab1 tab2)它很锋利,小心“伤人”,李轶楠Mail:ora-13331192030 技术服务人生,一些典型的hints,1 与Optimizer Mode优化模式相关: FIRST_ROWS, ALL_ROWS : 强制CBO RULE : 强制RBO 2 读取方式: CACHE(tab) : 将数据强制保留在数据缓存中,不受LRU的影响
12、NOCACHE(tab):重新回到正常的LRU管理队列中 FULL(tab) : 强制全表扫描INDEX( tab index ) : 强制走索引 INDEX_ASC( tab index ) : 升序索引访问 INDEX_DESC( tab index ) : 降序索引访问 INDEX_FFS( tab index) : 强制快速索引扫描NO_INDEX ( tab index) : 强制禁止某个索引的使用INDEX_JOIN ( tab index) : 强制索引联合查询INDEX_COMBINE( tab index) : 强制使用位图索引INDEX_SS ( tab index) :
13、强制跳跃式索引扫描3 表连接顺序:ORDERED : 按照FROM中表名顺序连接LEADING: 将选择的表作为连接驱动表.,李轶楠Mail:ora-13331192030 技术服务人生,一些典型的hints,4 连接: USE_NL(tab) / NO_USE_NL(tab) :Use table tab as the driving table in a Nested Loops join. If the driving row source is a combination of tables name one of the tables in the inner join and th
14、e NL should drive off the entire row-source. Does not work unless accompanied by an ORDERED hint. USE_MERGE(tab.) / NO_USE_MERGE(tab.) :Use tab as the driving table in a sort-merge join. Does not work unless accompanied by an ORDERED hint. USE_HASH(tab1 tab2)/ NO_USE_HASH(tab1 tab2) :Join each speci
15、fied table with another row source with a hash join. tab1 is joined to previous row source using a hash join. (=7.3) 5 并行查询选项: PARALLEL ( table, , ) / NO_ PARALLEL (table) : Use parallel degree / instances as specified PARALLEL_INDEX(table, index, degree ,instances ) :Parallel range scan for partiti
16、oned index 6 其他:APPEND : Only valid for INSERT . SELECT. Allows INSERT to work like direct load or to perform parallel insert. NOAPPEND: Do not use INSERT APPEND functionality REWRITE(v1,v2) : 在MV上启用查询重写 NOREWRITE :在MV上禁用查询重写 DYNAMIC_SAMPLING(table level) : 动态采样,level可以从0-10,默认是4DRIVING_SITE(table): 分布式数据库中用,分布式连接确定将结果集传输到本地还是远端,如果远端结果集大,本地结果集小,而关联的结果集也很小,可以选择远端表,意味着本地的小结果集在远端作关联,