楼主: easyfree

[精华] [TIP][024] 1Z0-024 StudyNotes Lesson 5-10

[复制链接]
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
11#
 楼主| 发表于 2002-5-10 22:54 | 只看该作者

con3

[php]
                Segments for the Keep and Recycle Buffer Pools
                        KEEP Pool
                                Blocks repeatedly accessed
                                Segment size is less than 10% of default buffer pool size
                        RECYCLE Pool
                                Blocks not reused outside of transaction
                                Segment size is more than twice the default buffer pool size
* Dictionary Views with Buffer Pools
        1. 以下视图有BUFFER_POOL字段标识相应object的default buffer pool
                USER_, DBA_SEGMENTS
                USER_, ALL_, DBA_CLUSTERS
                USER_, ALL_, DBA_INDEXES
                USER_, ALL_, DBA_TABLES
                USER_, ALL_, DBA_OBJECT_TABLES
                USER_, ALL_, DBA_ALL_TABLES
        2. V$BUFFER_POOL
                The number and range of LRU latches allocated to the buffer (sets)        此buffer(set)分配的LRU latche数量和范围
                The number and range of blocks allocated to the buffer                        此buffer(set)分配的block数量和范围

                ID              NUMBER
                NAME            VARCHAR2(20)        KEEP/RECYCLE/DEFAULT
                LO_SETID        NUMBER                LRU latche的low setid号
                HI_SETID        NUMBER
                SET_COUNT       NUMBER                此buffer pool的set数量=HI_SETID-LO_SETID+1
                BUFFERS         NUMBER                此buffer pool分配的buffer数量
                LO_BNUM         NUMBER                此buffer pool中的low buffer number
                HI_BNUM         NUMBER
                        ID NAME                   LO_SETID   HI_SETID  SET_COUNT    BUFFERS    LO_BNUM    HI_BNUM
                ---------- -------------------- ---------- ---------- ---------- ---------- ---------- ----------
                         0                               0          0          0          0          0          0
                         1 KEEP                          1          1          1          0          0          0
                         2 RECYCLE                       1          1          1          0          0          0
                         3 DEFAULT                       1          1          1       2048          0          0

* Other Performance Indicators        -- buffer cache hit ratio是最有用的buffer cache性能指标,但也有其他的指标标识DBWn是否需要tuning.
        Wait Statistics
                如果Free Buffer Inspected的值较高或者此值仍在增长中,则可以考虑增加buffer cache的大小
                该统计值是skipped(由于dirty或pinned) to find a free buffer的buffer数量
                SELECT name, value
                FROM v$sysstat
                WHERE name = 'free buffer inspected';
                NAME                                 VALUE
                --------------------------- --------
                free buffer inspected                 183
        Wait Events
                从视图 V$SYSTEM_EVENT or V$SESSION_WAIT检查是否存在wait buffer
                Buffer Busy Waits        进程等待buffer变为有效
                Free Buffer Waits        当无法找到一个free buffer或dirty队列full
                SELECT event, total_waits
                FROM v$system_event
                WHERE event in ('free buffer waits', 'buffer busy waits');

                EVENT                         TOTAL_WAITS
                ---------------------- -------------
                free buffer waits                  337
                buffer busy waits                 3466

[/php]

使用道具 举报

回复
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
12#
 楼主| 发表于 2002-5-10 22:55 | 只看该作者

con4

[php]
* Caching Tables
        目标: 对未cache的table进行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)
* LRU Latches
        特性
                LRU latches管理LRU list
                确省情况下,Oracle Server设置LRU latches的数量=1/2*CPU数量,最小=1
                每个latche最少控制50个buffer
        Tuning Goals        -- 对单CPU系统,增加LRU Latches可能没有益处,因为在任何时间CPU能管理的process数量仍有限制,所以Latche与CPU数相互平衡
                减少server process请求latch的竞争,保证对data buffer cache有足够的LRU latche可供使用
                平衡Latches的数量和CPU的数量
                对每个DBWn进程有一个Latch
        Diagnosing LRU Latch Contention
                视图:        V$LATCH and V$LATCHNAME                -- 获得LRU Latch命中率的数据
                        SELECT name, sleeps/gets "LRU Hit%"
                        FROM v$latch
                        WHERE name ='cache buffers lru chain';
                参数:        DB_BLOCK_LRU_LATCHES                -- 每个instance分配的LRU Latch的总数,通常情况下,如果没有使用多buffer pool,
                                                        -- LRU Latch的数超过CPU数量对性能没有什么帮助
        Resolving LRU Latch Contention
                如果LRU Latch命中率<99%,则
                        增加参数DB_BLOCK_LRU_LATCHES
                        Latches的最大数量为 = least( Number of CPUs x 2 x 3 , Number of buffers/50 )
                CPU 的消耗也是设置LRU Latches数量的一个因素
