技术开发 频道

性能调优:ORACLE性能初步调整

【IT168技术文档】
在User Schema 上, 用人工指定方式指定 Tmp 的tablespace . 換句話說要人工定義一個tmp 的tablespace 給user schema.——为colm6v这个user单独开一个临时表空间, 个人认为调整之后效果不会有很明显的变化临时表空间的作用是当sql语句中出现order by, group by(也就是需要排序的时候),如果排序的数据比较少,就会在内存中排序;排序的数据量很大时,oracle会把排序的任务放在临时表空间中完成, 内存中排序(逻辑排序)比在磁盘上排序(物理排序)理论上快1000倍!所以临时表空间很大并不是一件好事情,说明sql中存在大量排序的动作,sql语句需要优化!    所以深圳那里需要看一下临时表空间的大小!

    当然johanna的意见也会有一定的作用,临时表空间独立出来之后,就不会和sys,system等一系列oracle 内部使用临时表空间的操作产生资源竞争!

    2. 請檢查SQL 使用到的where 條件是否均有定index,  除此以外, 檢查使用到的where 條件最好以index 之順序來寫——这部分比较复杂,也是性能最关键的地方,几乎所有的oracle专家都认为70%以上的性能调整都和sql语句优化有关,需要check所有的sql语句where后面的条件是否有用到index的必要,  工程量比较浩大!需要一个个小心谨慎的check!

    3. 把index 做一次 dbms_stats dbms.stats 是oracle内部的api, 可以对index,table进行分析,收集统计信息,这样oracle优化器就会有一个非常好的的选择,使性能达到非常好的方法如下:

SQL>select tt.table_name,tt.num_rows,tt.blocks,tt.empty_blocks,tt.avg_row_len from dba_tables tt where tt.owner='COLMTEST'; SQL>select ttt.index_name,ttt.num_rows,ttt.distinct_keys,ttt.avg_leaf_blocks_per_key,ttt.clustering_factor from dba_indexes ttt where ttt.owner='COLMTEST';

 执行上述两条命令之后会发现除了table_name和index_name,其余列的统计信息都是不完全的。 

SQL>execute dbms_stats.gather_schema_stats(ownname =>'COLMTEST'cascade=>true);

   执行完dbms_stats,再调用上述两句语句,会发现所有的列基本上都已经被填充!

    PS:执行统计比较慢,相当于所有table,index都扫描一遍的时间,'COLMTEST'改一下另外:对单个表执行统计分析的语句如下:

     4. 做過以上處理之後, 再看情形,  再依情況放參數。

    ——参数暂时不用调整!

    5.建议做一个STATSPACK通过Statspack我们可以很容易的确定Oracle数据库的瓶颈所在,记录数据库性能状态,迅速了解数据库运行状况。

    方法如下:

     1.      安装Statspack安装Statspack拥有SYSDBA(connect / as sysdba)权限的用户登陆。需要在本地安装或者通过telnet登陆到服务器。——客户端登录不可以

    2.必要条件:先创建名称为perfstat的表空间,至少100M

    3.在那台oracle数据库上用colmv6登录SQL*PLUS, 然后输入SQL> connect sys/sys@(你们那里的sid) as sysdba;SQL> alter system set timed_statistics = true;System altered——使用statspack收集统计信息时建议将该值设置为 TRUE,否则收集的统计信息大约只能起到10%的作用

    SQL> @C:\oracle\ora92\rdbms\admin\spcreate.sql;输入 perfstat_password 的值:  perfstat输入default_tablespace的值:  perfstat输入temporary_tablespace 的值:  temp

    NOTE:SPCPKG complete. Please check spcpkg.lis for any errors.——需要出现上述语句才算成功,否则请查看。lis文件并执行,进行重建SQL> @C:\oracle\ora92\rdbms\admin\spdrop.sql SQL> @C:\oracle\ora92\rdbms\admin\spcreate.sql;

    4.查看文件夹会产生三个文件C:\oracle\ora92\bin spcpkg.lis spctab.lis spcusr.lis

    ——从下面开始都可以在客户端SQL_PLUS进行操作5.手动执行STATSPACK收集统计信息SQL> show user USER为"PERFSTAT" SQL> execute statspack.snap;     ——快照1

    6. 然后需要经过4-5个小时(跑批需要包含在里面),再执行SQL> execute statspack.snap;     ——快照2

    7.最后生成STATSPACK调整报告


SQL> @C:\oracle\ora92\rdbms\admin\spreport.sql;

Current Instance
~~~~~~~~~~~~~~~~
 
   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
  357371480 COLM                1 colm
 
Instances in this Statspack schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   DB Id    Inst Num DB Name      Instance     Host
----------- -------- ------------ ------------ ------------
  357371480        1 COLM         colm         STEVENHUANG3
 
Using  357371480 for database Id
Using          1 for instance number
 
Completed Snapshots
 
                           Snap                    Snap
Instance     DB Name         Id   Snap Started    Level Comment
------------ ------------ ----- ----------------- ----- ----------------------
colm         COLM           1 11 10 2006 21:5     5
                                0
                                        2 11 10 2006 21:5     5
                                0
   
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入 begin_snap 的值:  1
输入 end_snap 的值2
End   Snapshot Id specified: 2
 
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is sp_1_2.  To use this name,
press <return> to continue, otherwise enter an alternative.
输入 report_name 的值report1.txt
 
End of Report

    8.查看产生的report1文档C:\oracle\ora92\bin\report1.txt

0
相关文章