1.
請在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' ;
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'
改一下
另外:对单个表执行统计分析的语句如下:
EXECUTE dbms_stats.gather_table_stats (ownname=>'citic', tabname=>'col_cust_id',estimate_percent=>50,cascade=>true)
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> connect sys/sys@( 你们那里的 sid) as sysdba;
SQL> alter system set timed_statistics = true;
System altered
-- 使用 statspack 收集统计信息时建议将该值设置为 TRUE ,否则收集的统计信息大约只能起到 10% 的作用
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;
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
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