1-熟悉几个常用的调优参数,并加以理解,结合实际项目运用。
Oracle 11g的初始化参数分为基本参数和高级参数两类。基本参数是一组可调整的参数,如CONTROL_FILES,DB_BLOCK SIZE,PROCESSES等;高级参数是一组精细调整的参数,如共享服务器SHARED_SERVERS等。初始化参数存放在初始化参数文件SPFILE中。SPFILE是一个二进制文件,只能由Oracle系统进行读写。常用的调优参数:
(1) buffer_pool_keep:保留池大小(从DB_ BLOCK_ BUFFERS 分配)。目的是将对象保留在内存中,以减少I/O.
(2) buffer_pool_recycle:循环池大小(从DB_ BLOCK_ BUFFERS分配)。目的是使用对象后将其清除,以便重复使用内存。
(3) control file_record_keep_time:控制文件中可重新使用部分中的记录必须保留的最短时间(天数)。
(4) cursor_space_for_time:在一个游标引用共享SQL区时,确定将SQL区保留在共享池中还是从中按过期作废处理。
(5) db_block_buffers:缓冲区高速缓存中Oracle块的数量,该参数会显著影响个例程的SGA总大小。
(6) db_keep_cache_size:指定KEEP缓冲池中的缓冲区数,KEEP缓冲池中的缓冲区大小是主要块大小(即db_block_size 定义的块大小)。
2-x$kccle 存放了什么信息?
SQL> desc x$kccle;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ADDR RAW(8)
INDX NUMBER
INST_ID NUMBER --表示instance_id
LENUM NUMBER --等同于v$log中group#
LESIZ NUMBER --logfile size, 用blocks来计数
LESEQ NUMBER --等同于v$log中sequence#
LEHWS NUMBER
LEBSZ NUMBER -- block size
LENAB NUMBER
LEFLG NUMBER --flag, 表示日志的状态
LETHR NUMBER --等同于v$log中thread#
LELFF NUMBER --log file forward, log file的前向链表,指向下一个log file
LELFB NUMBER --log file backward, log file的后向链表,指向上一个log file
LELOS VARCHAR2(16) --low scn, 等同于v$log中first_change#
LELOT VARCHAR2(20) --low time, 等同于v$log中first_time
LENXS VARCHAR2(16) --next scn, 与下一个logfile的low scn相同
LENXT VARCHAR2(20) --next time
LEPVS VARCHAR2(16) --prev scn, 与上一个logfile的low scn
LEARF NUMBER --archive link forward
LEARB NUMBER --archive link backward
LEFNH NUMBER
LEFNT NUMBER
LEDUP NUMBER --等同于v$log中members
3-共享池三个主要组件是什么?分别说明…
共享池中的主要组件有以下三个。
(1)库缓存(library cache):主要缓存共享SQL和PL/SQL语句的相关信息。
(2)数据字典缓存(data dictionary cache):缓存数据字典表(如,DBA_TABLES、DBA_USERS等)的信息,用于解释权限、表结构等。
(3)UGA(user globa area):在共享服务器模式下,当没有配置大池时(即larger_pool_size=0),UGA会占用共享池(shared pool)的空间。
4-v$librarycache 存放了什么信息?
SQL> desc v$librarycache;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
NAMESPACE VARCHAR2(64)
GETS NUMBER
GETHITS NUMBER
GETHITRATIO NUMBER
PINS NUMBER
PINHITS NUMBER
PINHITRATIO NUMBER
RELOADS NUMBER
INVALIDATIONS NUMBER
DLM_LOCK_REQUESTS NUMBER
DLM_PIN_REQUESTS NUMBER
DLM_PIN_RELEASES NUMBER
DLM_INVALIDATION_REQUESTS NUMBER
DLM_INVALIDATIONS NUMBER
如下所示,库缓冲请求数和不命中数,可以计算命中率。
SQL> select sum(pins) 请求存取数,sum(reloads) 不命中数 from V$librarycache;
请求存取数 不命中数
---------- ----------
1654727 1355
5-v$sysstat 存放了什么信息?
Oracle启动后不断地收集和统计数据存取的情况,并将其存放在动态性能视图V$SYSSTAT中,其中有以下几项统计。
(1)dblock gets:该统计值为数据请求的总数。
(2)consistent gets:该统计值为通过对内存缓冲区存取即能满足的请求数。
(3)physical reads:该统计值为磁盘文件存取的总数。
6-PGA是什么?起什么作用?
专有模式下ORACLE会给每个连接分配一个服务进程(Server Process),这个服务进程将为这个连接服务。为这个服务进程分配的内存叫做PGA。PGA不需要Latch也不需要Lock,永远不会发生竞争。
PGA组成中主要包括两部分:Session Area和Private SQL Area。
-
Session Area:包括会话跟踪信息,使用alter session命令修改的环境参数、打开的DB Links、会话特有的角色等。
-
Private SQL Area:Server Process每执行一个SQL都需要申请一个Private SQLArea,就是Cursor。Private SQL Area可以分成两个部分Persistent Area和Run-TimeArea。Private SQL Area中保存的是每个Session私有的信息,例如Cursor行数。SharedPool中有一个Public SQL Area,保存的是执行计划等共享信息。两者截然不同。
7-pag_aggregate_target 存放了什么信息?
SQL> show parameter pga_aggregate_target;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 0
8-查看本地数据库的PGA管理模式并写出SQL…
SQL> show parameter workarea_size_policy;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
workarea_size_policy string AUTO
9-哪四种情况Oracle会进行排序操作?
当使用CREATE INDEX,ORDER BY 或GROUP BY语句时,Oracle数据库将自动执行排序的操作。通常,在以下情况Oracle会进行排序操作。
(1)在创建索引时。
(2)使用Order by的SQL语句。
(3)使用Group by的SQL语句。
(4)进行table join时,由于现有索引的不足而导致SQL优化器调用MERGE SORT。
这个章节可能概念比较多,学习来也比较吃力和模糊,原因是多方面的。在一些大项目中,系统的性能也是一个瓶颈。所以学习数据库性能调优,将来为开发也是积累了一定的性能调优技巧。