11g-sql-performance-tuning-guide 笔记1-管理自动负载存储库-oracle
configuring a database for performance
初始化参数的调整,当然这些对性能影响不到,最重大的是processes这个参数,最重要,
参数关注如下:
db_name,db_domain,open_cursors,control_files,db_files;
compatible, db_block_size , sga_target, pga_aggregate_target, processes ,sessions, undo_management, undo_tablespace
关于undo表空间
建议自动管理,即 undo_management=auto;默认是auto
查看视图 v$undostat 视图可以监控和查看undo表空间信息;
redo log file的大小 影响性能;
虽然不影响lgwr的性能,但是影响了dbwr和checkpoint 行为,频繁的检查点会降低数据库的性能;
fast_start_mttr_target 初始化参数也影响检查点的频率,如果 fast_start_mttr_target 参数设置成limit 实例恢复时间,则oracle会在必要时自动尝试检查点,以应对在限制的时间内恢复实例的需求;
默认的fast_start_mttr_target=0
查看最佳的logfile 大小,查看视图 v$instance_recovery ;
也可以通过oracleenterprise manager 的redo log group页的大小建议 ;
建议是 redo logfile 每20分钟切换一次;
V$DISPATCHER: general information about dispatcher processes
■V$DISPATCHER_RATE: dispatcher processing statistics
在调度 增加processes之前,先通过启用oracle 连接池的功能,如果启动连接池就达到效果,就不用修改添加processes了,因为这些参数都是需要重启数据库的;
Enabling connection pooling 参考笔记 oracle 服务端连接池
调度程序进程的总数受限于初始化参数MAX_DISPATCHERS的值。 在添加调度程序进程之前,您可能需要增加此值。
show parameter max_dispatchers
连接管理器进程使用多路复用来建立和维护从多个用户到单个调度员的网络会话。 例如,多个用户进程可以通过来自连接管理器进程的单个连接连接到一个调度器。 会话多路复用是有益的,因为它最大限度地利用了调度程序连接。 多路复用对调度器之间的数据库链路会话进行多路复用也很有用。
Identifying Contention for Shared Servers
识别共享服务器的争用
请求队列中的等待时间逐渐增加表明共享服务器出现争用。 要检查等待时间数据,请使用动态性能视图V $ QUEUE。 该视图包含显示共享服务器请求队列活动的统计信息。 默认情况下,此视图仅对用户SYS和具有SELECT ANY TABLE系统特权(如SYSTEM)的其他用户可用。 表4-3列出了显示请求等待时间和队列中请求数量的列。
表4-3 V $ QUEUE中的等待时间和请求列
列 说明
等待 WAIT 显示队列中所有请求的总等待时间,以百分之一秒为单位
TOTALQ 显示曾经在队列中的请求总数
通过发出以下SQL语句,在应用程序运行时偶尔监视这些统计信息:
SELECT DECODE(TOTALQ, 0, 'No Requests',
WAIT/TOTALQ || ' HUNDREDTHS OF SECONDS') "AVERAGE WAIT TIME PER REQUESTS"
FROM V$QUEUE
WHERE TYPE = 'COMMON';
该查询返回显示以下内容的计算结果:
AVERAGE WAIT TIME PER REQUEST
-----------------------------
.090909 HUNDREDTHS OF SECONDS
从结果中可以看出,在处理之前,请求的平均等待时间为0.09秒。
您还可以通过发出以下查询来确定当前正在运行的共享服务器数量:
SELECT COUNT(*) "Shared Server Processes"
FROM V$SHARED_SERVER
WHERE STATUS != 'QUIT';
如果使用共享服务器检测资源争用情况,请首先通过检查共享池和大型池来确保这不是内存争用问题。 如果性能仍然很差,那么您可能需要创建更多资源来减少共享服务器进程争用。 您可以通过修改可选的服务器进程初始化参数来执行此操作
可以执行语句检查内存使用情况:
--SGA各个池大小
COL name FORMAT a32;
SELECT pool, name, bytes/1024/1024 M
FROM v$sgastat
WHERE pool IS NULL
OR pool != 'shared pool'
OR (pool = 'shared pool' AND
(name IN
('dictionary cache', 'enqueue', 'library
cache', 'parameters', 'processes', 'sessions', 'free memory')))
ORDER BY pool DESC NULLS FIRST, name;
■MAX_DISPATCHERS
■MAX_SHARED_SERVERS
■DISPATCHERS
■SHARED_SERVERS