oracle session 相关优化

导读:

同学们是不是都用遇到过这种情况,一个业务系统开发期业务并发量只是估算一个值,而系统上线后这个并发量可能会出现溢出或是不够的

情况。在这种情况下我们DBA怎么给出合理的性能优化建议呢?本文就是利用数据给出session并发量的合理值。

目的:

利用数据给出ORACLE性能优化session的合理值。

环境:

OS: 6.1 AIX

Oracle: 11.2.0.4  rac on 2 nodes

1.实例启动后用户最大并发session?

select SESSIONS_CURRENT,SESSIONS_HIGHWATER from v$license;

2.数据库是否有大量的inactive session?

select

(select count(*) from v$session where status=‘INACTIVE‘) as "session inactive" ,

(select count(*) from v$session ) as "session total" from dual;

--可以初步判断中间件连接数设置是否合理。如果inactive/total比值大于0.6考虑是否可以优化(个人建议)

3.数据库大量inactive session都是什么业务?

select username,count(*) from v$session where status=‘INACTIVE‘ group by username;

--可以初步判断是什么业务有过多的inactive,联系业务是否可以优化(对“症”下药)

4.既然发现了数据库有大量的inactive存在,怎么样有理有据的给出优化建议呢?

我的方法:

写一个统计total session 与active session的脚本,定时执行脚本并将统计结果写入一张表。经过大量的统计(业务高峰与低峰)就可以

得到合理的session值,可以把这个合理的并发session值反馈给业务,进而最优使用系统资源,而不是产生大量的inactive session

4-1.创建一个收集统计信息的表dou_tunning

create table dou_tunning (

username varchar2(40),

total number,

active number,

osdate date);

4-2.编写一个收集session的脚本

vi check_session.sh

#oracle用户的环境变量,一定编辑在脚本中#

sqlplus -s ‘system/system‘ <

insert into  dou_tunning (select t.username,t.total,d.active,sysdate from (select username,count(*) as total from gv\

$session where username is not null and username not in (‘SYSTEM‘,‘SYSMAN‘,‘DBSNMP‘) group by username ) t ,(select

username,count(*) as active from gv\$session where username is not null and status=‘ACTIVE‘ group by username ) d where

t.username=d.username) ;

commit;

exit;

EOF

4-3.定时执行收集session的脚本

doudou1:/home/oracle$crontab -l

5,15,25,35,45,55  * * * * sh /home/oracle/check_session.sh

--AIX中的crontab不支持“/”,很无奈只能写成这样了。当然了,你也可以每分钟收集一次session信息,给客户更详尽的优化数据。

4-4.根据收集来的数据,根据业务的高峰期并发session值,进而给出最优并发session值

5.CASE分析

select * from dou_tunning where username=‘TAB_DOUDOU‘

TAB_DOUDOU 363 1 2014/8/12 13:25:01

TAB_DOUDOU 361 1 2014/8/12 13:28:00

TAB_DOUDOU 358 1 2014/8/12 13:30:01

TAB_DOUDOU 358 3 2014/8/12 13:31:00

TAB_DOUDOU 358 2 2014/8/12 13:32:00

TAB_DOUDOU 358 3 2014/8/12 13:33:00

TAB_DOUDOU 358 2 2014/8/12 13:34:01

TAB_DOUDOU 362 1 2014/8/12 13:36:00

TAB_DOUDOU 363 4 2014/8/12 13:37:00

TAB_DOUDOU 363 2 2014/8/12 13:38:01

TAB_DOUDOU 366 3 2014/8/12 13:39:00

TAB_DOUDOU 368 2 2014/8/12 13:40:00

TAB_DOUDOU 364 2 2014/8/12 13:41:00

TAB_DOUDOU 364 1 2014/8/12 13:42:00

TAB_DOUDOU 358 3 2014/8/12 13:43:00

TAB_DOUDOU 362 1 2014/8/12 13:44:00

TAB_DOUDOU 362 2 2014/8/12 13:47:00

TAB_DOUDOU 360 1 2014/8/12 13:48:00

TAB_DOUDOU 358 1 2014/8/12 13:50:00

TAB_DOUDOU 357 3 2014/8/12 13:51:01

TAB_DOUDOU 357 1 2014/8/12 13:52:00

TAB_DOUDOU 358 1 2014/8/12 13:53:00

TAB_DOUDOU 356 1 2014/8/12 13:55:00

TAB_DOUDOU 362 4 2014/8/12 14:05:00

TAB_DOUDOU 362 2 2014/8/12 14:15:00

TAB_DOUDOU 363 1 2014/8/12 14:45:00

TAB_DOUDOU 363 2 2014/8/12 14:55:01

TAB_DOUDOU 361 3 2014/8/12 15:05:00

