数据库连接异常问题排查

琉璃1年前技术文章409

问题描述

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

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


相关文章

Admission 准入控制器

准入控制器什么是准入控制器?就是 API 请求进来后,准许它进入或者丰富进来的 API 请求的控制器。如图所示,MutatingAdmissionWebhook 和 ValidatingAdmissi...

开源Kubernetes工具

开源Kubernetes工具

类别 1:运行 Kubernetes 环境Minikube 仍然是最佳的几乎每个 Kubernetes 教程都是从“下载 Minikube”开始的,这在今天仍然行得通。如果你想在一个真正低风险的环境中...

Trino开启ldap认证

Trino开启ldap认证

1、背景由于对于安全监管的要求,需要对trino服务开启安全认证体系。2、基于私有证书的httpskeytool -genkeypair -validity 36500 -ext SAN=IP:172...

CDP实操(7.1.4版本)--RangerAdmin使用负载均衡实现高可用

CDP实操(7.1.4版本)--RangerAdmin使用负载均衡实现高可用

本文主要是通过配置外部负载平衡器,实现 Ranger HA。1、在 Cloudera Manager 中,选择 Ranger,然后选择Actions > Add Role Instances。2...

clickhouse集群对接hive(三)

clickhouse集群对接hive(三)

前提:集群中已经部署了hive组件和clickhouse集群,clickhouse集群进行对接hive1、设置hdfs文件系统本地缓存<local_cache_for_remote_fs>...

mysql高可用配置(一)

一、简介MySQL使用双向半同步复制模式,通过开源的keepalived实现自动切换,应用通过vip连接数据库。配合自定义脚本,实现故障安全切换,切换过程对应用透明。二、部署主从2.1、在主备节点部署...

发表评论    

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