1. 基本的数据库信息


版本信息:


SQL> select * from v$version;


BANNER


----------------------------------------------------------------


Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod


PL/SQL Release 10.2.0.1.0 - Production


CORE    10.2.0.1.0      Production


TNS for 32-bit Windows: Version 10.2.0.1.0 - Production


NLSRTL Version 10.2.0.1.0 - Production


数据库信息:


SQL> select name, created, log_mode from v$database;


NAME      CREATED        LOG_MODE


--------- -------------- ------------


TEST      13-9月 -09     ARCHIVELOG




2. 自动工作量仓库(AWR) 的基本信息


自动工作量仓库(AWR)在默认情况下,仓库用小时填充,保留期是7天。


AWR使用多少空间


SQL>Select occupant_name,occupant_desc,space_usage_kbytes from v$sysaux_occupants where occupant_name like '%AWR%';


OCCUPANT_N OCCUPANT_DESC                                        SPACE_USAGE_KBYTES


---------- --------------------------------------------------   ------------------


SM/AWR     Server Manageability - Automatic Workload Repository              51200


系统上最原始的AWR信息是什么?


SQL> select dbms_stats.get_stats_history_availability from dual;


GET_STATS_HISTORY_AVAILABILITY


---------------------------------------------------------------------------


21-8月 -09 09.18.15.359000000 上午 +08:00


什么是AWR信息的保留期?


SQL> select dbms_stats.get_stats_history_retention from dual;


GET_STATS_HISTORY_RETENTION


---------------------------


31


将AWR信息的保留期更改为15天?


SQL> EXEC dbms_stats.alter_stats_history_retention(15);


PL/SQL 过程已成功完成。




3. 基本的许可信息


V$LICENSE视图允许DBA监控系统内任何时候有关数据库数量的所有系统活动的数量。会话警告级别为0表示没有设置init.ora会话警告参数,所以系统不会显示警告信息。会话最大级别为0表示没有设置init.ora会话最大参数,所以系统不会限制会话的数量。查询V$LICENSE视图,以查看所允许的最大会话数。也可以在接近最大数时设置警告。


应该定期执行脚本,以向DBA提供系统一天中实际的会话数量,从而保证正确的许可授权。设置init.ora参数LICENSE_MAX_SESSIONS = 110,将会话数限制为110。设置init.ora参数LICENSE_SESSIONS_WARNING = 100,系统将向每位在第100个会话之后的用户显示警告信息,这样他们就会通知DBA,系统因遇到问题而关闭(希望能如此)。init.ora参数LICENSE_MAX_USERS用于设置数据库中可以创建的已命名的用户数。在以下程序清单中,该值为0,所以没有限制。


SQL> select * from v$license;


SESSIONS_MAX SESSIONS_WARNING SESSIONS_CURRENT SESSIONS_HIGHWATER  USERS_MAX


------------ ---------------- ---------------- ------------------ ----------


0                0                9                 18          0




4. 数据库中已安装的产品项


查询V$OPTION视图,可以获取您已安装的Oracle产品项。V$VERSION视图将给出已安装的基本产品项的版本。


SQL> select * from v$option;


PARAMETER                                                        VALUE


---------------------------------------------------------------- -----


Partitioning                                                     TRUE


Objects                                                          TRUE


Real Application Clusters                                        FALSE


Advanced replication                                             TRUE


Bit-mapped indexes                                               TRUE


Oracle Data Guard                                                TRUE


Oracle Label Security                                            FALSE


Flashback Database                                               TRUE


Data Mining Scoring Engine                                       FALSE


Transparent Data Encryption                                      TRUE


Backup Encryption                                                TRUE


Unused Block Compression                                         TRUE


… …




5. 内存分配摘要(V$SGA)


V$SGA视图给出了系统的系统全局区(System Global Area,SGA)内存结构的摘要信息。Data Buffers是在内存中分配给数据的字节数量。它根据init.ora的参数DB_CACHE_SIZE得到。Redo Buffers主要是依据init.ora参数LOG_BUFFER计算得到,每当COMMIT命令提交数据时,它被用于缓存已改变的记录并将它们保存到重做日志中。访问V$SGA视图可以得到系统的物理内存分配的基本概念,包括在Oracle中为数据、共享池、large池、java池以及日志缓冲区分配的内存。