TAB_DOUDOU 362 1 2014/8/12 15:15:01

TAB_DOUDOU 366 1 2014/8/12 15:25:00

TAB_DOUDOU 360 1 2014/8/12 15:35:00

TAB_DOUDOU 359 2 2014/8/12 15:45:00

TAB_DOUDOU 361 1 2014/8/12 15:55:00

TAB_DOUDOU 361 1 2014/8/12 16:05:00

--以上是一个核心业务统计的session值,可以看到接近400的session,多数都是inactive,这个一个资源利用严重不合理的案例,当然了,

我会继续给这个系统进行分析与比较,最终给客户提出一个有建设性意义的session值。

总结:

合理的利用资源也是一种优化的方式。优化其实是一种思想。

时间: 2024-10-08 11:58:52

oracle session 相关优化的相关文章

Oracle 查看相关优化器参数

select x.ksppinm name, y.ksppstvl value, y.ksppstdf isdefault, decode(bitand(y.ksppstvf, 7), 1, 'MODIFIED', 4, 'SYSTEM_MOD', 'FALSE') ismod, decode(bitand(y.ksppstvf, 2), 2, 'TRUE', 'FALSE') isadj from sys.x$ksppi x, sys.x$ksppcv y where x.inst_id =

【Oracle 优化】Oracle数据库提高命中率及相关优化

本文是关于Oracle数据库调试与优化方面的文章,主要介绍Oracle数据库中命中率相关的问题,包括不同的算法之间性能的比对. 关于Oracle中各个命中率的计算以及相关的调优 1)Library Cache的命中率: .计算公式:Library Cache Hit Ratio = sum(pinhits) / sum(pins) SQL>SELECT SUM(pinhits)/sum(pins) FROM V$LIBRARYCACHE; 通常在98%以上,否则,需要要考虑加大共享池,绑定变量,

Oracle 性能相关常用脚本(SQL)

在缺乏的可视化工具来监控数据库性能的情形下,常用的脚本就派上用场了,下面提供几个关于Oracle性能相关的脚本供大家参考.以下脚本均在Oracle 10g测试通过,Oracle 11g可能要做相应调整. 1.寻找最多BUFFER_GETS开销的SQL 语句 [sql] view plain copy print? --filename: top_sql_by_buffer_gets.sql --Identify heavy SQL (Get the SQL with heavy BUFFER_G

oracle 常用相关sql 语句

一.oracle 常用相关sql 语句 1. 连接数据库       su - oracle -c " sqlsplus 用户/密码     注:首次登陆用  sqlplus / as sysdba            注: 关闭数据库:注:shutdown可加关闭选项,从最温和到最粗暴的行为选项为(shutdown.shutdown transactional.shutdown immediate.shutdown abort)                 shutdown:关闭,等待每

Oracle SQL 性能优化技巧

Select语句完整的执行顺序: SQL Select语句完整的执行顺序: 1. from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子句将数据划分为多个分组: 4.使用聚集函数进行计算: 5.使用having子句筛选分组: 6.计算所有的表达式: 7. 使用order by对结果集进行排序 性能优化技巧 1.选用适合的ORACLE优化器      ORACLE的优化器共有3种 A.RULE (基于规则) b.COST (基于成本) c

基于oracle的sql优化方法论

Oracle数据库里SQL优化的终极目标就是要缩短目标SQL语句的执行时间.要达到上述目的,我们通常只有如下三种方法可以选择: 1.降低目标SQL语句的资源消耗: 2.并行执行目标SQL语句: 3.平衡系统的资源消耗. "方法1:降低目标SQL语句的资源消耗"以缩短执行时间,这是最常用的SQL优化方法.这种方法的核心是要么通过在不更改业务逻辑的情况下改写SQL来降低目标SQL语句的资源消耗,要么不改SQL但通过调整执行计划或相关表的数据来降低目标SQL语句的资源消耗. 方法2:并行执行

ORACLE ERP相关整理汇总

摘自:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763104687270e54f7633f8883492c81c40884642c101a39feed7c63525483846b6777ac4f5aeefb3765377523a09bbfd20c82e5866d72c8713b2d5cd5104c840eafba11658337902bb6e947f0bb802594dac5d2af0b008c044521d3ae9c5b700

Oracle SQL性能优化系列

1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖. 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行an

转://从一条巨慢SQL看基于Oracle的SQL优化

http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从执行计划中找到SQL执行慢的Root Cause.统计信息与cardinality问题.探索性能杀手Filter操作.如何进行逻辑重写让SQL起飞等多个维度进行解析,最终优化巨慢SQL语句,希望能够抛砖引玉,和大家一起探讨SQL优化方法. 另外,还简单介绍了两种解决疑难SQL优化问题的工具:1005