ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle 優化

oracle 優化

原创 Linux操作系统 作者:xhailiang 时间:2006-05-18 00:00:00 0 删除 编辑

Oracle 优化

1. Course Intraduction 0
2. Tuning overview 1

(1) 调整的先后次序

1. Tune the design. -- Application designers

2. Tune the application. -- Application developers

3. Tune memory. --|

4. Tune I/O. |-- DBA

5. Tune contention. |


6. Tune the operating system. --|

(2) 调整的基点和主要的可测量的目标

Database hit percentages 命中率是base line

SQL statements access the smallest possible number of Oracle blocks 访问尽可能少的数据块

response time, database availability, memory utilization(页面交换)

3. Oracle Alert and Trace Files 2

(1) USER_DUMP_DESTBACKGROUD_DUMP_DEST

USER_DUMP_DEST: SQL_TRACE, DEAD LOCK, 用户sessionsql语句的执行情况

BACKGROUD_DUMP_DEST: Alert.log, 系统后台进程的错误信息

(2) Alert.log文件的特性和内容

-- 启动时不存在则自动创建,存在BACKGROUD_DUMP_DEST路径下

-- 文件尺寸一直增长,需要人工清除

-- 包含内容有:

Internal errors (ORA-600), and block corruption errors (ORA-1578)

影响数据库结构,参数的操作,以及命令:CREATE DATABASE, STARTUP, SHUTDOWN, ARCHIVE LOG,RECOVER

实例启动时的非缺省参数 -- 启动时写入 控制文件和在线表空间备份

未完成的检查点

(3) SQL_TRACE设置的两个级别

Instance 参数中设定