* Free Lists
        特性
                当insert时,freelist决定哪个block可以用于insert,若有大量的insert发生,则可能引起freelist竞争而使server process等待
                object的freelist数量不能动态设置,所以在创建时就应指定足够数量的freelist数
                单cpu系统中,由于在同一时间cpu只能管理一个process,所以多freelist不能带来很好的效益,虽然它能保证处理更有效,但也增加CPU负担
        Tuning Goals        有足够的freelist,以减少process竞争
        Diagnosing Free List Contention
                视图:        V$SESSION_WAIT
                        V$WAITSTAT
                                SELECT class, count, time FROM v$waitstat WHERE class = 'segment header';
                        V$SYSTEM_EVENT                -- 如果查询出的值较高,则需要找出导致问题的objects
                                SELECT event, total_waits FROM v$system_event WHERE event = 'buffer busy waits';
                                如何减少buffer busy waits
                                        Data blocks:        改变PCTFREE/PCTUSED,检查是否有很多process插入同一点,考虑增加INITRANS
                                                        减少每个block中的row数量
                                        Segment header:        增加freelist数量或使用freelist group(即使在单instance环境中)
                                        Free list Block        增加更多的freelist(在并行服务器中要保证每个instance有自己的freelist group)
                        DBA_SEGMENTS        标识需增加freelist的object        -- ???
                参数:        无,属于segment level,不能动态更改
                OEM:        Diagnostics Pack-->Performance Manager        —>Contention—>Free List Hit%
        Resolving Free List Contention
                1. Query the V$SESSION_WAIT view.        -- 获取FILE, BLOCK, and ID        ???
                2. Identify the object and get free lists for the segment from DBA_SEGMENTS.
                        SELECT s.segment_name, s.segment_type, s.freelists, w.wait_time,
                                w.seconds_in_wait, w.state
                        FROM dba_segments s, v$session_wait w
                        WHERE w.event ='buffer busy waits'
                        AND w.p1 = s.header_file
                        AND w.p2 = s.header_block;
                3. Re-create the object in question.        -- 重建

[/php]

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
13#
发表于 2002-5-13 01:19 | 只看该作者

多谢!!!

请继续,候。

使用道具 举报

回复
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
14#
 楼主| 发表于 2002-5-15 23:56 | 只看该作者

Lesson7

[php]
7        Tuning the Redo Log Buffer

* After completing this lesson, you should be able to do the following:
        Determine if processes are waiting for space in the redo log buffer
        Size the redo log buffer appropriately
        Reduce redo operations

* Redo Log Buffer Content
        1. 对每个DML/DDL, Oracle Server从用户内存中拷贝redo entries到redo log buffer中
        2. redo entries记录INSERT, UPDATE, DELETE, CREATE, ALTER, or DROP的重建或redo信息,对数据库恢复很有用,在buffer中占用连续顺序的空间
        3. Redo log buffer 循环写, 覆盖已写入redo log file中的redo log buffer
        4. 尺寸:
                由初始化参数LOG_BUFFER决定尺寸, default值由os指定,一般为最大block size的4倍
                较大的log_buffer值减少了log file的I/O,特别是事务较长较多
                如果设置值小于OS指定的值,数据库启动时oracle server将自动扩大到os指定的值大小
                        select 'V$PARAMETER' "Table name", name,to_number(value,'9999999') "Value"
                        from v$parameter
                        where name = 'log_buffer'
                        UNION
                        select 'V$SGASTAT' "Table name", name, bytes
                        from v$sgastat
                        where name ='log_buffer'

                        Table name  NAME            Value
                        ----------- ---------------------
                        V$PARAMETER log_buffer      32768
                        V$SGASTAT   log_buffer      66560