SQL> COLUMN value FORMAT 999,999,999,999


SQL> select * from  v$sga;


NAME                            VALUE


-------------------- ----------------


Fixed Size                  1,248,576


Variable Size             100,664,000


Database Buffers          180,355,072


Redo Buffers                7,139,328


如果使用SGA_TARGET-- 内部动态调整大小:


SQL> select ((select sum(value) from v$sga) -(select current_size from v$sga_dynamic_free_memory)) "


SGA_TARGET" from dual;


SGA_TARGET


----------


289406976




6.内存分配的细节(V$SGASTAT)


在V$视图中,可以查询V$SGASTAT视图来提供有关SGA更详细的内存分配信息。这个视图提供了SGA和内存资源的动态信息(访问数据库时会出现相应变化)。这个语句非常详细地描述了SGA的尺寸。在V$SGA和V$SGASTAT视图中均包含记录FIXED_SGA、BUFFER_CACHE和LOG_BUFFER.V$SGASTAT视图可获取Oracle SGA详细的分类列表以及共享池分配中各存储容器的详细信息。


SQL> select * from v$sgastat;


POOL         NAME                            BYTES


------------ -------------------------- ----------


fixed_sga                     1248576


buffer_cache                180355072


log_buffer                    7139328


shared pool  dpslut_kfdsg                      256


shared pool  hot latch diagnostics              80


shared pool  ENQUEUE STATS                    8360


shared pool  transaction                    264528


shared pool  KCB buffer wait statistic        3352


shared pool  invalid low rba queue             320


shared pool  KQF optimizer stats table        2396


… …




7. 在V$PARAMETER显示init.ora信息


程序清单中的脚本显示了系统中的init.ora参数。它还提供了有关参数的信息,确定每一个参数的当前值是否就是默认值(ISDEFAULT=TRUE)。查询V$PARAMETER视图,将得到init.ora参数的当前值。它还显示了哪些init.ora参数已经改动了原始的默认值:ISDEFAULT = FALSE。它还显示了对于一个给定的会话,只能修改哪些参数(当ISSES_MODIFIABLE = TRUE时)。最后,它显示了在不用关闭和重启数据库可以修改哪些参数(当ISSYS_MODIFIABLE = IMMEDIATE时);而ISSYS_MODIFIABLE = DEFERRED说明该参数对所有新登录的,但当前未登录会话的用户有效。如果参数ISSYS _MODIFIABLE =FALSE,则说明该实例必须关闭并重启,才能使设置生效。


SQL>select name, value, isdefault, isses_modifiable,issys_modifiable from v$parameter order by name;


NAME            VALUE                               ISDEFAULT ISSES ISSYS_MOD


--------------- ----------------------------------- --------- ----- ---------


active_instance                                     TRUE      FALSE FALSE


asm_diskgroups                                      TRUE      FALSE IMMEDIATE


audit_file_dest D:/ORACLE/ADMIN/TEST/ADUMP          FALSE     FALSE DEFERRED


audit_sys_opera FALSE                               TRUE      FALSE FALSE


background_dump D:/ORACLE/ADMIN/TEST/BDUMP          FALSE     FALSE IMMEDIATE


backup_tape_io_ FALSE                               TRUE      FALSE DEFERRED


… …




8.测定数据的命中率(V$SYSSTAT)


查询V$SYSSTAT视图(如下程序清单所示)可以查看从内存中读取数据的频率。它提供了数据库中设置的数据块缓存区的命中率。这个信息可以帮助您判断系统何时需要更多的数据缓存(DB_CACHE_SIZE),或者系统的状态何时调整得不佳(二者均将导致较低的命中率)。通常情况下,您应当确保读数据的命中率保持在95%以上。将系统的命中率从98%提高到99%,可能意味着性能提高了100%(取决于引起磁盘读操作的语句)。


SELECT   1


