数据库连接异常问题排查

琉璃2年前技术文章524

问题描述

客户反馈应用端连接数据库异常,报错截图如下:“已超过了锁请求超时时段”。

image.png

问题排查

1、测试端口联通性

从应用侧服务器上分别测试数据库服务端口联通性,检测服务正常监听

image.png


image.png

2、数据库服务器重启

同客户沟通优先恢复业务,反馈先对数据库服务器重启  image.png

重启后连接数据库仍然异常

3、查询活跃/阻塞会话

根据报错提示查询活跃及阻塞会话,看下是否有事物没有提交。查询无阻塞会话

查询活跃会话:

SELECT s.name, DES.program_name, r.session_id, r.status, qt.text, qt.dbid
 , qt.objectid, r.cpu_time, r.total_elapsed_time, r.reads, r.writes
 , r.logical_reads, r.scheduler_id
FROM sys.dm_exec_requests r
 CROSS APPLY sys.dm_exec_sql_text(sql_handle) qt
 JOIN master.dbo.sysdatabases s ON r.database_id = s.dbid
 JOIN sys.dm_exec_sessions DES ON r.session_id = DES.session_id
ORDER BY r.scheduler_id, r.status, r.session_id;


查询阻塞会话,用activity monitor,查看会话信息,是否有未提交事务

SELECT
 Blocking.session_id as BlockingSessionId, 
 Sess.login_name AS BlockingUser, 
 BlockingSQL.text AS BlockingSQL,
 Waits.wait_type WhyBlocked,
 Waits.wait_duration_ms,
 Blocked.session_id AS BlockedSessionId,
 USER_NAME(Blocked.user_id) AS BlockedUser,
 BlockedSQL.text AS BlockedSQL,
 DB_NAME(Blocked.database_id) AS DatabaseName
FROM sys.dm_exec_connections AS Blocking 
 INNER JOIN sys.dm_exec_requests AS Blocked ON Blocking.session_id = Blocked.blocking_session_id
 INNER JOIN sys.dm_os_waiting_tasks AS Waits ON Blocked.session_id = Waits.session_id
 RIGHT OUTER JOIN sys.dm_exec_sessions Sess ON Blocking.session_id = sess.session_id
 CROSS APPLY sys.dm_exec_sql_text(Blocking.most_recent_sql_handle) AS BlockingSQL
 CROSS APPLY sys.dm_exec_sql_text(Blocked.sql_handle) AS BlockedSQL
ORDER BY BlockingSessionId, BlockedSessionId

查看没有活跃会话(由于已经重启了数据库服务器,建议在重启数据库服务器前执行SQL查询)

4、核实云安全中心告警

云安全中心在2023-02-21 20:18时刻服务器 Prod-Samsonite-Baison-APP01-Linux( 192.168.40.103) 的可疑蠕虫脚本行为告警,创建隐藏目录。该行为已被云安全中心拦截成功。执行命令 mkdir /tmp/.baisonagent ,同业务方核实是否是正常业务操作。登录到服务器上,检查目录没有创建成功

image.png

image.png

5、查看系统日志

在 Linux 系统中,日志文件记录了系统中包括内核、服务和其它应用程序等在内的运行信息。 查询/var/log/messages日志信息,日志文件大小为0

journalctl -xe -l 查询到有实时日志输出

journalctl -xe -l

查看应用服务器版本为 CentOS 7.9

在 CentOS 7中,日志是使用rsyslogd守护进程进行管理的,该进程是之前版本的系统中syslogd的升级版,对原有的日志系统进行了功能的扩展,提供了诸如过滤器,日志加密保护,各种配置选项,输入输出模块,支持通过 TCP 或者 UDP 协议进行传输等。

rsyslog的配置文件为 /etc/rsyslog.conf , 日志文件都位于 /var/log/ 目录中, 系统默认有设置对messages日志做切割。

登录到 192.168.40.103  服务器上 查看 /etc/rsyslog.conf 文件内容 ,对比同系统的另外一台服务器中 /etc/rsyslog.conf内容 ,对比发现没有输出messages日志的上注释掉了参数

$ModLoad imjournal 、$IMJournalStateFile imjournal.state

备注说明:

$ModLoad imjournal   # imjournal为模块名,支持对系统日志的访问。

$IMJournalStateFile imjournal.state  #将日志存储在文件中

image.png

将相关参数注释取消后重启服务日志正常记录,messages系统日志没有打印是因为修改了 /etc/rsyslog.conf 部分参数

image.png

image.png

systemctl restart rsyslog.service

image.png

日志内容实时输出


image.png




查看192.168.40.104 服务器上/etc/rsyslog.conf 文件修改时间为 2022-10-13 15:15

image.png

查看192.168.40.105服务器上/etc/rsyslog.conf 文件修改时间为 2022-10-13 13:54

image.png

核实三台服务器均有操作注释参数 $ModLoad imjournal 、$IMJournalStateFile imjournal.state

6、查看堡垒机历史执行记录

查询  /etc/rsyslog.conf  修改当天(2022-10-13)的审计会话信息, 在三台服务器上有执行安装k8s_install.sh脚本操作

image.png


image.png

总结建议

1、复现数据库死锁问题时,先不执行重启服务器操作,登录数据库查询活跃/阻塞会话,查看是否存在阻塞

2、应用程序侧输出打印日志信息,协助问题定位

3、开启messages日志记录,并且做好超过文件大小定期自动清理,k8s组件日志调整级别,输出重要日志,避免日志量过大导致磁盘可用空间不足

4、问题复现时候配合抓包分析

参考文章: https://cloud.tencent.com/developer/article/1498726?from=15425&areaSource=102001.2&traceId=uuskDOX-Gw0dwf89zFTIg

https://cloud.tencent.com/developer/article/1498726?from=15425&areaSource=102001.2&traceId=vOoxRkw9cM19l9fXDI8zA


相关文章

RAID磁盘阵列详解

RAID磁盘阵列详解

1 RAID原理无论是DAS、NAS还是SAN,都是存储系统,一个存储系统可以包含多块磁盘。不同磁盘之间的组织排列,就是磁盘阵列技术,也就是RAID技术。RAID磁盘阵列技术的核心思想主要有两个,包括...

Yarn界面详解

Yarn界面详解

1.Active Nodes:表示Yarn集群管理的节点的个数,其实就是NodeManager的个数,集群有2个NodeManager从配置中可以看到每一个NodeManager管理的内存大小是163...

Kerberos安装

Kerberos安装

1、环境准备(1)安装好jdk(2)下载Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File。解压下载后的z...

PG的统计信息(二)

1.2.4 pg_statio_user_tables 指标含义通过对pg_statio_user_tables的查询,如果heap_blks_read,idx_blks_read很高说明shared...

副本集的管理(二)

五、用户管理MongoDB默认是不开启用户认证模式的,但是为了数据库的安全和管理,我们需要开启用户认证。数据库用户角色:read、readWrite; 数据库管理角色:dbAdmin、dbOwner...

企业级大数据安全架构(十)

企业级大数据安全架构(十)

一、DBeaver连接Kerberos认证下的hive1.配置本地hosts因为Kerberos认证过程及集群服务中,很多是以主机名的形式进行访问的,所以工作机要设置hosts. 域名映射,我们通过部...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。