从优化达梦执行计划输出,谈产品交互

原创
数据库
近期,开始尝试做些国产数据库的评测工作,特别是与SQL相关的,也输出几篇文章。在这一过程中,对国产数据库使用感觉还是存在不小优化空间。这里以达梦数据库的执行计划输出为例,谈谈自己对产品交互优化的一些看法。

近期,开始尝试做些国产数据库的评测工作,特别是与SQL相关的,也输出几篇文章。在这一过程中,对国产数据库使用感觉还是存在不小优化空间。这里以达梦数据库的执行计划输出为例,谈谈自己对产品交互优化的一些看法。

1. 达梦数据库计划输出及优化

(1)达梦执行计划现状

作为DBA最常用的功能,了解SQL语句的执行计划很重要。达梦数据库可通过多种方式来查看,常用的就是Explain命令。坦白讲,第一次看到达梦数据库的执行计划,是让我感到比较郁闷的,因为它与其他数据库的执行计划还是存在很大差别。如下图,就是一条简单的执行计划示例。

当看到这一输出结果,在不参考文档的情况下,有很多是不太理解的。

  • 没有标题栏,每部分内容不知含义,如方括号中一串数字
  • 有操作符部分,但只看名称部分勉强能猜出来,有的完全猜不出
  • 操作符后面应该是每种操作符的参数,操作符不同参数而已,各参数还有输入值等
  • 整体缩进式结构,应该跟其他数据库类似,可反应操作符执行顺序

达梦也有其他图形化工具,情况会好一些。如在达梦最近推出的SQLark百灵中,通过分栏显示清晰了很多,当然还是存在不知含义等问题。

于是,只能借助达梦文档,来回查看操作符含义、参数含义等等。如下图是达梦官方提供的执行计划操作文档,写的还是挺清楚的。当然,往复切换查看文档和执行计划的过程还是令人不悦,是不是能有更好的一些方法呢...

(2)达梦执行计划优化

有了上面这些问题,自己还是想动手尝试改变下。近几年动手少了,赶鸭子上架拿 Python 试着改造下。这里面突出有几个问题想要优化下:一是输出格式的问题,可能多年受Oracle、MySQL的影响,还是觉得表格形式的比较习惯;二是对操作符不熟悉,因此最好能一屏显示执行计划及对应操作符的含义,方便上下对照来看;三是执行计划还会受到如统计信息、内核参数等影响,有可能都显示出来。好了,有了需求可以动手了...

首先,第一个问题就是搞环境,开始以为很简单的事。用Docker起了个达梦实例,然后在本地装Python连达梦库。之前用cx_Oracle、MySQLdb、PyMySQL连接Oracle、MySQL都是很简单,但参照达梦官方文档使用Python连接,遇到了一堆的问题;前后试了一小时,放弃...选择用比较挫的方式,直接程序中调用达梦DiSQL命令行工具方式。然后,就是如何将达梦的知识库(执行计划操作符含义)与程序产生互动。达梦的官方文档不错,写了个简单的爬虫将信息导出,存储在程序中作为元信息使用;剩下就是做些字符串处理,规格化一下。第三,就是字符终端输出,这个有点基础调用现成包就可以。于是有了下面这个小原型。

调用后输出结果如下:

头部是一些数据库、用户、语句信息,中间部分是表格化的执行计划和遇到的操作符及参数含义说明,后面是语句中使用到的表及索引的统计信息情况,整体感觉舒服了很多。换一个复杂点的例子。

2. 产品交互优化的几点看法

通过上面优化的小例子,其实也反应出在产品交互上、功能设计上值得关注的几点。

(1)选择用户“最熟悉”方式

了解、熟悉一款产品代价是挺高的,作为基础软件的数据库更是如此。如何让用户快速了解、上手你的产品是很关键的。曾跟某国产数据库厂商聊天,对方谈到自己是可以全方位对标某国际大厂数据库的,那么让用户快速了解你就很简单了。我的建议就是列一个表格,将两个数据库从设计、开发、运维等多角度分列出来,然后再细分子项逐一对比。用户可以从中很快速地了解你的产品能做什么、能做到什么程度。上面是从大的方面来看,那小的方面也是如此。如本文谈到的执行计划输出,就可以以一种人们更为熟悉的方式来交互。例如 Oracle 的执行计划输出,就给我们立了一个很好的标杆,特别是其内部包含的丰富信息,可以极大方便 DBA 的日常工作。当一名 Oracle DBA 转型时,就感到很舒适,之前的很多积累还可以复用。

(2)知道用户“最需要”什么

作为一名产品经理,了解用户最需要什么是基础;但就是这个最基础的问题,往往没有得到足够的关注。有时产品的很多功能是产品经理意淫出来的,而用户最朴素的基础想法并没有得到关注。这就需要产品经理真正是站在客户的角度、站在用户一线,才能观察体会出来。最直接的方式就是当一天的“客户”,使用自己的产品干干一线工作,然后就能理解用户的吐槽了。近些年我也会参与到不少厂商的评测工作,经常会发现交互性的问题,对方感到很诧异时,我只能苦笑道“没当过DBA吧”。举个小例子,你了解一款数据库的备份功能,你会考虑哪些问题:物理备份、逻辑备份怎么做?如何做增量备份?如何查看备份集?如何查看备份进度?失败了怎么办,等等不一而足。这些都是来自一线工作中会遇到的。上例中,我最需要的就是快速理解操作符含义,通过帮助形式就可以方便理解。

(3)引导用户“需关注”什么

除了用户需要什么之外,作为对产品更为了解的一方,产品还应有意识地提供更多更有价值的内容,方便用户对这个功能的理解和使用。用户初次接触产品,很难对产品有全面的了解,知道往往都是片面的一些点,如果通过功能构建将功能关联起来,让用户有意识地去关注,往往会取的不错的效果。这相当于把一个一个的知识点,连接成一张网,让用户有了更为全面的理解。如上面例子中,显示执行计划是用户的初衷,但其本质的需求是理解为什么SQL走了这样的执行计划,那么可能影响、改变执行计划的因素都应该是用户需要了解的。例如:统计信息是不是完整的?数据是不是有倾斜?使用绑定变量了吗?等等,这些问题都是需要用户关注的。

责任编辑:姜华 来源: 韩锋频道
相关推荐

2011-09-14 17:03:17

数据库执行计划解析

2021-03-17 09:35:51

MySQL数据库explain

2015-04-22 14:17:45

SQL SERVERMSSQL SERVE缓冲区

2021-05-28 10:46:36

MySQL执行计划

2023-09-21 10:55:51

MysqlSQL语句

2022-08-08 08:03:44

MySQL数据库CBO

2009-11-13 16:28:02

Oracle生成执行计

2024-09-12 15:16:14

2012-02-02 10:07:12

诺基亚交互设计

2014-04-16 14:36:03

2020-05-21 10:02:51

Explain SQL优化

2010-04-16 09:27:18

Ocacle执行计划

2020-09-15 08:44:57

MySQL慢日志SQL

2021-04-24 12:01:08

MySQL数据库Mysql执行计划

2021-02-20 08:40:19

HiveExplain底层

2009-11-18 17:05:47

捕获Oracle SQ

2022-08-15 15:09:26

SQL数据库MySQL

2009-11-10 16:00:05

Oracle执行计划

2021-09-07 10:43:25

EverDB分布式执行

2011-08-18 09:19:19

SQL Server的SQL查询优化
点赞
收藏

51CTO技术栈公众号