* Tuning the Redo Log Buffer
        Diagnosing Problems
                1. 如果机器CPU很快,但disk相对较慢,则处理器可在LGWR写一部分buffer到disk的同时,将新的redo entries填充到log buffer
                   空余位置,因此较大的buffer有利于减少冲突
                2. 如果server process试图写新的entries到log buffer中,而没有空间,此时须等待LGWR将buffer写入disk file
        Tuning Goal
                保证server process请求的log buffer时有足够的空间        -- 不过过多的space将减少分配给其他区域的内存
        Tuning the Redo Log Buffer
                Diagnostic Tools
                        V$SESSION_WAIT        通过事件'Log Buffer Space'指示出是否存在任何空间等待(session写入log buffer比LGWR写出快)
                                select sid, event, seconds_in_wait, state
                                from v$session_wait
                                where event = 'log buffer space%'

                                其中: SECONDS_IN_WAIT字段指明等待空间的时间(由于log switch未发生)        -- buffer填充比LGWR写出快
                                        也指明了redo log file所在的disk I/O竞争
                        V$SYSSTAT        指明用户进程在拷贝新的entries覆盖已写入disk的entries时等待空间的次数
                                SELECT name, value
                                FROM v$sysstat
                                WHERE name = 'redo buffer allocation retries';

                                SELECT name, value                        -- Active log file已满,Oracle Server等待磁盘空间分配
                                FROM v$sysstat                                -- 执行log switch释放空间
                                WHERE name = 'redo log space requests';
                Guidelines
                        V$SESSION_WAIT.SECONDS_IN_WAIT应没有等待,若有则考虑:
                                如果log buffer小,增加参数LOG_BUFFER
                                将log buffer移到更快的disk        -- striped disks????
                        V$SYSSTAT
                                SELECT name, value FROM v$sysstat
                                WHERE name IN ('redo buffer allocation retries','redo entries');
                                其中的redo buffer allocation retries应该接近0,不能超过1%的redo entries,若此值持续增长,
                                        则process等待buffer中的space,这可能是由于log buffer太小引起的,也可能是检查点或log switch引起的
                                        -- 增加log buffer的大小(在SGA中log buffer较小,增大它不会对其他部分有很大影响)
                                        -- 改进checkpoint 或归档进程
                        Guidelines
                                增加LOG_BUFFER直到wait ratio稳定下来
                                LOG_BUFFER大小必须为os block size的整数倍
                        Further Investigations        深入研究
                                研究LGWR慢的原因
                                        1. redo log file I/O竞争, redo log file应放在单独的速度快的disk上
                                        2. V$SYSTEM_EVENT视图中的事件:Log File Switch Completion,指明由于LOG SWITCH的wait事件
                                                   select event, total_waits, time_waited, average_wait
                                                from v$system_event
                                                where event like 'log file switch completion%';
                                           考虑增加log file的size
                                        3. LGWR需要一文件而DBWn没有完成该文件的checkpoint时,LGWR只好等待
                                                -- alert.log文件中有"CHECKPOINT NOTCOMPLETE."
                                                -- V$SYSTEM_EVENT中查找事件Log File Switch (Checkpoint Incomplete)的发生次数,
                                                   它标识由于checkpoint未完成而log file switch waits
                                                   select event, total_waits, time_waited, average_wait
                                                   from v$system_event
                                                   where event like 'log file switch (check%';
                                                -- 检查checkpoint发生频率,调整参数LOG_CHECKPOINT_INTERVAL and LOG_CHECKPOINT_TIMEOUT
                                                -- Check the size and number of redo log groups.
                                        4. 归档不能及时完成,使LGWR等待
                                                -- 确保归档目的地disk未满
                                                -- Add redo log groups
                                                -- 检查V$SYSTEM_EVENT中事件Log File Switch (Archiving Needed)的数量
                                                           它标识因归档未完成而使log file switch waits
                                                   select event, total_waits, time_waited, average_wait
                                                   from v$system_event
                                                   where event like 'log file switch (arch%';
                                                -- 调整归档的速度
                                                -- 当ARCn进程数不足以完成当前工作量时,LGWR开始一个新的ARCn进程,如果你预计将会有
                                                   大量的归档工作,则可设置参数LOG_ARCHIVE_MAX_PROCESSES来指定多个归档进程
                                        5. DB_BLOCK_CHECKSUM=true 将加重性能负担

