日期:2014-05-16  浏览次数:20496 次

性能调优之六:数据库层面调优

?

--- ---?----------Oracle调优--- ---?--------

?

调优思路

?

1. 数据库连接最大数设置

?

2. 回滚段大小设置

?

3. 共享SGA大小设置

?

4. 数据切分(水平分库、垂直分库、分区表)

?

5. 找出执行时间长的SQL语句并优化SQL的执行计划

?

6、查看数据库是否有死锁

?

7、数据库集群

?


优化措施

1、查看和设置数据库最大连接数

当数据库最大连接数不够时,会出现客户端连接间歇性失败,报ORA-12519错,我们可以通过以下的SQL语句来查看当前连接数和数据库允许的最大连接数,对比一下,看是否达到了最大值。

?

--查看当前连接数
select count(*) from v$process;

--查看数据库允许的最大连接数
select value from v$parameter where name = 'processes'; 
?

?

修改数据库允许的最大连接数:

?

(1)使用sqlplus登陆数据库

?

sqlplus "sys/oracle as sysdba";
?

?

(2)设置数据库允许的最大连接数

?

alter system set processes = 300 scope = spfile;

?

?

(3)重启数据库

?

shutdown immediate;
startup;
?

?

(4)查看数据库允许的最大连接数

?

select value from v$parameter where name = 'processes';

?

?

6、查看数据库是否有被锁的表

?

SELECT A.OWNER 方案名,
       A.OBJECT_NAME 表名,
       B.XIDUSN 回滚段号,
       B.XIDSLOT 槽号,
       B.XIDSQN 序列号,
       B.SESSION_ID 锁表SESSION_ID,
       B.ORACLE_USERNAME 锁表用户名,
       decode(D.type,
              'XR',
              'NULL',
              'RS',
              'SS(Row-S)',
              'CF',
              'SS(Row-S)',
              'TM',
              'TABLE LOCK',
              'PW',
              'TABLE LOCK',
              'TO',
              'TABLE LOCK',
              'TS',
              'TABLE LOCK',
              'RT',
              'ROW LOCK',
              'TX',
              'ROW LOCK',
              'MR',
              'S(Share)',
              NULL) 锁定方式,
      
       C.MACHINE 用户组,
       C.TERMINAL 机器名,
       B.OS_USER_NAME 系统用户名,
       B.PROCESS 系统进程id,
       DECODE(C.STATUS, 'INACTIVE', '不活动', 'ACTIVE', '活动') 活动情况,
       C.SERVER,
       C.SID,
       C.SERIAL#,
       C.PROGRAM 连接方式,
       C.LOGON_TIME
  FROM ALL_OBJECTS A, V$LOCKED_OBJECT B, SYS.GV_$SESSION C, v$lock d
 WHERE (A.OBJECT_ID = B.OBJECT_ID)
   AND (B.PROCESS = C.PROCESS)
   and C.sid = d.sid
   and B.LOCKED_MODE = D.LMODE
 ORDER BY 1, 2;
??

?

?

?

?