龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

Oracle性能调整的要点之数据库配置和IO问题

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
降低磁盘的IO 分散磁盘的IO 表空间使用本地管理 1. 将文件分散到不同的设备上 a. 将数据文件与日志文件分开 b. 减少与服务器无关的磁盘IO c. 评估裸设备的使用 d. 分割表数据 2. 表空间

降低磁盘的IO

分散磁盘的IO

表空间使用本地管理

1. 将文件分散到不同的设备上

a. 将数据文件与日志文件分开

b. 减少与服务器无关的磁盘IO

c. 评估裸设备的使用

d. 分割表数据

2. 表空间的使用

系统表空间保留给数据字典对象

创建本地管理表空间以避免空间管理问题

将表和索引分散到独立的表空间中

使用独立的回滚表空间

将大的数据库对象保存在各自独立的表空间中

创建一个或多个独立的临时表空间

下列数据库对象应该有单独的表空间:数据字典、回滚段、索引、临时段、表、大对象

3. 检查IO统计数据

Select phyrds,phywrts,d.name from v$datafile d,v$filestat f where f.file#=d.file# order by d.name;

检查最有可能引起磁盘IO瓶颈的文件。

4. 分割文件

可以通过RAID和手工进行

Alter table table_name allocate extent (datafile ‘fiile_name’ size 10M);

但手工操作工作量很大。

5. 优化全表扫描操作

a. 检查有多少全表发生:

Select name,value from v$sysstat where name like ‘%table scan%’;

table scans (short tables)/ table scans (long tables)与全表扫描相关,如果table scans (long tables)的值很高,说明大部分的table access 没有经过索引查找,应该检查应用或建立索引,要确保有效的索引在正确的位置上。

合理的DB_FILE_MULTIBLOCK_READ_COUNT能减少table scan需要调用的IO次数,提高性能(与OS相关)。

b. 查看full table scan操作:

Select sid,serial#,opname,target,to_char(start_time,’HH24:MI:SS’) “start”,(sofar/totalwork)*100 “percent_complete” from v$session_longops;

通过v$session_longops里的sql_hash_value与v$sqltext关联,可以查询导致full table scan的sql。

6. Checkpoint

Checkpoint进行的操作:DBWn进行IO操作;CKPT更新数据文件头和控制文件。

经常进行Checkpoint的结果:减少恢复所需的时间;降低了系统运行时的性能。

LGWR以循环的方式将日志写到各个日志组,当一个日志组满时,oracle server必须进行一个Checkpoint,这意味着:DBWn将对应log覆盖的所有或部分脏数据块写进数据文件;CKPT更新数据文件头和控制文件。如果DBWn没有完成操作而LGWR需要同一个文件,LGWR只能等待。

在OLTP环境下,如果SGA很大并且checkpoint的次数不多,在Checkpoint的过程中容易出现磁盘竞争的状况,在这种情况下,经常进行Checkpoint可以减少每次Checkpoint涉及到的脏数据块的数目。

调节Checkpoint次数的办法:

◆ 增大日志文件;

◆ 增加日志组以增加覆盖的时间间隔。

7. 日志文件

建立大小合适的日志文件以最小化竞争;

提供足够的日志文件组以消除等待现象;

将日志文件存放在独立的、能快速访问的存储设备上(日志文件可以创建在裸设备上)。日志文件以组的方式组织管理,每个组里的日志文件的内容完全相同。

8. 归档日志文件

如果选择归档模式,必须要有两个或两个以后的日志组,当从一个组切换到另一个组时,会引起两种操作:DBWn进行Checkpoint;一个日志文件进行归档。

归档有时候会报错:

ARC0:Beginning to archive log# 4 seq# 2772
Current log# 3 seq# 2773……
ARC0: Failed to archive log# 4 seq# 2772
ARCH: Completed to archiving log#4 seq# 2772

建议init参数修改如下:

log_archive_max_processes=2
#log_archive_dest = ‘/u05/prodarch’
log_archive_dest_1 = “location=/u05/prodarch MANDATORY’
log_archive_dest_state_1 = enable
log_archive_dest_2 = “location=/u05/prodarch2 OPTIONAL reopen=10″ (或其它目录)
log_archive_dest_state_2 = enable
log_archive_min_succeed_dest=1
log_archive_dest_state_3 = DEFER
log_archive_dest_state_4 = DEFER
log_archive_dest_state_5 = DEFER
  1. Oracle性能调整的要点之SGA
  2. 利用脚本文件管理Oracle数据库
  3. Oracle数据库编写有效事务指导方针
精彩图集

赞助商链接