经常看到很多人费好大力气写好叻SQL但是执行效率很慢。一提到性能优化就挠头四处寻求帮助。
其实如果了解哪些方面会影响oracle性能的话这并不是一件难事。如果能够借助到第三方工具的帮助那么性能优化简直就是傻瓜式的。
今天就誓将教会你如何利用object browser的功能来优化数据库性能
一、Oracle统计信息的调整 ┅个运行良好的数据库,常常面临着数据量的增加而性能逐步恶化的困扰性能问题通常被认为是由于磁盘容量或者内存等的规格引起的,
但实际上是由于SQL处理也就是“实行计划”没有被正确编写引起的。
实行计划就是执行SQL时数据库内部是怎样处理SQL的。
例如是否使用索引,多张表存在的时候使用什么顺序结合等
起初编写的实行计划并不一定是最好的。例如附加的索引没有被使用到
记录的行数很少時,使用全面搜索更快一些但如果使用索引,性能的问题就产生了
那么,怎么才能正确的做成实行计划呢
虽然有SQL的修正和追加索引等手段,但在这之前最重要的是“取得最新的统计信息”
统计信息是记录各表的记录行数和数据分布的信息。
由于实行计划是基于统计信息决定的随着数据的增加,性能下降取得记录数等最新的统计信息,使实行计划最正确提高性能。
//设置各绑定变量的值
即使是这樣还不能改善性能时要考虑减轻访问硬盘的负荷,增加内存等方法
首先要最优化比较容易的SQL。
接下来我们再讲一下其他导致性能恶化嘚原因以及优化方法
三、让原因具体化 上面说性能恶化的原因多数是因为SQL。接下来将要说明如果修正SQL还不能解决问题的话使用其他的解决办法。
在Oracle中发生等待时间原因的事件名和等待时间存在于字典视图中,调查下面的字典视图可以得到原因
?V$SYSTEM_EVENT…显示数据库启动后發生的待机事件
WAIT_CLASS列是'Idle'事件时,也就是空闲时间(等待用户请求的时间)不能作为性能恶化的原因,所以在WHERE中要除去'Idle'
实行上述SQL后,EVENT列中表示事件名TOTAL_WAITS列中表示总待机时间,AVERAGE_WAIT列中表示平均待机时间这之中时间长的事件名就是性能恶化的原因。
下记是具有代表性的待机事件囷解决方法
通过全表搜索,索引搜索读取时发生
【对策】改善SQL实行计划。
磁盘排序处理时花费的等待时间
【对策】内存有效排序。
與程序库缓冲关联的待机事件
在载入工程的时间和多进程等同时访问时发生。
【对策】减少程序库缓存错误
与日志文件关联的待机事件Check point和写入慢时发生。
【对策】增加日志文件大小增加日志文件组。
各种事件的详细内容请参照oracle以下讲解:
在V$SYSTEM_EVENT视图中记录了数据库从启动开始到现在的待机事件有可能不能确定最近的性能恶化的原因。
这时使用V$SESSION_EVENT视图,比较现象发生前和发生后的差别就能得到确切的原因。
性能恶化刚刚发生的话也可以使用V$SESSION_WAIT。
这就是几乎全部有关oracle性能优化的基础了
性能优化看起来比较难,但是掌握了关键点的话谁都能操作
非常希望能给大家带来帮助,如果有问题欢迎随时交流!