1. 概述
1.1 版本
FineBI 版本 | 功能变更 |
---|---|
6.0 | 1)依赖内置的「FineBI 直连性能分析插件」 插件默认不启动,需手动启动 插件版本跟随 JAR 自动更新 2)仅支持实时数据下的性能分析 |
6.0.16 | 1)功能不再由插件提供,直接合并至产品 2)支持实时数据和抽取数据下的性能分析 3)优化执行阶段的耗时计算逻辑 |
1.2 应用场景
当用户遭遇以下问题时,即便进行了反复检查,仍无法确定问题所在,甚至可能导致服务器崩溃。
在创建自助数据集时,某些步骤执行速度较慢。
在预览自助数据集时,某个步骤表现较为迟缓。
在预览仪表板时,发现操作速度相对较慢。
在编辑组件时,注意到操作响应较为缓慢。
1.3 功能简介
FineBI提供「性能分析」功能,帮助用户更迅速、更方便地解决以下方面的性能问题:仪表板预览、编辑操作,以及自助数据集的编辑过程。
1.4 注意事项
1)FineBI 6.0.16 及之后版本,「性能分析」功能由产品默认提供。
FineBI 6.0.15 及之前版本,「性能分析」功能依赖产品内置的「FineBI 直连性能分析插件」。
插件默认禁用,随产品版本自动更新,如需使用「性能分析」功能,请 启用 插件。
2)FineBI 6.0.16 及之后版本,「性能分析」功能支持实时数据和抽取数据下的性能分析。
FineBI 6.0.15 及之前版本,「性能分析」功能仅支持实时数据下的性能分析,不支持抽取数据。
2. 操作步骤
2.1 执行性能分析
在FineBI多处支持「性能分析」功能。
内容 | 位置说明 |
---|---|
数据 | 「我的分析」主题中,数据编辑界面,支持进行「性能分析」 |
组件 | 「我的分析」主题中,组件编辑界面,支持进行「性能分析」 |
仪表板 | 「我的分析」主题中,仪表板编辑界面,支持进行「性能分析」 |
「我的分析」主题中,仪表板预览界面,支持进行「性能分析」 | |
「目录」中查看仪表板时,支持进行「性能分析」 |
2.2 查看核心信息
点击「性能分析」按钮后,在线展示性能分析核心信息。「核心信息」可帮助用户初步判断出现性能问题的原因。
如下图所示:
「核心信息」表字段介绍如下表所示:
字段 | 说明 |
---|---|
用户 | 触发性能分析的FineBI用户 |
一级资源名称 | 性能分析内容为数据时:一级资源名称为数据集名称 性能分析内容为仪表板时:一级资源名称为仪表板名称 |
二级资源名称 | 性能分析内容为数据时:二级资源名称为数据集中分析步骤名称 性能分析内容为仪表板时:二级资源名称为仪表板中组件名称 |
查询ID | UUID,每次查询请求的唯一编号 |
查询等待时间(ms) | 从用户点击查询到进入查询准备阶段的时间 |
查询准备阶段(ms) | 查询的执行计划解析 查询内容为直连数据时:代表生成 SQL 的阶段 查询内容为抽取数据时:代表抽取引擎的查询描述生成的阶段 |
查询执行时间(ms) | 查询内容为直连数据时:代表直连数据库执行时间 查询内容为抽取数据时:代表抽取引擎计算时间 |
数据传输时间(ms) | 查询结果返回给FineBI的时间 若直连引擎自己计算,则没有该时间 |
内存计算时间(ms) | 所有FineBI代码的计算时间 例如树引擎分页计算,二次计算等 |
前端渲染时间(ms) | 后端计算完毕之后,前端js计算、渲染和展示的时间之和 |
总查询时间(ms) | 从用户点击查询到前端加载完成的总时间 |
查询开始时间 | 用户触发性能检测的时间点,精确到秒 |
2.3 查看详细信息
如需进一步确认出现性能问题的原因和了解下一步的处理方式,可查看对应查询的「详细信息」。
1)在线查看单个查询请求的详细信息:点击对应「查询ID」,查看此次查询的性能明细。
2)导出此对象的所有查询请求的详细信息:点击「导出详细信息」按钮,导出明细信息表格到本地。
3)「详细信息」表字段介绍如下表所示:
数据列名称 | 说明 |
---|---|
用户 | 触发性能分析的FineBI用户 |
一级资源名称 | 性能分析内容为数据时:一级资源名称为数据集名称 性能分析内容为仪表板时:一级资源名称为仪表板名称 |
二级资源名称 | 性能分析内容为数据时:二级资源名称为数据集中分析步骤名称 性能分析内容为仪表板时:二级资源名称为仪表板中组件名称 |
组件类型 | 1:分组表 2:交叉表 3:明细表 4:图表 5:自助数据集 6:筛选控件 7:文本组件 |
查询ID | UUID,每次查询请求的唯一编号 |
执行阶段 | 1)等待开始阶段 因为浏览器的限制导致查询之前需要排队 2)查询准备
3)SQL 执行
4)数据传输 数据库返回的结果传给 BI 服务器花的时间 5)内存计算 直连引擎计算的时间 6)等待结束 等待结束阶段(把仪表的所有组件都打包成一个请求时会有该数据),最先出来的组件要等到最后出来的组件的等待时间 7)前端渲染
|
片段ID | 一次查询有可能会有多个查询请求 例如创建数据连接,SQL 执行,数据传输都可能再被拆分成多个请求,需要分别统计考量 |
耗时(ms) | 若该阶段有统计时间,则记录该阶段的耗时 |
片段内容 | 创建数据连接阶段记录数据连接名 SQL 执行阶段记录执行的 SQL ,SQL 超过 3w 字符的,导出的文件会生成两个 sheet ,包含详细信息和超出 3w 字符的 SQL 如果有临时表注入逻辑,查询 SQL 前面会有,excel insert cost xxx | selcet * ....这样的标识符 |
返回结果集行数 | 记录数据传输阶段,内存计算阶段,前端渲染阶段的返回结果集行数 |
返回结果集列数 | 记录数据传输阶段,内存计算阶段,前端渲染阶段的返回结果集列数 |
执行引擎类型 | 抽取 直连 |
开始时间 | 「执行阶段」的开始时间 |
结束时间 | 「执行阶段」阶段的结束时间 |
异常信息 | 当某个阶段出现错误时,打印报错信息 |
查询请求合计 | 记录本次查询的所有执行阶段耗时总和 记录本次查询的开始和结束时间 |
总合计 | 记录所有查询的所有执行阶段耗时总和 记录所有查询的开始和结束时间 |
2.4 性能反馈
1)非超管用户发现模板问题后,可点击「性能分析>性能反馈」按钮,将模板性能反馈给管理员。如下图所示:
2)超管收到性能反馈消息提示,可根据反馈督促对应人员优化仪表板/数据集。
3. 注意事项
3.1 逻辑详解
核心信息中的各个时间段,以及详细信息中的各个执行阶段,匹配和计算逻辑可参考下表:
核心信息 时间段 | 详细信息 执行阶段 | 说明 |
---|---|---|
查询等待时间 | 等待开始阶段 | 定义说明: 从用户点击查询到进入查询准备阶段的时间,因为浏览器的限制导致查询之前需要排队 一般6个浏览器发送请求未返回时,会阻塞第7个及之后浏览器的请求 计算逻辑: 6.0.16及之后:[(请求返回的时间点-开始发请求的时间点)-后端查询消耗的时间点] 6.0.15及之前:请求返回的响应中服务端开始时间StartTime(BI服务器时间)- 查询请求的开始时间(用户浏览器的时间)(由于浏览器和服务器时区/时间可能不一致,因此存在时间为负数的情况) 异常排查方向: 1)查询并发过高 2)超出浏览器并发限制 |
查询准备阶段 | 执行计划构建 | 定义说明: FineBI直连引擎在拿到查询请求时构建如何组织查询的阶段 计算逻辑: Widget生成BICriteria或者HyperCriteria的过程 ETLContext生成ETLFlow的过程 异常排查方向: 数据集/模板/组件太复杂 |
SQL生成及优化 | 定义说明: 对应的查询转换成 SQL 以及对 SQL 进行优化的阶段 计算逻辑: SQL 的生成和优化的时间 | |
- | 创建数据库连接 | 定义说明: SQL执行前,需要获取和数据库的连接 计算逻辑: DataBaseSouceEngine中数据库连接创建的时间 |
查询执行时间 | SQL执行 | 定义说明: 数据库执行查询的时间或TCERID引擎执行时间 由于执行时间包括临时表的时间,因此SQL执行时间可能比日志中要长 SQL 执行阶段记录执行的 SQL ,SQL 超过 3w 字符的,导出的文件会生成两个 sheet ,包含详细信息和超出 3w 字符的 SQL 如果有临时表注入逻辑,查询 SQL 前面会有excel insert cost xxx | selcet * ....之类的标识符 计算逻辑: DataBaseSouceEngine中数据库的查询时间 异常排查方向: 1)数据库性能问题 2)SQL语句需要优化 |
数据传输时间 | 数据传输(数据库-BI) | 定义说明: 数据库的查询结果返回给FineBI服务器的时间, 计算逻辑: 数据库查询结果集传输到BI服务器的时长+数据压缩时长/数据模型生成时长 如果没有这两部分,时间为0是正常的 异常排查方向: 1)若数据库查询结果集传输到BI服务器的时长过大,请排查服务器网络问题 2)若数据模型构建耗时过大,请优化分析逻辑 |
内存计算时间 | 内存计算 | 定义说明: 直连引擎计算的时间,所有BI代码的计算时间 计算逻辑: 自助数据集无内存计算时间,仪表板中包含以下过程: 分组时间:postGroup time 排序计算时间:tree sort 分页计算时间:groupPage procedure time: 依据排序计算时间:treeSortGist 树过滤计算时间:groupTreeFilter 树构建时间:treeMaker time 异常排查方向: 查询返回的结果集过大,需要优化分析逻辑 |
前端渲染时间 | 数据传输(BI服务器-用户浏览器) | 定义说明: FineBI服务器将数据传给用户浏览器的时间 计算逻辑: 后端结束的时间点-前端接收到数据的时间点 |
前端渲染 | 定义说明: 后端计算完毕之后,前端js计算、渲染和展示的时间之和 计算逻辑: 组件最终渲染出来的时间点-前端拿到数据的时间点 异常排查方向: 分页行数过大 | |
总查询时间 | - | 从用户点击查询到前端加载完成的总时间 |
查询开始时间 | - | 用户触发性能检测的时间 |
3.2 常见问题
问题描述 | 原因分析 |
---|---|
「导出详细信息」按钮为灰色,无法导出 | 原因分析:正在执行查询中,无法同时导出详细信息 解决方案:请耐心等待查询结束,即可导出详细信息 |
查询等待时间为负数 | 原因分析: 6.0.15及之前,查询等待时间=请求返回的响应中服务端开始时间StartTime(BI服务器时间)- 查询请求的开始时间(用户浏览器的时间) 由于浏览器和服务器时区/时间可能不一致,导致毫秒级的差异,因此存在时间为负数的情况 解决方案:请升级工程至6.0.16及以上版本,查询等待时间逻辑优化 |
查询执行时间为0 | 原因分析:查询命中了缓存,没有从数据库全新取数 解决方案:可先修改单表的缓存策略,再进行性能分析 |
查询执行时间与后台日志时间不一致 | 原因分析: 数据集使用临时表制作,性能分析时会计算临时表的执行时间,而后台日志中不计算此段时间,因此两者不一致 解决方案:正常情况,无需解决 |
总查询时间≠分项耗时合计值 | 原因分析: 一个组件可能触发了多个SQL,而多条SQL并不一定是依次执行的。 查询执行时间=所有SQL执行时间总和 总查询时间中的查询执行时间=从第一条SQL执行开始,到最后一条SQL执行结束的时长 两者并不相等,因此总查询时间可能会小于分项耗时合计值 解决方案:无 |
单个查询的详细信息中,存在多个SQL生成及优化阶段 | 原因分析: 一个组件可能触发了多个SQL 例如去重、中位数、fixed等操作,由于需要计算父节点的合计值,就需要发送多条SQL 解决方案:正常情况,无需解决 |