Oracle 应用短连接导致连接风暴

简介: 进一步对上一篇客户的环境进行排查,发现同步程序是以短连接的形式访问数据库,平均每秒70次的连接

进一步对上一篇客户的环境进行排查,发现同步程序是以短连接的形式访问数据库,平均每秒70次的连接;通过在测试环境进行批量短连接测试,重现大量

select /*+ connect_by_filtering index(sysauth$ i_sysauth1) */ privilege#, bitand(nvl(option$, 0), 8), grantee#, level from sysauth$ connect by grantee#=prior privilege# and privilege#>0 start with grantee#=:1 and privilege#>0

的问题。
(一)
测试环境,并接入EasyDB数据库管控软件

sys@ORCL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

sys@ORCL> show parameter audit

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest                      string      /u01/app/oracle/admin/orcl/adu
                                                 mp
audit_sys_operations                 boolean     FALSE
audit_syslog_level                   string
audit_trail                          string      DB

sys@ORCL> show parameter cursor_sharing

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cursor_sharing                       string      EXACT

(二)
简单编写shell脚本,发起大量数据库连接

#more /home/oracle/connect.sh 

for i in {1..200000}
do
  for j in {1..40}
  do  
     sh /home/oracle/conn.sh
  done
done

#more /home/oracle/conn.sh
#只执行简单的查询操作,之后退出
 sqlplus baiyang/oracle@orcl << EOF
  select * from v\$version;
  exit;
  EOF
 
#发起多个job执行,加大并发,执行将近一个小时 
 nohup sh connect.sh > /dev/null 2>&1&

(三)
查看EasyDB监控信息,这时各项指标飙升,但是TPS=0,
QPS,逻辑读明显上升
image
Oracle CPU、DBTime明显上升
image
主机CPU飙升
image
基本上是软解析,和客户环境遇到的不同
image
开了DB审计,引起log file sync 等待事件
image
(四)
分析listener.log 文件,确认每秒发起的连接数

grep '26-DEC-2018'  listener.log | sed 's/\*.*SERVICE_NAME=/  /g;s/).*HOST=/ /g;s/).*$//g'   | awk  '{if(NF==4){print "insert into t_tab  values('\''"$1"'\'','\''"$2"'\'','\''"$3"'\'','\''"$4"'\'');"}}'   > connect.txt
# 入库
@/u01/app/oracle/diag/tnslsnr/172-16-8-141/listener/trace/connect.txt
# 查询如下

image
可以看到这段时间监听每秒都响应了大量的连接请求
(五)
分析AWR报告,看看会有什么变化
image
因为开了SQL审核,所以有入库的操作;
最后一条是我们执行的测试SQL;
其他则都是递归SQL,大量的递归SQL;
但是不存在硬解析,这个客户环境的现象不一致
image
(6)
通过测试,重新了数据库问题,并验证在未执行 set role 时,同样会导致;
客户应用程序存在大量短连接,这会导致数据库、服务器资源飙升,并且会导致监听无法响应更多请求;
因客户的程序已经找不到开发商,目前很难对应用程序进行排查;
cursor_sharing=FORCE,虽然会带来一些优势,但官方不建议将此作为长久的优化方式;
提醒客户更新业务架构,使用长连接,并且自主掌握核心代码。

目录
相关文章
|
1月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
167 64
|
4月前
|
存储 Oracle 关系型数据库
关系型数据库Oracle应用场景
【7月更文挑战第5天】
150 3
|
5月前
|
Oracle 关系型数据库 数据库
已解决:idea 连接 oracle 数据库 避雷
已解决:idea 连接 oracle 数据库 避雷
49 2
|
1月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
58 3
|
1月前
|
SQL Oracle 关系型数据库
Python连接Oracle
Python连接Oracle
20 0
|
4月前
|
Oracle 关系型数据库 数据处理
|
4月前
|
人工智能 Oracle 关系型数据库
Oracle数据库在哪些新兴领域有应用?
【7月更文挑战第21天】Oracle数据库在哪些新兴领域有应用?
126 1
|
3月前
|
Oracle 关系型数据库
Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error
Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error
112 0
|
5月前
|
Oracle 数据可视化 关系型数据库
Oracle数据库安装及使用Navicat连接oracle2
Oracle数据库安装及使用Navicat连接oracle
|
5月前
|
Oracle 关系型数据库 数据库
实时计算 Flink版产品使用问题之连接到Oracle数据库但无法读取到数据,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。