首页 > 数据库 >记一次前端页面加载方式调整导致的数据库连接数暴增

记一次前端页面加载方式调整导致的数据库连接数暴增

时间:2023-10-02 11:33:05浏览次数:35  
标签:报表 数据库 用户 连接数 BI 加载 页面


一、 问题现象

1. 连接数飙升

  • 8.21 8点起,主库活跃连接数显著飙升,至10:30左右逼近数据库最大连接数

记一次前端页面加载方式调整导致的数据库连接数暴增_前端

平时活跃会话平均数约31

记一次前端页面加载方式调整导致的数据库连接数暴增_前端_02

问题期间活跃会话平均数高达322,超出正常10倍以上

记一次前端页面加载方式调整导致的数据库连接数暴增_postgresql_03

从连接用户看,其中一个用户明显高于其他

  • 12-16点,将该用户连接切换至从库,从库连接数显著飙升

记一次前端页面加载方式调整导致的数据库连接数暴增_postgresql_04

  • 16点后,cs_rw用户连接切换回主库,业务量较低时,平均连接数也达到135,远高于之前的高峰期值

记一次前端页面加载方式调整导致的数据库连接数暴增_postgresql_05

2. 服务器负载飙升

由于活跃连接数暴增,查询量明显增加,服务器负载飙升

记一次前端页面加载方式调整导致的数据库连接数暴增_前端_06

同时查询出现大量LWLock等待,执行速度降低,加剧连接堆积问题

二、 问题分析与处理

1. 问题分析

与业务共同分析,有以下可能会导致数据库连接数飙升:

  • 用户数增加
  • 业务量增加
  • 应用连接池变更
  • 缓存失效,连接直接打入数据库

经过与业务和供应商共同排查,结果如下:

  • 用户数较上周无明显增加
  • 业务量较上周无明显增加,但BI报表的特点是一个报表对应多个SQL,可能存在连接放大的问题
  • BI报表应用在周六有执行过升级,但并不涉及连接池修改(业务也未使用连接池)
  • 缓存未失效,且缓存使用率略有上升

       其中最引人注意的是BI报表应用在周六有执行过升级,因为连接数飙升的恰好是BI报表应用,且在周末业务负载低,若升级后有异常,在周一8点业务开始工作时出现也符合逻辑。

       开发与供应商继续排查,发现8.21起,BI报表请求日志量是之前的10倍以上,有明显异常,且符合连接数上涨情况。

       在报表页面F12调试发现,当前在打开一个报表页面时,会将其中所有图表均进行加载,在数据库中执行查询,而之前正常时只会加载用户正在看的几个图表。

      正常时,若首屏窗口只能看到以下两个图片,则只有这两个图片会被加载(对于本例则生成两个SQL发送到数据库执行)。

记一次前端页面加载方式调整导致的数据库连接数暴增_预加载_07

再往下拉,才加载后面图片(看到后面两个报表时,对应的SQL才会发送到数据库查询)

记一次前端页面加载方式调整导致的数据库连接数暴增_连接数_08

       而问题发生时,即使首屏只能看到两个报表,也会将本页中所有报表SQL提前发送至数据库查询。而由于部分BI报表过于复杂,会有一个报表页面包含数十个甚至上百个图表的情况,当同时加载到数据库时,便会造成连接数爆涨、负载飙升。

       供应商也反馈,页面加载方式的改变与周末升级有关,属于前端优化项之一,且为硬编码,无配置文件可修改。

2. 解决方法

当天供应商单独修改前端代码包,交给开发替换升级后代码包。替换后,业务恢复。

观察替换后数据库活跃连接数,可以看到已恢复正常。

记一次前端页面加载方式调整导致的数据库连接数暴增_懒加载_09

三、 懒加载与预加载

       一些扩展知识:上面的两种加载方式对应前端术语分别是——懒加载,预加载。直观感受一下两者的区别

Native lazy-loading of images with zero Javascript - DEV Community

记一次前端页面加载方式调整导致的数据库连接数暴增_懒加载_10

预加载(左图):在页面打开时即陆续加载其中内容,即使用户不看

  • 优点:用户体验好,由于预先加载完成,用户看后续内容不需等待
  • 缺点:耗费资源,增加服务器负载,严重时可能引发系统故障(比如本例)。如果用户确实不需看后续内容,预加载部分会完全浪费

