解决DBeaver无法查看MySQL执行计划问题

原创
2018/09/06 17:32
阅读数 2.8W

解决DBeaver无法查看MySQL执行计划问题

DBeaver这个数据库连接工具的确很好用,但是最近在使用时发现它不能查看MySQL的执行计划

	explain execute select * from table;
	explain select * from table;
	/**点 解析执行计划按钮*/
	explain extended select * from table

提示内容为:“sql is not a supported statement”
经过查看DBeaver的源码找到了如下代码

public class MySQLDataSource extends JDBCDataSource implements DBSObjectSelector, DBCQueryPlanner {
	@Override
	protected Connection openConnection(@NotNull DBRProgressMonitor monitor, JDBCRemoteInstance remoteInstance, @NotNull String purpose)
			throws DBCException {
		Connection mysqlConnection = super.openConnection(monitor, remoteInstance, purpose);

		if (!getContainer().getPreferenceStore().getBoolean(ModelPreferences.META_CLIENT_NAME_DISABLE)) {
			// Provide client info
			try {
				// 注意这一行设置了 ApplicationName 信息
				mysqlConnection.setClientInfo("ApplicationName", DBUtils.getClientApplicationName(getContainer(), purpose));
			} catch (Throwable e) {
				// just ignore
				log.debug(e);
			}
		}
		return mysqlConnection;
	}
}

注意这行代码

mysqlConnection.setClientInfo("ApplicationName", DBUtils.getClientApplicationName(getContainer(), purpose));

该行代码设置了 ApplicationName 属性,设置该属性后,发送给服务端的SQL前面都会带上一个类似于 “/* ApplicationName=DBeaver 5.1.4 - Main */ ”的信息,这个信息会导致数据库抛出“sql is not a supported statement”

解决思路:

不设置 ApplicationName,即 getContainer().getPreferenceStore().getBoolean(ModelPreferences.META_CLIENT_NAME_DISABLE) 结果为 true,让 if 的判断结果为 false ,这样就跳过了设置语句。 经查找相关配置项,发现 META_CLIENT_NAME_DISABLE 为“禁用客户端身份识别”。

解决方案:
    在【首选项->数据库->连接】中勾选“禁用客户端身份识别”

禁用以后再SQL编辑器中执行 explain execute select ... 就可以查看执行计划了

注:点击【解析执行计划】按钮后,DBeaver生成的执行计划语句为:explain extended select ...,extended关键字在某些MySQL版本(例如:MySQL 5.6.29)中已经不被支持

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部