Session ALTER SESSION SET SQL_TRACE=TRUE / DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(sid,serial#,TRUE/FALSE)

(4) 参数MAX_DUMP_FILE_SIZE限制User Trace文件的O/S Blocks

4. Utilities and Dynamic Performance Views 3

(1) Anylyze执行之后查询信息的字典:

DBA_TABLES and DBA_TAB_COLUMNS table storage within extents and blocks

DBA_HISTOGRAMS and INDEX_HISTOGRAM data about nonindexed and indexed column data distribution.

DBA_INDEXES and INDEX_STATS data about index within extents and blocks and indexation usefulness.

(2) 关于Latch

Latch的类型: Willing-To-Wait Immediate Gets/Misses/Sleeps的意义

Reports.txt中记录的Latchhit ratio>=99%,redo latch竞争应<=1%

DBA可调整的Latch争用区域: Redo allocation latch/Redo copy latch/LRU latch

(3) 动态视图

特点: X$表和V$_的同义词,属于sys,V$FIXED_TABLE,NOMOUNTMOUT时可以查询,TIMED_STATISTICS=TRUE记录WAIT_TIME

主要的视图

%EVENT 事件类视图 包含wait for event的统计 -- 注意%WAIT, wait for events or resource的信息

-- V$SYSTEM_EVENT , V$SESSION_EVENT

%STAT 统计类视图 V$SYSSTAT(Instance启动以来的统计)

%CACHE 内存方面的的统计视图,主要有V$LIBRARYCACHEV$ROWCACHE(数据字典的...),V$DB_OBJECT_CACHE

PX% 并行处理的信息

V$SESSION 记录所有用户连接的type(BACKGROUND/USER)

V$LOCK V$LATCH的区别: 前者是现有锁信息, 后者是锁争用统计信息

V$SYSTEM_EVENT(所有sessionInstance启动以来)/V$SESSION_EVENT(每个session)/V$SESSION_WAIT(当前活动session)

V$SEESION_WAIT.WAIT_TIME -- 要获取WAIT_TIME的值,必须要将TIMED_STATISTICS=TRUE(动态可改)

> 0 The session's last wait time

= 0 The session is currently waiting

= -1 The value was less than 1/100 of a second

= -2 The system cannot provide timing information -- TIMED_STATISTICS=FALSE

(4) 关于UTLBSTAT and UTLESTAT 工具

特点: 需要SYSDBA,创建了一些统计表和视图并在结束时除,DEFFERENCE记录开始和结束时统计的差异,report.txt

TIMED_STATISTICS=TRUE,统计期间发生中断需要重新运行Report.txt的内容Library Cache 涉及SQL,PL/SQL语句执行System 涉及buffer cache和逻辑读写Wait events 涉及等待的CPU时间

Latch 涉及内存中锁的争用,redo allocation/redo copy/LRU

Rollback contention 涉及undo header, 等待rollback header中的事务slot Buffer Busy Wait 涉及data block,segment header,undo header争用

Dictionary cache 涉及数据字典的get/miss

I/O 涉及数据文件的读写

Period of measurement UTLBSTAT,UTLESTAT开始和结束的时间

5. Tuning the Shared Pool 7

(1) 关于Shared Pool

特性: SHARED_POOL_SIZE决定大小, library cache + data dictionary cache + UGA + large pool

调整Shared Pool的原因: shared poolmissdatabase buffer cachemiss影响大,library cache首要

(2) 关于Large objects

特性: use LRU

tuning: generic code/bind variable/防止空间不足age outreload/防止object更改而re-parse

大的匿名块->小的过程/pin/reserve space for large objects

keep: 方法: DBMS_SHARED_POOL.KEEP / .UNKEEP

需要keepobject: 常用的包/常用的trigger/sequence

使用: Instance启动时keep防止碎片/ALTER SYSTEM FLUSH SHARED_POOLflush shared pool(no keep)

视图: V$LIBRARYCACHE(GETHITRATIO>90%,否则优化语句应用; reloads/pins<=1%)

V$SGASTAT/V$SQLAREA/V$SQLTEXT/V$DB_OBJECT_CACHE(过程等占用内存)

参数: OPEN_CURSORS/SESSION_CACHED_CURSORS

CURSOR_SPACE_FOR_TIME -- 除非RELOADS in V$LIBRARYCACHE一直为0,否则保持缺省值:false

预留空间: V$SHARED_POOL_RESERVED

REQUEST_FAILURES大于0并且不断增长(ORA-4031),可以相应增大SHARED_POOL_RESERVED_SIZE & SHARED_POOL_SIZE的值

REQUEST_MISS = 0并且不再增长或FREE_MEMORY>=50%*SHARED_POOL_RESERVED_SIZE,考虑减少reserved size

SHARED_POOL_RESERVED_SIZE初始为SHARED_POOL_SIZE10%

(3) 关于数据字典cache

特性: 启动时任何sql语句都将导致cache miss, GETMISSES几乎不可能为0

调整: 调整SHARED_POOL_SIZE的大小而间接地调整dictionary cache

report.txt: GET_MISS/GET_REQS < 15%

字典: V$ROWCACHE -- SUM(GETMISSES)/SUM(GETS) < 15%, 否则应增大SHARED_POOL_SIZE

(4) 关于UGA

包括: User Session Data(sort area & private SQL area) Cursor State, MTS中创建

存储: 专用服务器-->PGA, MTS-->shared pool, 使用MTS的总内存<=使用专用服务器内存

调整: 查阅视图V$MYSTAT,( V$STATNAME, V$SESSTAT 查询space usage for MTS user),计算: SUM(value)

(5) 关于Large Pool

特性: LARGE_POOL_SIZE需明确设置,若未设置使用shared pool分配

The Oracle library cache and buffer cache will never allocate memory from the large pool

用途: I/O服务进程/oracle备份回复/MTS/并行操作(PARALLEL_AUTOMATIC_TUNING=TRUE)

字典: v$sgastat


6. Tuning the Buffer Cache 7

(1) 关于命中率

公式:Hit Ratio = 1 (physical reads/(db block gets + consistent gets)) -- 分母是request的总数,包括内存和磁盘读取

-- 因为这些统计数据是实例启动后收集的,所以不要启动后立刻进行计算,因为这时buffer cache可能是空的视图: V$SYSSTAT( name,value)

指标: Hit Ratio>=90%, 否则需要增加DB_BLOCK_BUFFERS

(2) 关于 Multiple Buffer Pools

-- There are at least 50 blocks per latch

-- 总数不能超过DB_BLOCK_BUFFERS DB_BLOCK_LRU_LATCHES ,否则mount时候出错

-- 三种

KEEP: 保存最有可能重用的object

RECYCLE: 保存很少被重用的object

DEFAULT: 始终存在,大小等于单个buffer cache, 尺寸定义=DB_BLOCK_BUFFERS-其它buffer

-- V$BUFFER_POOL_STATISTICS: consistent gets statistics for multiple buffer caches

-- 如何计算KEEP buffer pool的数据

ANALYZE ... ESTIMATE STATISTICS

获取objects的大小:DBA_TABLES, DBA_INDEXES, and DBA_CLUSTERS中的blocks相加

(3) 关于LRU Latches

特性: 每个latche最少控制50buffer, 最小=1,缺省=1/2*CPU, 对每个DBWn进程有一个Latch,命中率应>=99%

视图: V$LATCH and V$LATCHNAME

参数: DB_BLOCK_LRU_LATCHES(cpu系统中,不要超过CPU,在多buffer pool)

(4) 关于 Free List

特性: freelist决定哪个block可以用于insert

视图: V$SESSION_WAIT class = 'segment header'

DBA_SEGMENTS segment当前存在的freelist的数量

V$WAITSTAT SELECT class, count, time FROM v$waitstat WHERE class = 'segment header';

V$SYSTEM_EVENT event='buffer busy waits'

解决竞争的三个步骤:

1. 查询V$SESSION_WAIT,获取FILE, BLOCK, and ID

2. 查询DBA_SEGMENTSV$SESSION_WAIT,获取发生竞争的segment信息

3. 重建object,增加freelist

(5) V$CACHE V$BUFFER_POOL 的区别

-- V$CACHE: 监控每个object占用的buffer pool block数量/catparr.sql创建/用于OPS

to determine the number of blocks in the RECYCLE buffer pool

-- V$BUFFER_POOL: Describes multiple buffer pools

(6) 关于table cache的说法

目标: 对未cachetable进行full scan,block都在MRU,可以cache table放在LRU

方式: 1. Create a table using the CACHE clause -- create table ....cache/nocache

2. Alter a table using the CACHE clause -- alter table ... cache/nocache

3. Code the CACHE hint clause into a query -- 查询中使用cache提示

注意: 过多的cache table可能使buffer cache过分拥挤(overcrowd)

7. Tuning the Redo Log Buffer 3

(1) 怎样设置redo log file可以加快ARCHIVELOG MODE下数据库的恢复速度?

-- Create small redo log files 增加归档的次数

(2) 关于调整redo log buffer

V$SESSION_WAIT: 事件: 'Log Buffer Space'说明空间等待(写入log bufferLGWR写出快)

解决: 增加参数LOG_BUFFER,log buffer移到更快的disk

V$SYSSTAT 事件: 'redo buffer allocation retries'说明新的entries写入覆盖已写入diskentries的空间等待

'redo log space requests'说明活动log file写满,等待Oracle server磁盘空间分配

'redo entries'上述'redo buffer allocation retries'/ 'redo entries'<=1%

解决: 增加log buffer/improve checkpoint 或归档进程

V$SYSTEM_EVENT 事件: 'log file switch completion'说明LOG SWITCHwait

事件: alert.log文件中有"CHECKPOINT NOTCOMPLETE.",说明LGWR等待DBWn完成一个CHECKPOINT

'Log File Switch (Checkpoint Incomplete)'

解决: 调整参数LOG_CHECKPOINT_INTERVAL and LOG_CHECKPOINT_TIMEOUT

Check the size and number of redo log groups

(3) 关于NOLOGGING

可以使用NOLOGGING模式的SQL语句: CTAS/CREATE INDEX/ALTER INDEX REBUILD

DRICT LOAD Sqlloader direct path: Set the NOLOGGING attribute.

(4) REDO LOG BUFFER的特性

-- 参数LOG_BUFFER决定尺寸,大小必须是OS block size的倍数,一般为最大block size4

-- Frequent COMMIT statements lead to a smaller buffer size requirement

-- Larger redo log buffer sizes reduce log file I/O

-- The tuning goal for the redo log buffer is to ensure that there is sufficient space for the server processes.

-- redo log buffer 分配内存过多将减少分配给其他areas的内存

(5) V$SESSION_WAIT中字段 SECONDS_IN_WAIT 的信息说明了什么?

-- 指明等待空间的时间(由于log switch未发生) -- buffer填充比LGWR写出快

-- 也指明了redo log file所在的disk I/O竞争

8. Database Configuration and I/O Issues 7

(1) Alert.log file 出现信息:"Checkpoint not complete; unable to allocate file."意味着什么?

-- LGWR waited for the checkpoint to finish.

(2) 影响Full table scan I/O的参数是什么?

-- DB_FILE_MULTIBLOCK_READ_COUNT

(3) Local Managed tablespace的特性和优点

-- 没有字典, 很少出现一致性问题, 可以有上千个extent而不涉及性能问题不必重组, Extent分配信息存在表空间本地(bitmap)

(4) 视图V$FILESTAT的用途

-- 监控每个磁盘文件的disk I/O 活动情况和和物理读写情况

(5) 关于表空间的一些特点

-- 表和索引分表空间存放,用户不指定表空间(包括临时表空间)将使用system表空间

-- RBS仅用于存放rollback segment

-- system表空间仅包含属于sys用户的objects,其它用户应不允许在system表空间中创建object

(6) 条带化文件的参数和手工命令

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/308563/viewspace-171857/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-02-17

  • 博文量
    270
  • 访问量
    414487