1、 数据缓冲区命中率: SQL> select value from v$sysstat where name ='physical reads'; SQL> select value from v$sysstat where name ='physical reads direct'; SQL> select value from v$sysstat where name ='physical reads direct (lob)'; SQL> select value from v$sysstat where name ='consistent gets'; SQL> select value from v$sysstat where name = 'db block gets'; 这里命中率的计算应该是 令 x = physical reads direct + physical reads direct (lob) 命中率 =100 - ( physical reads - x) / (consistent gets + db block gets - x)*100 通常如果发现命中率低于 90%,则应该调整应用可可以考虑是否增大数据缓冲区 2、共享池的命中率: SQL> select sum(pinhits-reloads)/sum(pins)*100 "hit radio" from v$librarycache; 假如共享池的命中率低于 95%,就要考虑调整应用(通常是没使用 bind var )或者增加内存 select size_for_estimate, estd_physical_read_factor, estd_physical_reads from v$db_cache_adviceselect * from v$shared_pool_adviceSELECT shared_pool_size_for_estimate "Size of Shared Pool in MB",shared_pool_size_factor "Size Factor",estd_lc_time_saved "Time Saved in sec"FROM v$shared_pool_advice;select * from v$sga_target_adviceSELECT round(pga_target_for_estimate / 1024 / 1024,2) "PGA(MB)",pga_target_factor,estd_pga_cache_hit_percentage,estd_overalloc_countFROM v$pga_target_advice;-----------查看 PGA 的大小建议select pga_target_for_estimate "size",pga_target_factor "factor",estd_extra_bytes_rw/1000000 "extra Mb r/w", estd_overalloc_count "over alloctions"from v$pga_target_advice;----------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';---------------shared_pool_advice 建议值----select SHARED_POOL_SIZE_FOR_ESTIMATE "pool size",SHARED_POOL_SIZE_FACTOR "pool size factor",ESTD_LC_SIZE "estd lc size",ESTD_LC_MEMORY_OBJECTS "estd lc mem obj",ESTD_LC_TIME_SAVED "time saved",ESTD_LC_TIME_SAVED_FACTOR "time saved factor",ESTD_LC_MEMORY_OBJECT_HITS "mem obj hits"from v$shared_pool_advice;--修改 db1,db4,db3 的 log_buffer 128k*count(cpu)或 512kshutdown immediatestartup nomount;alter database set log_buffer=1048576 scope=spfile;alter database mount;alter database open;--增大 db_cache_size 来增大 BUFFER CACHE HIT RETIOSGA:database buffer cache,shared pool ,log buffer,large pool ,java pooldb_cache_size,shared_pool:library,dictionary,log_bufferSwap 空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。
那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到 Swap 空间中,等到那些程序要运行时,再从 Swap 中恢复保存的数据到内存中这样,系统总是在物理内存不够时,才进行 Swap 交换Shmmax 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,shmmax设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降使用 V$shared_pool_advice 调整共享池从 Oracle9i 开始,引入了一个共享池顾问的新特性DBA 可以使用这个特性,对共享池的内存使用进行优化,进行正确地调整为什么需要共享池顾问------------------------+该顾问建议中关于 library cache 内存的信息,根据假设调整共享池大小,来预判对系统整体解析活动造成的影响当需要解析时,如果无法分配连续的内存,该解析就被阻塞,造成数据库和应用的性能下降另一方面,如果分配的内存远大于共享池所需要的那么系统服务器的资源就被无价值地浪费了什么是共享池顾问------------------------+共享池顾问在 Oracle9.2 被引入,持续对共享池的 library cache 的使用进行跟踪。
持续对不同大小的共享池进行统计(从当前设置的 50%到 200%)+DBA 可以通过新视图 V$SHARED_POOL_ADVICE 了解不同共享池大小的相关性能该视图(V$SHARED_POOL_ADVICE)给出的信息包括:评估 library cache 需要多少的内存,library cache中的对象大小,评估共享池大小变化时,解析消耗的时间如何使用共享池顾问------------------------+初始化参数 STATISTICS_LEVEL 需要设置为 ALL 或 TYPICAL(不能是 BASIC)+该参数可以动态修改:SQL> alter system set statistics_level=typical;如何从 V$SHARED_POOL_ADVICE 中收集有用的信息-------------------------------------------在设置好所需的参数之后,在一个负载稳定的系统中运行一段时间后,可以通过简单的 SQL 语句查询该视图,如下:SQL> SELECT shared_pool_size_for_estimate "Size of Shared Pool in MB",shared_pool_size_factor "Size Factor",estd_lc_time_saved "Time Saved in sec"FROM v$shared_pool_advice;Size of Shared Pool in MB Size Factor Time Saved in sec------------------------- ----------- -----------------24 .5 52532 .6667 52540 .8333 52548 1 52556 1.1667 52564 1.3333 52572 1.5 52580 1.6667 52588 1.8333 52696 2 52610 rows selected.+从上面的输出可以看出当前的共享池设置为 48M(Size factor 为 1)。
上面的例子看出,即使将共享池大小缩减为 50%,也能达到同样的效果将共享池增大到几乎 2 倍,才能在解析时节约 1 秒使用该视图,DBA 可以更有效地调节共享池注意-----------------------+改变共享池大小引起的 latch 争用以及碎片问题,该顾问无法考虑。