简单聊聊oracle 的会话数

网友投稿 887 2022-11-03

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

简单聊聊oracle 的会话数

Oracle 作为以前排名第一的数据库软件,凭借其深耕数据库领域多年积累的深厚技术功底,目前依然占据着很大的市场份额。

基于底层的操作系统、存储、网络等基础设施,数据库的处理能力也是建立在这些基础设施之上。数据库的活跃会话并发数也是有上限的。当SQL运行变慢,新的SQL语句 从应用服务器源源不断的涌进数据库时,oracle 处理不过来会导致活跃会话数和总会话数升高。持续升高的oracle活跃会话数很容易让数据库处理速度越来越慢甚至hang住。。。

所以,监控oracle 的总会话数和活跃会话数是一件很重要的事情。。。

查看当前oracle 节点的总会话数:SQL> select count(*) from v$session; COUNT(*)----------       247

查看当前oracle 节点的活跃会话数:SQL> select count(*) from v$session where status='ACTIVE' 2 and program ='JDBC Thin Client'; COUNT(*)---------- 2

查看所有节点的总会话数:SQL> select count(*) from gv$session; COUNT(*)---------- 364

查看所有节点的活跃会话数:SQL> select count(*) from gv$session where status='ACTIVE' 2 and program ='JDBC Thin Client'; COUNT(*)---------- 5

聪明的读者可能看到了,当前节点的会话数 查询v$session 视图,全部节点的会话数 查询gv$session 视图.

对于应用服务器不使用JDBC Thin Client连接oracle的情况,大家可以根据实际填写,或者直接去掉program ='JDBC Thin Client',因为oracle 存储过程相关的会话数也不算在JDBC Thin Client里面的。

对了,对于使用pdb的情况,上面的语句要简单改改:

查询某个pdb 所有节点的总会话数:SQL> select count(*) from gv$session where con_id=3; COUNT(*)---------- 1066

查询某个pdb所有节点的活跃会话数:SQL> select count(*) from gv$session where con_id=3 and status='ACTIVE' and program='JDBC Thin Client'; COUNT(*)---------- 4

嗯,总会话数和总活跃会话数已经查询出来了,怎么知道哪条SQL 语句占用会话数最多呢?

别怕,答案马上揭晓

SQL> select sql_id,count(*) from gv$session where status='ACTIVE' and program='JDBC Thin Client' group by sql_id order by 2;SQL_ID COUNT(*)------------- ----------9k5k3sdk407tn 1dnrd7rhdg834n 1

SQL> select sql_text from v$sqltext where sql_id='dnrd7rhdg834n' order by piece;SQL_TEXT----------------------------------------------------------------select * from xxxx 此处省略一万字,额,SQL 太长了。。。如果是RAC环境,查询v$sqltext查不出的话,请查询gv$sqltext

对于pdb,查询sql_id的时候在where 后面加上con_id 就可以了。

做监控的话,推荐把以上的查询语句写在python或者shell 里面,30秒或者1分钟执行一次即可。

上一篇:软件测试培训之测试计划与测试方案
下一篇:软件测试培训之互联网Web测试用例设计方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~