一、报表性能组成公式
在使用系统过程中,出现仪表盘、电子表格等报表打开性能不如预期,此时就需要分析性能瓶颈,找出优化方案。
先看一个性能公式:报表性能=浏览器端执行性能 + 网络下载性能+ 服务端执行性能。
其中服务端执行性能 = Smartbi服务端执行性能 + 数据库执行性能。
在排查性能问题的过程中,我们通常会按照以下顺序进行:
网络性能排查→服务端性能排查→页面执行性能排查→提交有效信息问题上报
接下来将分别介绍如何通过性能分析工具对这些步骤进行排查,以系统地定位性能问题。
二、性能分析工具
根据前面性能组成部分,每一块都需分析其性能瓶颈,主要借助到以下工具
2.1浏览器端性能分析工具
浏览器开发者工具可帮助诊断问题出在服务端响应、网络传输还是网页本身代码效率上,并且都可下载录制结果,便于后续上报问题分析。如chrome开发者工具(浏览器右上角工具→ 更多工具→ 开发者工具),火狐、edge等其他浏览器都有类似工具,可互联网搜索“浏览器名 + 开发者工具”。
2.1.1网络请求分析
打开方式:开发者工具→ 顶部网络(Network)面板→ 刷新网页(开始记录),网页地址需添加debug=true。
使用方法:F12-network
关键信息解读:
界面元素 | 通俗解释 | 运维关注点 |
Status(状态码) | 类似快递单的“物流状态”: - 200:成功签收(正常) - 404:包裹丢了(资源不存在) - 500:仓库爆仓(服务器错误) | 红色状态码(4xx/5xx):服务器或配置问题 |
Time(加载时间) | 包裹从下单到送达的时间: - 超过1秒的请求需警惕 | 长时间请求:可能是服务器慢或网络拥堵 |
Size(资源大小) | 包裹的重量: - 图片/视频过大(>1MB)可能拖慢页面 | 大文件:建议压缩或使用CDN加速,对于仪表盘等资源,用户可上传背景图等资源太大都会影响性能 |
Waterfall(瀑布流) | 每个包裹的运输轨迹: 查看“排队等待”“下载耗时”阶段 | 长时间等待(浅色部分):服务器响应慢 |
在分析仪表盘/电子表格等报表资源时,可重点关注:
网络瓶颈:可通过关注XX.js/css等静态文件的下载速度,快速判断是否网络瓶颈。
报表制作问题:可关注图片请求大小和请求数量,当使用太多url控件可能带来请求太多影响页面响应性能,对于制作过程使用太大背景图、上传太多图片也会影响整体的性能体验。
取数相关请求性能:如V11/api/pages/beans/merge-aggregator请求,因这可能和数据库有关,需进一步用服务端分析工具确认。
当发现非以上因素,点击工具栏下载录制结果上报问题分析。
仪表盘网络分析思路请见如何分析仪表盘网络请求。
2.1.2页面性能分析(Performance/性能面板)
打开方式:开发者工具→ 点击 Performance/性能→ 点击圆形录制按钮 → 刷新页面 → 点击停止。
使用方法:Chrome浏览器渲染慢录制performance
关键指标解读:
指标 | 通俗解释 | 运维关注点 |
Loading(加载) | 从下载网页到显示骨架的时间 | 时间过长可能是网络慢或HTML/CSS文件太大,或报表嵌套URL带来请求过多 |
Scripting(脚本) | 页面代码执行耗时(如按钮点击响应) | 长时间“脚本”块 → 前端代码效率低 |
Rendering(渲染) | 浏览器绘制页面元素的时间 | 时间过长可能是复杂动画或大量DOM操作 |
黄色三角警告 | 浏览器提示的“高负载任务” | 点击查看详情 → 记录任务名称反馈开发团队 |
注:此工具核心是录制之后下载,连同网络请求一起上报问题分析。
2.2Smartbi服务端性能分析工具
可以借助Smartbi主服务的性能/CPU采样工具,或多维执行引擎性能/CPU采样工具。
Smartbi主服务打开方式:Smartbi主服务系统右上角系统监控→ 性能→选择登录用户→开始→刷新页面或报表→暂停/下载。
使用方法:系统监控-性能(CPU采样)
多维执行引擎打开方式:Smartbi主服务系统右上角系统监控→左上角添加多维服务器→性能→选择登录用户→开始→刷新报表→暂停/下载。
使用方法:如何使用SmartbiOLAP监控器
关键信息解读:
界面元素 | 通俗解释 | 运维关注点 |
CPU时间占比 | 整个采样是个典型的调用栈树结构,A函数调用了B和C函数,B和C就是A的子节点,展开A可以分别看到B和C分别占总时间的占比 | 关注占比大的层层展开, |
耗时 | 此方法实际耗时,他的耗时可能是子函数带来的 | 关注执行时间长的层层展开 |
包名和方法名 | 图中每一行都含有类似:smartbix.page.executor2.chart.EChartsAbstractExecutor.getChartData,实际指包名和方法名,可以定位到具体代码 | 通常如果是数据库性能问题,展开到后面可以看到驱动的方法,包名带有数据库驱动特征,如mysql,如果是smartbi问题的一般都是smartbi或smartbix打头。 |
注:此工具核心是录制之后下载,初步判断是否是数据库执行性能(包名带有数据库驱动特征,如mysql.xxx),如非数据库直接连同浏览端采集信息,直接上报问题分析。
2.3数据库端性能分析工具
主要指建立数据库连接和SQL执行性能。
SQL/MDX监控
打开方式:刷新报表→ Smartbi主服务系统右上角系统监控→ SQL/MDX监控→数据模型的原生SQL查询验证SQL性能→联系数据库运维,如发现是MDX也可进一步进入下面的MDX性能监控(可选,具体可看下面信息解读,信息不够才可进一步借助此工具)。
使用方法:系统监控-SQL/MDX监控
MDX性能监控
打开方式:刷新报表→Smartbi主服务系统右上角系统监控→ 左上角添加多维服务器→MDX查询监控→SQL监控→输入MDX编号查看执行SQL→数据模型的原生SQL验证SQL性能→联系数据库运维。
使用方法:如何使用SmartbiOLAP监控器
关键信息解读:
界面元素 | 通俗解释 | 运维关注点 |
数据源 | 代表最终数据输出由哪里出 SQL引擎V2.0:代表此查询路径命中SQL引擎V2.0 SmartbiCache:代表直接查询高速缓存库 mondrian(SmartbiCache或其他数据源):代表命中多维引擎 其他直连数据源:代表直接查询原业务库 | 如需进一步确认业务库/高速缓存库执行性能,不同数据源跟踪路径有些差异,其中SQL引擎V2.0和mondrian中间还有计算过程,耗时不仅仅是数据库执行性能 |
SQL/MDX | 可以查看详细的SQL或MDX耗时,如数据源是SQL引擎V2.0,点进去可以通过dsId属性找到原业务库/高速缓存库执行sql及性能。 如数据源是mondrian,可以批量看到此条MDX实际运行了哪些SQL,每条SQL的耗时。 其他数据源是可直接看到对应执行SQL | 关注执行时间长的SQL,可复制此SQL出来新建原生SQL查询验证性能,注意原生SQL要选对业务库,如是抽取需选择高速缓存库。 联系数据库运维:如验证发现SQL并无可优化空间,可联系数据库运维确认,如不确信可上报问题到开发分析 |
耗时 | 执行耗时,单位ms,1000ms代表1s | 关注耗时长的进一步分析 |
下图就是SQL/MDX监控界面,可以切换到当前登陆用户,查看当前登陆用户报表执行的SQL/MDX耗时。
如涉及MDX,就需切到对应MDX服务器,看对应的执行耗时,耗时长的mdx复制其编号,如“1881”。
再切到SQL监控,输入前面mdx编号,就可看执行的sql具体耗时。
三、排查流程
步骤1:网络问题:
检查浏览器开发者工具Network面板中的js/css静态资源请求,如小文件都耗时很久大概率就是网络问题
检查图片类请求大小及耗时,如请求太大,耗时太长确认是否报表上传的背景图等资源,需压缩图片
检查请求数量是否超多,这可借助制作一个简单报表对比,请求数量多大概率报表制作不合理,如嵌套太多URL控件,每一个url控件都会带来重复框架脚本的执行
步骤2:服务端性能:
检查Network面板中耗时最长的请求,如非静态资源,说明服务端存在性能问题
借助数据库端性能分析,确认是否数据库端性能问题或拼写sql不合理,如是数据库问题联系数据库运维
借助服务端性能分析工具,录制CPU采样上报问题查找优化空间
步骤3:页面执行性能问题:
如网络中并无慢请求,请求也不算多,但是慢就可关注前端执行性能,如仪表盘中组件很多也会带来慢的可能(超200个组件需警惕)
浏览器开发者工具Performance/性能执行情况,确认加载、脚本执行、渲染等耗时占比,上报问题分析
步骤4:提交有效信息上报问题:
对开发团队说:“某页面加载要8s,没有慢请求,Performance中Scripting阶段耗时5秒”,而不是:“这个网页打开好慢,你们看看”
附上网络请求录制结果、性能录制结果、cpu采样结果,具体附上哪些根据前面分析结果,如怕分析不准减少沟通时间,可将三个结果都附上
对于是报表资源,建议附上报表资源定义文件,至少有个截图,主要辅助开发理解现场做的内容,对于报表的性能来说,制作的报表内容是个影响性能的重要变量
四、常见问题
- 录制的网络请求/性能采样等内容,并非精准反应慢页面,含有很多其他无意义操作干扰问题分析
- 性能分析工具中,每一个的录制都建议仅包含慢操作的内容,如录制某个报表打开慢,那就仅录制这个报表打开过程,如是某个参数切换后慢,那就仅录制切换参数的操作
- 如经常收到说打开慢,结果看网络请求里面好多url,搞不清楚是一个报表嵌套了很多url控件,还是做了其他操作(有时是做了预览等其他操作),就需要重新录制
- cpu采样拿回,里面内容看不出慢,要么是没录制到慢操作,要么确实后端不慢之类
- 移动端网络请求不知如何录制
- 如并非特定机型,特定app可重现的问题,可以用浏览器开发者工具,切换到移动设备
- 如必须用移动设备模拟,可借用charles等辅助录制,具体参考charles录制移动端请求。
- 仪表盘资源常见报表制作带来性能问题
- 为了排版方便,使用过多url控件:每个url控件都带来了重复请求(有缓存时这块可忽略)和重复执行框架脚本的问题,如一个仪表盘打开,加载框架脚本要1s,多一个url就会多1s,尤其在首屏并且对性能需要极致体验的移动端,不建议用url控件,通过页签切换的第二屏之类使用没有问题。
- 过多组件:尤其含有指标卡之类的看板,一个指标看板能表达的内容,可能用了两三个组件表达,组件越多意味着浏览器端需要越多时间运行,通常如果取数不慢,但是仪表盘白屏时间较久可能就是此因素,方法就是尽可能减少组件,建议不要超过200个。
- 背景图太大:有些背景图加载都要2s,就会影响用户打开时的白屏体验,白屏越久,就会感觉越慢,建议要压缩图片大小
- 上传非常多碎片图片素材,占用浏览器请求,让整体性能体验降低,http1.1协议大部分浏览器同一个域名下是6~8个并发请求,这些碎片图片占用了请求就会造成其他请求排队等待,当然如果应用服务器部署http2,可忽略此问题,当确实需要较多图片素材,建议尽量合并为一张较大尺寸的含有图标素材的背景图。
- 仪表盘很大又有滚动条,未开启滚动加载,开启滚动加载就可按需初始化(仪表盘页面属性中设置开启滚动),就可提升用户首屏打开的体验
- 电子表格报表制作带来性能问题
- 使用电子表格分组表,制作清单类报表,数据量很大,这类建议改为即席或透视,或用电子表格的清单表。因为分组表是要内存全部运算之后分页,面对大数据量场景不合适。