[/php]

使用道具 举报

回复
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
15#
 楼主| 发表于 2002-5-15 23:57 | 只看该作者

go on 1

[php]
                        Reducing Redo Operations        -- 减少redo的产生
                                SQL*Loader and NOLOGGING Mode
                                        The database is in NOARCHIVELOG mode
                                        数据库在归档模式下,但使用了table的NOLOGGING属性,或control file中指定了UNRECOVERABLE
                                Direct Path loading without archiving
                                Direct Path loading with archiving using NOLOGGING mode
                                Direct Load INSERT in NOLOGGING mode
                                        NOLOGGING属性应用于table,tablespace,Index
                                        除了很少的logging(如:extent扩展),其他不记录log buffer
                                SQL Statements Use NOLOGGING Mode
                                        CREATE TABLE ... AS SELECT
                                        CREATE INDEX
                                        ALTER INDEX ... REBUILD
                                        而: UPDATE, DELETE,常规路径的INSERT, and various DDL,不受NOLOGGING影响        -- 重点

                                        注: UNRECOVERABLE在8i中作为兼容以前版本仍可在CREATE TABLE语句中使用,但以后将不再支持

-- finish ---
[/php]

使用道具 举报

回复
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
16#
 楼主| 发表于 2002-5-15 23:57 | 只看该作者

Lesson8

[php]
8        Database Configuration and I/O Issues

* After completing this lesson, you should be able to do the following:
        Diagnose inappropriate use of SYSTEM, RBS,TEMP, DATA, and INDEX tablespaces
        Use locally managed tablespaces to avoid space management issues
        Detect I/O problems
        Ensure that files are distributed to minimize I/O contention and use appropriate type of devices
        Use striping where appropriate                ????
        Tune checkpoints
        Tune DBWn process I/O

* Overview
        I/O Statistic for Different Oracle File Types
                --------------------------------------------------------------------
                Process                Oracle File I/O
                                Data Files         Log         Archive         Control
                --------------------------------------------------------------------
                CKPT                Write                                        Write
                DBWn                Write
                LGWR                                Write
                ARCn                                Read        Write                Read/Write
                SERVER                Read
                --------------------------------------------------------------------
        Performance Guidelines
                两个基本的性能规则:
                1. Keep disk I/O to the minimum
                2. Spread your disk load across disk devices and controllers
* Tablespace Usage
        每个数据库都应当建立以下表空间:                -- 主要的原则是不同的用途建立不同的表空间,如:housekeeping and backup purposes.
                Data dictionary objects
                Rollback segments
                Temporary segments
                Tables
                Indexes
                Very large objects
        1. Reserve the SYSTEM tablespace for data dictionary objects        -- 保留system表空间,仅存储数据字典对象
        2. Create locally managed tablespaces to avoid space management issues        -- 建立locally管理表空间以避免空间管理问题
                -- 在大规模的OLTP中,因为字典管理的表空间在分配extent时,需要访问字典,容易产生concurrency problems
                -- locally managed tablespaces中创建的表可以有上千个extent而没有performance implications,所以不必重组table        ???
                -- 在本地化管理表空间中,自由表空间无需聚合以删除beehive碎片,因为bitmaps跟踪自由空间并有效地分配它们
        3. Split tables and indexes into separate tablespaces        -- 将表和索引分表空间存放
                -- 因为索引和表经常同时插入和查询
        4. Create separate rollback tablespaces                -- 建立不同的回滚表空间
        5. Store very large database objects in their own tablespace        -- 将VLOB存放到单独的表空间
                -- 包括: LONG,LOB
        6. Create one or more temporary tablespaces        -- 建立一个或多个临时表空间
                -- 如果不给用户分配单独的临时表空间,则将使用系统表空间
