AFC_DB优化
现象:
SC参数入库时,造成SCWS连接数据库查询数据缓慢,同时通过PLSQL登陆明显变慢,参数入库需要20分钟左右
分析:
1、SQL级分析
表空间大小、表索引、插入时SGA使用率,临时空间占用率
Hint:append 归档情况下,与普通insert产出同样的redo;非归档下,产生redo比普通insert少。
由于系统一直运行,并未在此方面做过更改,所以问题可能不在此方面。
2、SGA\PGA分析
高速缓冲区命中率,经过查询命中率在90%以上,没有问题。
select name, value from v$sysstat
where name in (‘consistent gets’,'db block gets’,'physical reads’) ;
select 1-(physical reads/(consistent gets+db block gets)) from dual;
如果命中率低于70%,则应该加大INITsid.ORA文件中的DB_BLOCK_BUFFERS(Oracle9i 参数名称为DB_CACHE_SIZE)参数值
3、磁盘数据写入分析
经检查,系统硬盘单文件写入可达10MB/s,使用率为37%(通过FTP上传100MB以上文件测试,通过iostat -xn 3监控)
但是当通过数据库,调用insert插入10W条以上数据时,磁盘写入大约为1MB/s,使用率100%,磁盘写入率低。
通过上述描述,排除磁盘问题,问题可能出在oracle进程往磁盘写入数据的途中,通过以下脚本测试
set serveroutput on;
DECLARE
lat INTEGER;
iops INTEGER;
mbps INTEGER;
BEGIN
– DBMS_RESOURCE_MANAGER.CALIBRATE_IO (disk_count,max_latency , iops, mbps, lat);
DBMS_RESOURCE_MANAGER.CALIBRATE_IO (2, 10, iops, mbps, lat);
DBMS_OUTPUT.PUT_LINE (‘max_iops = ‘ || iops);
DBMS_OUTPUT.PUT_LINE (‘latency = ‘ || lat);
dbms_output.put_line(‘max_mbps = ‘ || mbps);
end;
/
max_iops = 22886
latency = 0
max_mbps = 144
如何确保系统使用的是异步I/O呢?进行如下的查询操作就可以了:
SQL> COL NAME FORMAT A50
SQL> SELECT NAME,ASYNCH_IO FROM V$DATAFILE F,V$IOSTAT_FILE I
WHERE F.FILE#=I.FILE_NO
AND FILETYPE_NAME=’Data File’; /
NAME ASYNCH_IO
————————————————– ———
+DATA/orcl/datafile/system.256.768274859 ASYNC_ON
+DATA/orcl/datafile/sysaux.257.768274861 ASYNC_ON
+DATA/orcl/datafile/undotbs1.258.768274861 ASYNC_ON
+DATA/orcl/datafile/users.259.768274861 ASYNC_ON
+DATA/orcl/datafile/example.267.768275071 ASYNC_ON
+DATA/orcl/datafile/undotbs2.268.768275613 ASYNC_ON
6 rows selected.
4、redo log大小对一次大数据量提交的影响
解决方案:
1、redo log 4组,每组两个文件,文件大小512MB
ps -ef|grep ora_ 查看ora_dbw0的PID
通过TOP命令查看相应PID的CPU使用率
使用IOSTAT工具检查IO状况 iostat -xn 3
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup pfile=’/app/oracle/product/server_ee/11.2.0.3/dbs/initAFC010C1.ora’
ORACLE instance started.
Total System Global Area 2137886720 bytes
Fixed Size 2227704 bytes
Variable Size 1627390472 bytes
Database Buffers 503316480 bytes
Redo Buffers 4952064 bytes
Database mounted.
Database opened.
SQL> select status from v$instance;
STATUS
————
OPEN
SQL> show parameter sga
NAME TYPE
———————————— ——————————–
VALUE
——————————
lock_sga boolean
FALSE
pre_page_sga boolean
TRUE
sga_max_size big integer
2G
sga_target big integer
768M
SQL> alter system set sga_target = 2048M;
System altered.
SQL> create spfile from pfile;
File created.
SQL>
增大SGA_MAX_SIZE由768M至2048M,SGA_TARGET由768M至2048M。
磁盘写入增加了大概100KB/s。
2、设置使用磁盘IO模式,默认oracle IO数据文件存储方式为ASYNCH_IO,修改为以下
alter system set systemfileio_options = ‘DIRECTIO’ scope=spfile;
经测试,SC参数入库由20分钟缩减至2分钟,10倍提升。