一次DB Time过高告警处理

简介:

一、背景

        某个数据库在20200312 14:00:28-15:00:18期间,监控系统发出DBTime超出阈值告警,信息如下:

image

二、问题分析

1、获取期间AWR报告,进行分析

1.1、查看Elapsed、DB Time指标

        通过AWR可以看到,服务器规格是4CPU16G,Elapsed*CPUs=239.36min远远小于DB Time(22,862.47min),反应awr统计的时间段数据库很繁忙。

image

1.2、查看Load Profile

        从下图看到,DBtime中DB cpu所占比例其实并不大,DBTime大部分是在DB Wait Time上,从Top 10 Foreground Events by Total Wait Time可以看到主要是在cursor: pin S wait on X等待上。

image

1.3、查看Top 10 Foreground Events by Total Wait Time

        从截图中可以看出,cursor: pin S wait on X等待事件占了DB time 86.9%,造成这个等待事件最常见的原因就是sql并发执行,可以从Wait Classes by Total Wait Time、SQL Statistics部分反应上面的问题。

image

1.4、查看Wait Classes by Total Wait Time、SQL Statistics

        查看下面2个截图,可以发现当前数据库并发等待事件比较突出,之后查看SQL Statistics,发现是和用户登陆权限校验的sql有关,正常来讲,第二个截图中的一些sql不会造成cursor: pin S wait on X等待事件,这个需要在更具ash报告查看下,具体是哪些sql造成cursor: pin S wait on X。

image


image


        从下面的截图来看,session数的变化也能印证可能是用户并发访问数据库引起的。

image

2、查看ash报告

        通过awr分析,问题基本可以确定是用户并发访问数据库频繁执行sql引起cursor: pin S wait on X,但是哪些sql引起,需要从ash报告中查看。
        通过下面截图可以看到,sql_id为39cbpxu5sp7zt和1dxpz6s60pyy2是造成这个现象的主要原因,接下来需要确认这两个sql频繁执行原因。

image

2.3、了解sql执行的情况

    将上面2个sql反馈给客户后,并且询问这个期间用户登陆数据库的情况,客户反馈:
        ①第一个sql是用户登陆数据库做权限校验用的,第二个是获取病人信息使用的,这两个sql都是在用户登录时触发的
        ②sql中使用了dblink,awr期间dblink有异常,不能正常执行
        ③sql不能执行,用户端端获取不到结果,护士持续发起请求,连接数据库,最终导致了上面的情况

3、总结

        上面的情况大致就是,客户端查询信息,没有得到结果,之后不断重试,并发访问,在数据库端,sql中使用了dblink,dblink在那个期间出现问题,不能执行,最终出现了上面的问题。上面如果有不正确的地方欢迎大家指正。

相关文章
|
5月前
|
SQL 存储 关系型数据库
mysql 利用 performance_schema 排查 qps 过高过程记录
mysql 利用 performance_schema 排查 qps 过高过程记录
83 0
|
10月前
|
存储 Prometheus 监控
记一次MySQL DB实例磁盘告警的处理过程
记一次MySQL DB实例磁盘告警的处理过程
127 0
记一次MySQL DB实例磁盘告警的处理过程
|
监控 网络协议 NoSQL
如何精确监控DB响应延时
如何精确监控DB响应延时
|
SQL 存储 监控
FAQ系列 | 监控平均SQL响应时长
FAQ系列 | 监控平均SQL响应时长
177 0
|
SQL 监控 关系型数据库
【DB吐槽大会】第40期 - PG 缺少qps计数器
大家好,这里是DB吐槽大会,第40期 - PG 缺少qps计数器
|
SQL 关系型数据库 数据库
"PostgreSQL 12: 新增 log_statement_sample_rate 参数控制数据库日志中慢SQL百分比"
PostgreSQL 提供的 log_min_duration_statement 参数设置后,数据库中执行时间超出设置值的SQL将记录到数据库中,此参数对所有库所有SQL都有效。维护PostgreSQL生产库时,数据库日志出现高频慢SQL实属正常,若其中一条比较繁忙的SQL若执行时间超过 log_min_duration_statement 设置值,那么数据库日志中将存在大量此条SQL的日志,这个日志量是很惊人的,多则一天上百GB。
1549 0
|
数据库 关系型数据库 Oracle
|
关系型数据库 测试技术