---------------------Oracle Database 10g Performance Tuning Tips & Techniques
v$视图
12.1 视图的创建和访问
每个v$视图的底层视图定义,可以通过名为v$fixed_view_defintion的v$视图查看,视图是通过选取一个或多个x$表中的信息来创建的。
12.1.1 获得所有v$视图的数量和列表:
select count(*) from v$fixed_table where name like 'V%';
12.1.2 查找用于创建v$视图的x$表:
select * from v$fixed_view_definition where view_name='GV$FIXED_TABLE';
访问v$fixed_table_defintion 视图可以获得组成v$视图的底层x$ 表的所有信息
12.1.3 查找组成dba_视图的底层对象:
select text from dba_views where view_name='DBA_IND_PARTITIONS';
set long 2000000(可能需要将长度设置2000 000 来查看所有的输出结果)
12.1.4 使用有帮助的v$脚本
1.基本的数据库信息
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: 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
--------- --------- ------------
ORCL 10-APR-10 ARCHIVELOG
2.自动工作量仓库(AWR)的基本信息
AWR 使用多少空间:
14:03:34 SQL> select occupant_name,occupant_desc,space_usage_kbytes from v$sysaux_occupants where occupant_NAME like '%AWR%';
OCCUPANT_NAME OCCUPANT_DESC SPACE_USAGE_KBYTES
------------------------------ ------------------------------------------------------------ ------------------
SM/AWR Server Manageability - Automatic Workload Repository 117824
系统上最原始的AWR信息是什么:
14:05:47 SQL> select dbms_stats.get_stats_history_availability from dual;
GET_STATS_HISTORY_AVAILABILITY
---------------------------------------------------------------------------
17-SEP-10 07.10.02.703291000 AM +08:00
什么是AWR信息的保留期:
14:06:07 SQL> select dbms_stats.get_stats_history_retention from dual;
GET_STATS_HISTORY_RETENTION
---------------------------
31
将AWR信息的保留基更改为15天:
14:13:12 SQL> exec dbms_stats.alter_stats_history_retention(15);
PL/SQL procedure successfully completed.
3.基本的许可信息
select * from v$license;
4.数据库已安装的产品
select * from v$option;
12.1.5 内存分配摘要(v$sga)
select * from v$sgainfo;
select (
(select sum(value) from v$sga) -
(select current_size from v$sga_dynamic_free_memory)
) "SGA_TARGET"
from dual;
12.1.6 内存分配的细节(v$sgastat)
select * from v$sgastat;
12.1.7 在v$PARAMETER 中发展init.ora 的设置。
select name,value,isdefault,isses_modifiable,issys_modifiable from v$parameter order by name;
当 ISDEFAULT=false ,显示了init.ora 参数已改动。
当 isses_modifiable=TRUE ,能定的会话,能修改的参数
当 issys_modifiable=IMMEDIATE,不用关闭和重启oracle 就可以修改的参数
12.1.8 测定数据库的命中率(v$sysstat)
查询v$sysstat 视图可能查看从内存中读取数据的频率。
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;
在oracle 10g中,也可以直接获得v$sysmetric 中的awr 值:
select metric_name,value from v$sysmetric
where METRIC_NAME='Buffer Cache Hit Ratio';
很高的命中率也可能意味着查询使用了过度的索引。
如果这个命中率低于95% ,你可能需要增加init.ora 参数DB_CACHE_SIZE ,或者调整一些引起磁盘读取操作的查询
也可以使用新的v$db_cache_advice视图来帮助改变数据缓存的大小。
下面通过查询创建一个值的列表来展示较大的数据缓存和较小的数据缓存的不同效果:
select size_for_estimate,buffers_for_estimate,
estd_physical_read_factor,estd_physical_reads
from v$db_cache_advice
where name='DEFAULT'
AND block_size=
(select value
from v$parameter
where name='db_block_size')
AND advice_status='ON';
12.1.8 测定数据字典的命中率(v$ROWCACHE)
使用v$ROWCACHE 视图来发现对数据字典的调用是否有郊地利用了通过init.ora参数SHARED_POOL_SIZE分配的内存缓存;
select sum(gets),sum(getmisses),(1-(sum(getmisses) /
(sum(gets) + sum(getmisses)))) * 100 HitRate
from v$rowcache;
如字典的命中率不高,系统性能合大受影响。
在oracle 10g中,也可以直接获得v$sysmetric中的AWR的信息
select metric_name ,value
from v$sysmetric
where metric_name='Library Cache Hit Ratio';