* Distributing Files Across Devices
        1. 使磁盘访问平均,不要有负荷过重的磁盘
                -- Redo log file由LGWR顺序写,最好此磁盘上没有其他干扰
                -- 若多个用户并发访问一个大表,则将其分布在多个datafile,多个disk上
        2. 在包含数据文件的磁盘上排除与Oracle Server无关的I/O,这同样对redo log file的访问优化有效        -- 查看V$FILESTAT,重点
        3. 根据磁盘的性能测试,在raw设备和block设备间做出适当选择
                -- raw设备上,读写I/O是以字符级别进行的
                -- block设备上,读写I/O是以block级别进行的
                了解应用中哪种操作占主导地位和系统能处理I/O的速度后,可选择合适的磁盘分布,以达到最优性能,如:
                -- 随机读占主导地位(50%的全部I/O操作),则8KB是较好的block size
                -- 对于8KB的blocksize而言,Unix文件系统和raw设备能提供相当的随机读性能
                -- 对于8KB的blocksize,有25%的顺序读,Unix系统能提供2倍速度(相当于raw设备的顺序读)
                参考文档: Oracle8i Server Tuning Release 8.1.5 A67775-01

[/php]

使用道具 举报

回复
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
17#
 楼主| 发表于 2002-5-15 23:58 | 只看该作者

go on1