- (  SUM (DECODE (NAME, 'physical reads', VALUE, 0))


/ (  SUM (DECODE (NAME, 'db block gets', VALUE, 0))


+ (SUM (DECODE (NAME, 'consistent gets', VALUE, 0)))



) "Read Hit Ratio"


FROM v$sysstat;


Read Hit Ratio


--------------


.993067726


在Oracle 10g中,也可以直接获得V$SYSMETRIC中的 AWR 信息:


SQL> select metric_name,value from v$sysmetric where metric_name='Buffer Cache Hit Ratio';


METRIC_NAME                                                           VALUE


---------------------------------------------------------------- ----------


Buffer Cache Hit Ratio                                                  100


Buffer Cache Hit Ratio                                                  100




9.测定数据字典的命中率(V$ROWCACHE)


可以使用V$ROWCACHE视图(如程序清单所示)来发现对数据字典的调用是否有效地利用了通过init.ora参数SHARED_POOL_SIZE分配的内存缓存。如果字典的命中率不高,系统的综合性能将大受影响。推荐的命中率是95%或者更高。如果命中率低于这个百分比,说明可能需要增加init.ora参数SHARED_POOL_SIZE。但要记住,在V$SGASTAT视图中看到的共享池包括多个部分,而这里仅仅就是其中之一。注意:在大幅度使用公共同名的环境中,字典命中率可能难以超过75%,即使共享池的尺寸很大。这是因为Oracle必须经常检查不存在的对象是否依旧存在。


SQL>select sum(gets),sum(getmisses),(1 - (sum(getmisses) / (sum(gets)+ sum(getmisses)))) * 100 HitRate from v$rowcache;


SUM(GETS) SUM(GETMISSES)    HITRATE


---------- -------------- ----------


370854          11068 97.1020261


在Oracle 10g中,也可以直接获得V$SYSMETRIC中的AWR信息:


select metric_name, value from v$sysmetric where metric_name ='Library Cache Hit Ratio';


METRIC_NAME                                                           VALUE


---------------------------------------------------------------- ----------------


Library Cache Hit Ratio                                          98.0281690140845


Library Cache Hit Ratio                                          98.0281690140845




10.测定共享SQL和PL/SQL的命中率(V$LIBRARYCACHE)


访问V$LIBRARYCACHE视图可以显示实际使用的语句(SQL和PL/SQL)访问内存的情况。如果init.ora的参数SHARED_POOL_SIZE设置得太小,内存中就没有足够的空间来存储所有的语句。固定命中率通常应该是95%或更高,而重载的次数不应该超过1%。查询V$SQL_BIND_CAPTURE视图,看看每个SQL绑定是否太高,是否需要CURSOR_SHARING。


select sum(pins) "Executions", sum(pinhits) "Hits",((sum(pinhits) / sum(pins)) * 100) "PinHitRatio",sum(reloads) "Misses", ((sum(pins) / (sum(pins)+ sum(reloads))) * 100) "RelHitRatio" from v$librarycache;


Executions       Hits PinHitRatio     Misses RelHitRatio


---------- ---------- ----------- ---------- -----------


417954     403489  96.5390928       4092  99.0304374


查询 v$sql_bind_capture,看看 average binds 是否大于15 (issue):


select  sql_id, count(*) bind_count from v$sql_bind_capture where child_number = 0 group by sql_id having  count(*) > 20order by count(*);


SQL_ID        BIND_COUNT


------------- ----------


9qgtwh66xg6nz         21




11.确定需要固定的PL/SQL对象


碎片化现象造成共享池中的可用空间均成为许多零散的片段,而没有足够大的连续空间,这是共享池中的普遍现象。消除共享池错误(参阅第4章和第13章以了解更多信息)的关键是理解哪些对象会引起问题。一旦知道了会引起潜在问题的PL/SQL对象,就可以在数据库启动时固定这个代码(这时共享池是完全连续的)。


SQL>select name, sharable_mem from v$db_object_cache where sharable_mem > 100000 and type in ('PACKAGE', 'PACKAGE BODY','FUNCTION', 'PROCEDURE') and kept = 'NO';


NAME              SHARABLE_MEM


----------------- ------------


DBMS_BACKUP_RESTO       258495


DBMS_STATS              131422




12.通过V$SQLAREA查找有问题的查询


V$SQLAREA视图提供了一种识别有潜在问题或者需要优化的SQL语句的方法,从而可通过减少磁盘的访问来优化数据库的综合性能。


select b.username username, a.disk_reads reads,a.executions exec, a.disk_reads /decode(a.executions, 0, 1,a.executions) rds_exec_ratio,a.command_type, a.sql_text Statement from        v$sqlarea a, dba_users b where a.parsing_user_id = b.user_id and a.disk_reads > 100000 order by a.disk_reads desc;



oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html