懒加载(右图):只加载用户看到的内容

  • 优点:节约资源,服务器负载较低;另外由于一次需加载的内容少,首屏内容展示可能较快
  • 缺点:用户体验较差,看后续内容需要等待。如果加载耗时过长,对于一般网页可能流失用户

参考:

AddyOsmani.com - Native lazy-loading for iframes is here!

Native lazy-loading of images with zero Javascript - DEV Community


标签:报表,数据库,用户,连接数,BI,加载,页面
From: https://blog.51cto.com/u_13631369/7682443

相关文章

  • uni-app中提供的五种形式的页面跳转
    面试题:uni-app中提供的五种形式的页面跳转:①导航跳转/保留跳转——在访问历史栈中保存当前页面,再打开下一个页面<navigatoropen-type="navigate"url="">②导航返回——返回访问历史栈中的上一个页面<navigatoropen-type="navigateBack">③重定向跳转/销毁跳转——不......
  • 【13.0】Fastapi中的Jinja2模板渲染前端页面
    【一】创建Jinja2引擎#必须模块fromfastapiimportRequest#必须模块fromfastapi.templatingimportJinja2Templates#创建子路由application=APIRouter()#创建前端页面配置templates=Jinja2Templates(directory='./coronavirus/templates')#初始化数据库......
  • CAD快捷键命令大全:加载插件、图层管理器及变动快捷键
    1:cad加载插件快捷键命令cad加载插件快捷键命令在AutoCAD(2016)中,通过快捷键命令"ap"可以加载插件。加载方法:打开CAD,输入加载插件快捷键命令"ap",回车。进入插件加载对话框。选择永久性加载来一次性加载插件,不需二次加载。点击添加,找到插件位置,选中插件,点击打开。添加进来后,点击关闭......
  • drvload.exe是一个Windows命令行工具,用于加载或卸载驱动程序。它允许用户在运行时加载
    drvload.exe是一个Windows命令行工具,用于加载或卸载驱动程序。它允许用户在运行时加载和卸载设备驱动程序,而无需重启计算机。使用drvload.exe可以加载已签名的驱动程序文件(.sys)并将其注册到系统中,使其在当前会话中生效。这对于测试、调试和临时加载驱动程序非常有用。以下是drvl......
  • pandas 加载minio 文件数据
    就是一个简单记录,基于s3进行文件存储还是比较方便的环境准备docker-compose.yamlversion:'3'services:minio:image:minio/minioports:-"9002:9000"-"19001:19001"environment:MINIO_ACCESS_K......
  • Cesium加载三维模型rendering.Rendering has stopped
    使用Cesium加载数据量大、精度高的三维模型数据经常在运行一段时间后,会报如下错误:Anerroroccurredwhilerendering.Renderinghasstopped.TypeError:Failedtoexecute'shaderSource'on'WebGLRenderingContext':parameter1isnotoftype'WebGLShader'.这是由于GPU......
  • 理解React页面渲染原理,如何优化React性能?
    ReactJSX转换成真实DOM过程当使用React编写应用程序时,可以使用JSX语法来描述用户界面的结构。JSX是一种类似于HTML的语法,但实际上它是一种JavaScript的扩展,用于定义React元素。React元素描述了我们想要在界面上看到的内容和结构。在运行React应用程序时,JSX会被转换成真实的DOM元素......
  • 如何打开上古时期的“百度”页面
    无意之中解锁了百度的上古页面: 链接:https://www.baidu.com/default.html百度一下,你就知道(baidu.com)  ==========================================   可以说看到了这个页面就想到了20年前的百度,这个页面可以说百度的上古页面或者说是始祖页面了,现在的百度页面......
  • 填报页面提交方式:智能提交
    官方对只能提交的介绍:提交类型-FineReport帮助文档-全面的报表使用教程和学习资料(fanruan.com)从页面上识别到通过删除行动作删掉的数据,并根据设置的主键去数据库找到对应的数据进行删除。排除掉删除的数据后,对剩余数据根据设置的主键去数据库找对应的数据,如果有对应数......
  • TCP/IP连接数的最大值取决于操作系统、硬件和应用程序等多个因素
    TCP/IP连接数的最大值取决于操作系统、硬件和应用程序等多个因素。下面是一些常见操作系统中TCP/IP连接数的默认值和最大值:Windows10/WindowsServer2019:默认值为16384,最大值为16777216Windows8/WindowsServer2012:默认值为16384,最大值为16777216Windows7/WindowsServer......