[php]
* Oracle File Striping                -- 条带化
        1. Operating system striping:
                Use operating system striping software or RAID
                        -- 如果操作系统允许striping,即:一个单独的连续文件实际spread among devices
                        -- 可以使用操作系统striping软件,如: logical volume manager
                        -- Unix系统最典型的striped文件系统是RAID((redundant array of inexpensive disks) 冗余低价磁盘阵列
                Decide on the right stripe size
                        -- 选择正确的stripe size依赖于oracle的block size和参数DB_FILE_MULTIBLOCK_READ_COUNT(应为其的倍数)
                        -- 对应OS-striped的数据库文件,它的stripe width应接近或小于DB_FILE_MULTIBLOCK_READ_COUNT * DB_BLOCK_SIZE
                        -- 对于每个Oracle Server read,会有两个或多个物理读(os read),因为需要访问两个或多个磁盘
        2. Manual striping:
                可以创建由多个数据文件组成的表空间,每个数据文件分布在不同的磁盘上,然后创建的表或索引就分布在这些文件中
                You can stripe by:
                        Use the CREATE TABLE or ALTER TABLE ALLOCATE command
                                -- 建立objects时,使得MINEXTENTS大于1, 每个extent稍小于striped datafile的大小
                                -- 显式地定义: ALTER TABLE tablename ALLOCATE EXTENT (DATAFILE 'filename' SIZE 10 M);
                        Is worthwhile with parallel query usage
                                -- 手工strip是件很费力的工作,如果使用并行查询或很多full table scan, stripe是很有价值的
        必须在很清楚数据是如何使用以后,才能在stripe上做出正确选择
* Full Table Scans
        Investigate the need for full table scans
                如果某个磁盘上有高峰活动,主要是因为未优化的查询导致的
                        SELECT name, value FROM v$sysstat
                        WHERE name LIKE '%table scans%';
                        NAME                                  VALUE
                        -------------------------------- ----------
                        table scans (short tables)             9656        -- full scan
                        table scans (long tables)              1036        -- full scan,如果该值高,说明很多表没有用到索引
                        table scans (rowid ranges)                0
                        table scans (cache partitions)            0
                        table scans (direct read)                 0
        Tuning Full Table Scans
                定义初始化参数DB_FILE_MULTIBLOCK_READ_COUNT,它标明全表扫描时一次I/O操作的最大次数,但一次i/o还受OS单次I/O最大字节的限制
                7.3以前,最大读内存块为64kb,因此若设置DB_FILE_MULTIBLOCK_READ_COUNT>64kb/DB_BLOCK_SIZE不会带来额外的性能优势
                7.3及以后版本中,无上述限制,且可以用ALTER SESSION动态更改,对于临时批量处理有利
                实际扫描一个表时,I/O次数受此参数影响也受表的大小以及是否使用并行查询影响
                COST-BASED优化器综合考虑上述因素,决定full table scan的代价,当小于index scan的cost时,就优先使用full table scan
        Monitoring Full Table Scan Operations
                视图V$SESSION_LONGOPS
                        SID                   NUMBER
                        SERIAL#               NUMBER
                        OPNAME                VARCHAR2(64)
                        TARGET                VARCHAR2(64)
                        TARGET_DESC           VARCHAR2(32)
                        SOFAR                 NUMBER
                        TOTALWORK             NUMBER
                        UNITS                 VARCHAR2(32)
                        START_TIME            DATE
                        LAST_UPDATE_TIME      DATE
                        TIME_REMAINING        NUMBER
                        ELAPSED_SECONDS       NUMBER
                        CONTEXT               NUMBER
                        MESSAGE               VARCHAR2(512)
                        USERNAME              VARCHAR2(30)
                        SQL_ADDRESS           RAW(4)
                        SQL_HASH_VALUE        NUMBER
                        QCSID                 NUMBER

                        SELECT sid, serial#, opname,TO_CHAR(start_time,'HH24:MI:SS') AS START_TIME,
                        (sofar/totalwork)*100 AS PERCENT_COMPLETE
                        FROM v$session_longops;

                        SID SERIAL#  OPNAME           START      PERCENT_COMPLETE
                        --- -------- ------------ ---------- -----------------
                        8         219  TABLE SCAN   13:00:09              48.98098

                注:        包DBMS_APPLICATION_INFO中的一个过程:SET_SESSION_LONGOPS使当前session在V$SESSION_LONGOPS中产生一条记录
                        该包中的参数OP_NAME,TARGET显示在V$SESSION_LONGOPS中的OP_NAME,TARGET列,可用来标识

                        PROCEDURE SET_SESSION_LONGOPS:
                        自变量名称                       类型                    输入/输出默认值?
                        ------------------------------ ----------------------- ------ --------
                         RINDEX                         BINARY_INTEGER          IN/OUT
                         SLNO                           BINARY_INTEGER          IN/OUT
                         OP_NAME                        VARCHAR2                IN     DEFAULT
                         TARGET                         BINARY_INTEGER          IN     DEFAULT
                         CONTEXT                        BINARY_INTEGER          IN     DEFAULT
                         SOFAR                          NUMBER                  IN     DEFAULT
                         TOTALWORK                      NUMBER                  IN     DEFAULT
                         TARGET_DESC                    VARCHAR2                IN     DEFAULT
                         UNITS                          VARCHAR2                IN     DEFAULT

[/php]

使用道具 举报

回复
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
18#
 楼主| 发表于 2002-5-15 23:58 | 只看该作者

go on 2

[php]
* Diagnostic Tools for Checking I/O Statistics
        1. V$FILESTAT view        -- 每个磁盘文件的disk I/O数量        -- 重点
                FILE#        NUMBER        File number (join to FILE# in V$DATAFILE for the name)        数据文件号
                PHYRDS       NUMBER        Number of physical reads done        物理读的数量
                PHYWRTS      NUMBER        Number of physical writes done        物理写的数量
                PHYBLKRD     NUMBER        Number of physical blocks read        物理block读的数量        若所有读写均为单个block,则同PHYRDS
                PHYBLKWRT    NUMBER        Number of physical blocks written        物理block写的数量
                READTIM      NUMBER        Time spent doing reads        读所花的时间        TIMED_STATISTICS=TRUE,否则为0
                WRITETIM     NUMBER        Time spent doing writes        写所花的时间
                AVGIOTIM     NUMBER        I/O平均时间(百分秒)
                LSTIOTIM     NUMBER        上次I/O时间(百分秒)
                MINIOTIM     NUMBER        单次I/O的最小时间(百分秒)
                MAXIORTM     NUMBER        单次读的最大时间(百分秒)
                MAXIOWTM     NUMBER        单次写的最大时间(百分秒)

                SELECT phyrds,phywrts,d.name
                FROM v$datafile d, v$filestat f
                WHERE d.file#=f.file# order by d.name;

                    PHYRDS    PHYWRTS NAME
                ---------- ---------- ----------------------------------------
                         3          1 D:\ORACLE\ORADATA\OCP\DR01.DBF
                         3          1 D:\ORACLE\ORADATA\OCP\INDX01.DBF
                        88          1 D:\ORACLE\ORADATA\OCP\OEM_REPOSITORY.ORA
                        18        788 D:\ORACLE\ORADATA\OCP\RBS01.DBF
                         3          1 D:\ORACLE\ORADATA\OCP\RMAN_TS.DBF
                     21261        101 D:\ORACLE\ORADATA\OCP\SYSTEM01.DBF
                       389        556 D:\ORACLE\ORADATA\OCP\TEMP01.DBF
                         2          0 D:\ORACLE\ORADATA\OCP\TOOLS01.DBF
                        13          9 D:\ORACLE\ORADATA\OCP\USERS01.DBF

               2. FILE I/O monitor using EM
                OEM --> Oracle Diagnostics Pack—>Performance Manager—>I/O—>File I/O Rate
        3. File statistics in report.txt
                从中检查哪个文件活动最多, 查明有多少因无索引或使用cost-based优化器而导致索引无效的full table scan
* Online Redo Log File Configuration
        Online redo log file配置原则
                Size redo log files to minimize contention        -- 调整redo log file的size以减少争用
                        -- 可以从report.txt中获取Redo Size statistics
                        -- Redo log files can be created on raw devices.        -- 归档日志则不能创建在RAW设备上        为什么???
                        -- Oracle8i中,当参数DBWR_IO_SLAVES=0时,LGWR使用的I/O slaves将自动设置为4来提高redo log throughput(处理能力)
                Have enough groups to prevent waiting                -- 有足够多的group以防止等待
                Store redo log files on separate, fast devices        -- 将redo log file存放在不同的快速的设备上
                Query the dynamic performance views V$LOGFILE and V$LOG                -- 从视图V$LOGFILE and V$LOG中查询性能情况
                        -- 可以获取name, location, size, and status等信息,但没有I/O信息
                        -- 在视图V$SYSTEM_EVENT中记录的Log File Parallel Write的任何wait,表明log file的一个可能的I/O问题
                Oracle Server没有提供监控redo log disk I/O的工具,只能使用操作系统命令或工具来进行监控
        归档日志文件配置原则
                考虑将LGWR写和ARCn读在不同的磁盘上
                        -- 归档时,至少需要2个以上的redo log group,当组切换时,DBWn通常必须checkpoint,一个文件需要归档,需有足够时间完成这些
                        -- 注意归档日志文件不能建立在RAW设备上
                Share the archiving work        -- 当ARCn任务过重时,可以手工开始一个进程来分担一部分工作
                        ALTER SYSTEM ARCHIVE LOG ALL TO <log_archive_dest>
                Change archiving speed:
                        LOG_ARCHIVE_MAX_PROCESSES        -- Oracle8i允许定义多个ARCn进程
                        LOG_ARCHIVE_DEST_n                -- OEE版本才有,LOG_ARCHIVE_DEST_n和LOG_ARCHIVE_DEST不能同时使用,因为不兼容
                        (LOG_ARCHIVE_DUPLEX_DEST,
                        LOG_ARCHIVE_MIN_SUCCEED_DEST)
                监控视图
                        V$ARCHIVE_DEST                -- 记录当前instance的所有归档目的地的current value, mode, and status.
                        V$ARCHIVED_LOG                -- 记录在control file中的归档日志信息
                                -- 当online redo log file成功归档或者clear之后产生一条归档日志信息(clear的name为null)
                                -- 如果日志被归档两次,则存在两条记录,他们的THREAD#, SEQUENCE#, FIRST_CHANGE#相同,名称不同
                        V$ARCHIVE_PROCESSES        -- 监控归档进程的状态和
                                select * from v$archive_processes;
                        LOG_ARCHIVE_DEST_STATE_n

[/php]

使用道具 举报

回复
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
19#
 楼主| 发表于 2002-5-15 23:59 | 只看该作者

go on 3

[php]
* Tuning Checkpoint
        概述
                DBWn将发生Checkpoints的log的全部或部分dirty block写入到datafile中
                CKPT updates the data file headers and the control files
                尽管检查点产生了对磁盘的写操作,但它通常允许其他操作同时进行,但当DBWn没有完成checkpoint file,而LGWR需要时,LGWR必须等待
                经常性的检查点意味着缩小实例恢复时间但带来了更多的写操作(DBWn写datafile,CKPT写datafile header)
        Tuning Guidelines
                1. 检查alert文件,错误信息“Checkpoint not complete; unable to allocate file.”表示LGWR等待检查点完成
                2. 如果系统统计"Background Checkpoints Started"和"Background Checkpoints Completed"有值并且两值相差>1,则说明检查点
                   在log switches间没有完成,需要增大log files
                3. 设置参数LOG_CHECKPOINTS_TO_ALERT=TRUE,使得检查点的开始和结束均记录在alert.log文件中
                4. report.txt中,DBW0 checkpoint write request表明检查点发送到DBW0的次数,单个事务的检查点次数过多意味着检查点发生过频
        Regulating Checkpoints
                1. checkpoint的频率范围: 2秒 - 8小时, 一般数据库中为30分钟一次
                2. 对OLTP环境,若SGA很大,而checkpoint频率很低,则在checkpoint时易发生I/O争用,因为一次checkpoint需要写入很多block,
                   这种情况下,更频繁些的checkpoint使dirty block少些
        相关参数
                FAST_START_IO_TARGET
                LOG_CHECKPOINT_INTERVAL
                LOG_CHECKPOINT_TIMEOUT
                DB_BLOCK_MAX_DIRTY_TARGET
* Multiple I/O Slaves
        概述
                I/O slaves是一种特殊的process,只用于辅助I/O,若server支持异步I/O,则不推荐使用I/O slaves,因为它是模拟异步I/O
                Oracle8i中文件I/O接口重写了,以提供nonblocking I/O应用
                许多平台支持对disk的异步I/O,但不支持磁带设备,这样,I/O Slaves可以用于nonblocking的I/O到磁带设备
                在重负荷情况下,DBWn进程需要I/O Slaves来完成部分I/O
                I/O Slaves可用于DBWn,LGWR,ARCn及backup process
                在设置DBWR_IO_SLAVES=4后,DBW0的I/O Slaves在数据库启动后立即分配,分别为ra_i101_SID - ora_i104_SID (ora_iNnn_SID)
                    其他I/O slaves(LGWR,ARC0,bakcup进程)是在需要时动态获取的,即需用时查找空闲,无则产生一个新I/O Slave,达到最大值则等待
                DBW0继续做与DBW0相关的所有工作,如:收集dirty buffer到一个batch中;另外初始化I/O,即:将batch写出时是并行的        ???
                在注重写的环境中,I/O Slaves有益,CPU时间可以分配给多个I/O Slave中
        相关参数
                control I/O slave deployment.        -- 控制I/O slave调度
                        DBWR_IO_SLAVES
                        BACKUP_TAPE_IO_SLAVES
                打开/关闭 I/O slave使用                -- 下两个参数缺省=TRUE, can be disabled on a "per-device type" basis
                        DISK_ASYNCH_IO
                        TAPE_ASYNCH_IO

[/php]

使用道具 举报

回复
论坛徽章:
25
ITPUB元老
日期:2005-02-28 12:57:00管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
20#
 楼主| 发表于 2002-5-16 00:00 | 只看该作者

go on 4

[php]
* Multiple DBWn Processes
        设置参数DB_WRITER_PROCESSES(0-9)
        多个DBWn process可以在收集dirty buffer时并行化,而一个DBW0带多个I/O Slaves只能在写出batch时并行化,所以前者效率高
        一般用于SMP系统(对称多处理系统),有多个CPU的系统中
        不能同时使用多个DBWn process和多个I/O Slaves
* Tuning DBWn I/O
        Guidelines        -- 设置参数DB_BLOCK_MAX_DIRTY_TARGET
                若此值设置较高,DBWn进程将不会频繁写dirty buffer,这将导致session 等待free buffer
                若此值设置过高,将导致DBWn进程使用额外的内存,如果该值超过了OS处理所有请求的容量,则读写将出现延迟等待
                当设置此参数时,分析与DBWn相关的统计,如V$SYSTEM_EVENT中的事件"WRITE COMPLETE WAITS",可决定降低此参数的值是否有益
        Predefined Low and High Limits of the Number of Dirty Buffers
                1. dirty buffer的最低界限=min(max(DB_BLOCK_MAX_DIRTY_TARGET,100), buffers)
                2. dirty buffer的最高界限=min((low limit*12)/10, buffers).
                如果dirty buffer小于low limit, DBWn不倾向于写checkpoints buffers
                如果dirty buffer介于low limit和high limit之间,DBWn写checkpoints buffers直至checkpoints buffers小于low limit
                如果dirty buffer大于high litmit,DBWn写出checkpoints buffers
                缺省值=(2*32)–1        ???
-- finish ---
[/php]

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表