(本文档仅供参考)
1、数据库报错往往会影响真实问题原因的分析,所以为了排查一些看似和smartbi相关但实际又是数据库jdbc驱动抛出的异常问题,可以通过java代码直接调用jdbc接口实现相关查询看是否正常,从而对比smartbi的逻辑是否有误;
2、打开smartbi报表加载慢,根据提供的CPU采样,定位是数据库那边执行了SQL后返回结果慢,但是将一样的SQL放到数据库工具(不一定基于jdbc)中执行,返回结果并不需要很长时间,此时也可以测试通过Java调用jdbc驱动执行SQL,对比通过加载当前驱动执行SQL所花费的时间;
3、打开smartbi报表查询的数据和直接在数据库工具(不一定基于jdbc)中查询的结果不一致,此时也可以测试通过Java调用jdbc驱动执行SQL,对比通过加载当前驱动执行SQL查询的数据是否和smartbi报表展示的一致。
1、检查数据库驱动位置,如果驱动是war自带的,则跳过此步骤,如果是额外添加的数据库动态驱动jar,需要找到jar的绝对路径,注意如果是docker部署的,其jar路径不是通过linux ssh工具展示的绝对路径。
如下图是exe安装环境下添加的一个mysql动态驱动jar路径:
此时记下路径:D:\Smartbi\SmartbiInsight\Tomcat\bin\dynamicLibraryPath\mysql
如下图是docker环境下部署添加的一个动态驱动,需要加载的jar在图中的HADOOP_HIVE目录:
此时需要记下路径:/tomcat/smartbiconfig/dynamicLibraryPath/HADOOP_HIVE
其中开头的/tomcat是docker路径下 Tomcat的根目录。
2、下载testjdbcdata.jsp,并将testjdbcdata.jsp文件放到vision文件夹下,不需要重启应用服务器。
(若是测试存储过程查询,下载testjdbcPro.jsp,暂不支持Oracle等带出参的存储过程)
3、访问页面执行数据库语句
浏览器访问 http://IP:PORT/smartbi/vision/testjdbcdata.jsp,在页面上填写待测试的数据库信息,其中查询SQL可选填,显示查询结果可选勾。
注:(1)IP和PORT需根据实际地址进行修改。
(2)勾选显示查询结果会查询出对应的结果集,由于是直接与数据库进行交互,请尽可能减少数据量。
如果是动态驱动则需要设置驱动类目录,将步骤1 的路径填入到驱动类目录右边输入框:
若为存储过程查询,浏览器访问地址修改为http://ip:port/smartbi/vision/testjdbcPro.jsp,其中“查询存储过程”根据实际进行填写即可,驱动类目录填写规则同上。
4、点击提交按钮,查看返回结果。
如果查询SQL勾选了显示结果集,在数据库连接正常且查询不报错时,显示效果如下图:
如果查询SQL不填内容就提交,则jsp页面只执行创建连接和关闭连接测试,测试结果只有创建连接耗时会显示时间,除了查询SQL显示空字符串外,其他项一般显示未执行。
如果创建连接或者执行sql报错,或者是驱动类目录填写有误,则错误信息后会显示一部分错误原因:
在服务器最新的smartbi.log中,可以看到如下日志:
如果存储过程有返回多个结果集,查询结果会分别显示各个结果集的信息:
如果在smartbi查询报错,但是在数据库中查询没问题,若通过此方式仍会报错,则需排查驱动的问题。若通过此方式可正常查询,可将结果截图发回,再进一步跟踪此问题;
数据库执行SQL快,但在smartbi中执行慢,若通过此种方式查询所需的时间并不长,可将截图发回,同时将smartbi中查询所需的时间及录制CPU一并反馈发回,以便进一步跟踪此问题。