oracle 性能调优之旅开始

简介: 1、先看三篇帖子: www.itpub.net/thread-137600-1-1.html http://www.itpub.net/thread-124424-1-1.

1、先看三篇帖子:

www.itpub.net/thread-137600-1-1.html

http://www.itpub.net/thread-124424-1-1.html

http://blog.itpub.net/post/96/14353

执行下面的语句:

SQL> show parameter area_size;


NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------
bitmap_merge_area_size               integer     1048576
create_bitmap_area_size              integer     8388608
hash_area_size                       integer     131072
sort_area_size                       integer     65536
workarea_size_policy                 string      AUTO

我们只要知道一个问题,在这里sort_area_size=64K 和 hash_area_size=128K  是针对每个会话的,并不是针对整个数据库的。

1G内存的服务器上,内给到400--500M 给SGA。。2G 能给到1G; 8G 能给到5G。。通常用一个参考的公式来表达这个问题:

os使用内存+SGA+并发进程数*(sort_area_size+hash_area_size+2M) < 0.7* 总内存

不过现在10g ,11g中先后推出了SGA自动管理,内存自动管理。基本不用dba手动设置了。。


2、一个调优的案例分析

这个看了书上的一个调优的案例,总结出来的,具体的内容没有写(参照《oracle数据库性能优化》盖国强等著P69),主要是想同个自己看的第一个例子,来熟悉一般的调优过程。

问题表述:应用是一个后台新闻发布系统,前端展现的是一个大型网站。java开发应用,通过中间件连接池连接数据库。通过连接访问新闻网页极其缓慢,后台发布管理具有同样的问题。通常需要十几秒才能返回。这种性能是用户不能忍受的。

解决过程:

1、检查并跟踪数据库进程:在前台单击相关的新闻条目页面,同时进行后台进程跟踪。

SQL> select sid ,serial# ,username from v$session;

    SID    SERIAL# USERNAME
------- ---------- ------------------
    135      21065
    137      13248 SYS
    141       1793
    147        157
    157          1
    159          3
    160          9
    162       9589
    163          1
    164          1
    165          1


    SID    SERIAL# USERNAME
------- ---------- ------------------
    166          1
    167          1
    168          1
    169          1
    170          1

除了sys及后台进程外,其他的使我们诊断的目标,要对几个进程启用相关的进程SQL_TRACE

SQL>exec dbms_system.set_sql_trace_in_session(sid, serial#,,true);

.......

在这里要跟踪不止一个后台的进程,反正只要认为可疑的进程都要跟踪的。此时,前台的页面进行刷新,等待一段时间。然后关闭SQL_TRACE

SQL>exec dbms_system.set_sql_trace_in_session(sid, serial#,,false);

2、检查TRACE文件:在udump目录下找到相应的跟踪文件,用tkprof工具查看。看到有一个问题,经过了3892次查询,才查询出一条对应的数据记录。在执行计划里,看到这条语句用的全表扫描。(现在要思考为什么不是走的索引?)

3、登陆数据库检查相应的表结构:发现每次查询所用的articleid 列 有索引,但是没有被用到

。为什么呢?检查表结构发现 articleid列时 VARCHAR2类型的数据。而我们查询时,articleid=20224456565这是一个数值的类型。Oracle在执行这个sql查询时,发生了潜在的数据类型转换(把表中的article转换为 number类型,然后和20224456565这个值比较,相同则取出。)很明显,这样需要全表的转换,执行了全表的扫描。。

4、解决办法:解决的办法超级简单,只需要在查询语句中数字两侧加上引单号:articleid=’ 20224456565 ‘ 对于用单引号引起来的数字,oracle会认为是字符串、这样就消除了隐式类型的转换。再次查询,只需要查询2次,即可查询出一行。问题解决。

 






































相关文章
|
Oracle 关系型数据库 数据库
Oracle 11G常见性能诊断报告(AWR/ADDM/ASH)收集
Oracle 11G常见性能诊断报告(AWR/ADDM/ASH)收集
336 0
|
存储 Oracle 关系型数据库
9-3 Oracle数据字典和动态性能视图介绍
9-3 Oracle数据字典和动态性能视图介绍
170 1
|
2月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
78 1
|
4月前
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
397 2
|
5月前
|
SQL Oracle 关系型数据库
关系型数据库Oracle性能问题
【7月更文挑战第15天】
54 4
|
5月前
|
SQL 缓存 Oracle
关系型数据库Oracle性能问题
【7月更文挑战第16天】
78 2
|
5月前
|
存储 缓存 Oracle
Oracle数据库可扩展性和性能
【7月更文挑战第6天】
98 7
|
7月前
|
SQL 调度 数据库
Oracle-AWR性能报告解读
Oracle-AWR性能报告解读
105 0
|
7月前
|
SQL Oracle 关系型数据库
Oracle-动态性能视图解读
Oracle-动态性能视图解读
166 0

相关实验场景

更多

推荐镜像

更多