- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle开发优化基础.pptx
Oracle开发优化基础v1.0_cn
由PD团队于2016年制作;数据库开发员需要注意些什么?
如何快速定位及认知性能问题点
如何编写高性能SQL – 基础知识
如何编写高性能SQL – PLSQL优化Tips;数据库开发员需要注意些什么?
一般现状
自身问题
缺乏经验:年轻的开发员缺乏数据库基础知识和优化经验
偏重实现:项目时间紧张,更注重应用功能实现,少关注数据库性能
应用问题
黑盒使用:数据库像个黑盒子,开发需要访问通用API且其框架机制复杂隐蔽
模块设计:逻辑设计阶段还未想透, SQL实现在还未模块化,就先上马运行;数据库开发员需要注意些什么?
不过也请牢记:在尝试使用此优化前确保你的业务逻辑正确,在正确的前提下保证优化的性能
在尝试开发或优化时,确保你了解你正在使用的数据库
何种架构?(是RAC还是单实例?)
举例:sequence order问题为了避免由于sequence争用而造成锁等待,一般会sequence默认为cache 20 noorder,这可以看作是Oracle的一种默认优化,但是对于RAC下,就会存在无序问题
;数据库开发员需要注意些什么?
哪个版本?
举例:不同Oracle数据库版本,默认排序不同当数据需要排序时,你的语句中没有用到ORDER BY,你把它看作是一种优化,顺手为之,但是会有问题;数据库开发员需要注意些什么?
在尝试开发或优化时,确保你了解你所使用的Oracle内部函数
好用 ≠ 可用,不要给自己和DBA造成不必要的麻烦
举例:TABLE函数造成的性能问题Tivoli监控发现某数据库主机的CPU利用率比较高。经过查看发现, sql_id为ds7vkxa14xt70的SQL语句每次执行消耗超过30亿次逻辑读。且由于多个session同时执行相同语句,访问相同数据,引起相互资源争用。;数据库开发员需要注意些什么?
学习优化技术需与时俱进,不能总以老经验看待新事物
举例:关于EXISTS使用问题
使用EXISTS替代IN?
使用NOT EXISTS替代NOT IN?
使用表连接替代EXISTS?
;数据库开发员需要注意些什么?
如何做到性能下降较少的DB应用开发
懂得从DB角度来看潜在的应用问题
了解并承认DB处理瓶颈
理解Oracle基本操作
避免一些不佳的编码 (如单个SQL运行没问题,但在Oracle整体会有问题)
了解优化器行为,编写Oracle所期望的SQL
了解所用到的数据
除了在分支逻辑中意识到处理不同的业务数据之外,也请对所处理的数据量进行必要的预估处理
;如何快速定位及认知性能问题点
应用通过DB连接驱动程序(JDBC驱动等),访问数据库,SQL发出后由DB内部处理后返回
;如何快速定位及认知性能问题点
数据库处理时间
通过下图,了解哪些因素可能会成为瓶颈。可以看到数据库处理时间被细分成三部分:
1)CPU处理时间 2)等待时间【资源等待,同步处理】3)等待时间(磁盘I/O处理);如何快速定位及认知性能问题点
应用变得反应很慢!是因为?(开发员角度)
非SQL原因
需对应用、设置、网络等进行审查
SQL原因
仅一两个SQL需要优化
非常多的SQL需要优化,如多个SQL的单一化SQL修改等 (则需要审查整个应用程序逻辑及设置合理性)
;如何快速定位及认知性能问题点
应用调整
;如何快速定位及认知性能问题点
如何使数据库处理得更快
有效利用CPU资源
减少等待时间
降低磁盘I/O
降低同步处理所需时间;如何快速定位及认知性能问题点
开发员的SQL问题定位思路
DBA指出的问题SQL及当前正开发测试或正运行的SQL
考虑本质影响因素
是否有效使用CPU
磁盘IO的使用情况
同步处理情况
查看外在表现形式
锁等待情况
表连接和索引使用情况
软硬解析情况
扫描读取情况
分析SQL使用工具命令
set autotrace
execute plan(会在介绍执行计划部分讲到)
sql_trace
;如何快速定位及认知性能问题点
set autotrace
on 和 traceonly 的区别是后者不产生sql的输出结果,一般用后者。
前者不实际执行,只看执行计划;后者不实际执行,只看io
使用autotrace分析sql时最好执行两次,看第2次执行的输出
;如何快速定位及认知性能问题点
Session级别的sql_trace (1)
获取trace文件所在的路径,以及文件名:
对获取的trace文件使用ktprof进行格式化
关闭SQL_TRACE;如何快速定位及认知性能问题点
Session级别的sql_trace (2)
查询抓取sid, serial#
调用dbms_system.set_sql_trace_in_session(使用完后,记得关闭追踪,sql_t
文档评论(0)