文档章节

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

rz
 rz
发布于 2018/09/06 17:32
字数 461
阅读 764
收藏 1

解决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)中已经不被支持

© 著作权归作者所有

rz

rz

粉丝 15
博文 1
码字总数 461
作品 0
深圳
高级程序员
私信 提问
DBeaver 1.5.5 发布,即将开源

DBeaver 1.5.5 发布了,这将是 DBeaver 作为免费软件的最后一个更新版本,而接下来 DBeaver 将开源! DBeaver 是一个通用的数据库管理工具和 SQL 客户端,支持 MySQL, PostgreSQL, Oracle, D...

红薯
2012/05/03
1K
7
DBeaver 3.0.1 发布,数据库管理工具

DBeaver 3.0.1 发布,此版本是个 bug 修复版本。 DBeaver 3.0.1 改进内容如下: 添加了 Firebird 和 PostgreSQL 扩展(views and procedures definition view now supported) 添加了对 MongoD...

oschina
2014/09/10
1K
10
DBeaver 1.5 发布,数据库管理客户端

DBeaver 1.5 在 Windows 下新增了一个 WMI 插件,改进了 ERD 插件,支持面向对象数据库,附加的 Oracle 插件以及性能方面问题的修复。 DBeaver 是一个通用的数据库管理工具和 SQL 客户端,支...

红薯
2012/01/31
858
2
DBeaver 4.0.2 发布,数据库管理工具

DBeaver 是一个通用的数据库管理工具和 SQL 客户端,支持 MySQL、 PostgreSQL、 Oracle、DB2、MSSQL、 Sybase、Mimer、HSQLDB、Derby, 以及其他兼容 JDBC 的数据库。DBeaver 提供一个图形界面...

王练
2017/03/01
1K
5
DBeaver 代码现已迁移到 GitHub

DBeaver 是个很受欢迎的数据库管理工具,一直在非常积极的维护。现在,DBeaver 代码迁移到 GitHub: https://github.com/serge-rider/dbeaver DBeaver 开发者将会写一些构建过程和文档,帮助...

oschina
2015/10/25
3.2K
10

没有更多内容

加载失败,请刷新页面

加载更多

全面兼容IE6/IE7/IE8/FF的CSS HACK写法

浏览器市场的混乱,给设计师造成很大的麻烦,设计的页面兼容完这个浏览器还得兼容那个浏览器,本来ie6跟ff之间的兼容是很容易解决的。加上个ie7会麻烦点,ie8的出现就更头疼了,原来hack ie...

前端老手
13分钟前
3
0
常用快递电子面单批量打印api接口对接demo-JAVA示例

目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打...

程序的小猿
16分钟前
5
0
Yii 框架中rule规则必须搭配验证函数才能使用

public $store_id;public $user_id;public $page;public $limit;public $list;public $mch_list;public $cart_id;public $is_community;public $shop_id;public $cart_typ......

chenhongjiang
19分钟前
2
0
Flutter使用Rammus实现阿里云推送

前言: 最近新的Flutter项目有“阿里云推送通知”的需求,就是Flutter的App启动后检测到有新的通知,点击通知栏然后跳转到指定的页面。在这里我使用的是第三方插件Rammus来实现通知的推送,之...

EmilyWu
19分钟前
40
0
Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务

短网址顾名思义就是使用比较短的网址代替很长的网址。维基百科上面的解释是这样的: 短网址又称网址缩短、缩短网址、URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短...

阿里巴巴云原生
34分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部