只在本文之中讨论MySQL慢SQL治理这一单独链路,并不去做全产品的横向评测。文中所提到的DBeaver是指Community版,Navicat是指Premium Lite免费版(不涉及付费版所具备的能力)。NineData社区版除了有慢查询分析之外,还涵盖数据库DevOps、数据复制、数据库对比这些,本文仅仅聚焦于慢SQL相关功能。
很多团队手里并不缺数据库客户端:
DBeaver能够进行连库操作,能够书写SQL语句,能够查看结果,并且也对执行计划查看予以支持;Navicat官方把它界定为针对basic database operations的compact version,其重点是对多库连接、Data Viewer、Object Designer、Query Editor、Import/Export等这些基础能力加以覆盖。
问题并非在于客户端存在所谓的“不够用”情况,而是对于单条 SQL 的查询操作,以及执行过程,还有即时验证方面,这类工具展现出了稳定的表现。
需明确加以区分的是,客户端所解决的是,“这条 SQL 当前怎样去查询、怎样来验证”,然而慢 SQL 治理所要处理的则是,“最近哪一类 SQL 在增多、为何会变慢、后续如何持续进行跟进”。这两类问题关注的重点并不相同,适配的工具形态自然而然也存在差异。
客户端擅长的是“连进去、查清楚、立刻验证”
若仅仅去看单独的一条 SQL,那么客户端依旧是 DBA 常常会使用的工具当中的一个。
常见动作包括:
针对这类动作,DBeaver 能够覆盖一大部分,Navicat 同样也能覆盖一大部分。它们具有明确的共同特点,那就是直接,并且快速,还适合单人进行操作。
许多团队,正因为这样,当慢SQL显现的时候,第一反应仍然是将语句取出来之后,在客户端里面运行一回。
但慢 SQL 核心难点,不是把一条 SQL 跑出来
MySQL 里,慢 SQL开始从“偶发排障”进入“日常治理”阶段时,DBA面对的,就不只是单条语句了。
更常见的问题是:
这些问题,客户端本身就不是围绕这件事设计的。
客户端更像 “个人操作工具” 。它擅长回答的是:
但慢 SQL 治理还要继续回答:
多团队即使都已然拥有那 DBeaver 或者 Navicat,可慢 SQL 的情况最终仍得回归至 slow log、脚本以及人工整理,缘由就在于此。
由 NineData 社区版所补充完整的,恰好就是“从发现直至处理”的这一阶段,这一阶段是被补上的。
NineData社区版自身并非单纯的客户端,于MySQL慢SQL这条链路当中,其所运用的是数据库DevOps里的慢查询分析、SQL窗口、SQL任务这些能力,此能力的运用是基于数据库已开启慢日志,且按官方要求完成采集配置这一前提的。
接入之后,DBA 每天的工作流可以变成这样:
晨起之时,先将趋势图浏览一番——昨日究竟是哪一些数据源的慢查询呈现出上涨态势呢?依据数据源、环境以及标签进行一次筛选操作,如此这般,问题所涉及的范围便能够迅速地缩小了。
系统已按SQL模板聚合好了,往下点。几十条慢日志中,一眼就能分清,哪些是同一个写法反复出现,哪些只是零星偶发。这不是客户端做不到,而是要靠人工翻日志,手工归类,再一条条对,耗时效率差距明显。
选择一个模板,能够持续下钻至具体样本。性能诊断、规范审核、索引建议径直列于此处——问题大致所在之处,无需从起始处进行猜测。
倘若还要做进一步的验证事项,直直地去打开那具备的 SQL 窗口,运行 EXPLAIN 以及改动改动写法所产出的效果,当场就能够试一下的、去做验证,确定是要进行改动之后,接着去推进 SQL 任务的进程,提交到系统里这回事、进行审批这一趟流程、执行下去这样的操作步骤、还有回滚这一行为动作,全部都是在同一套系统范围之内的、是这么个情况。
那么,处于这个维度之中,NineData社区版较为类似于一套本地化治理工作台。
客户端较为主要承担的是“查此和经历验证”,NineData承担的却是“去查看趋向、查阅模板、端详诊断,接着去做动作”。
这不是“谁替代谁”,而是“谁负责哪一段”
当把NineData社区版与DBeaver社区版以及Navicat Premium Lite放置在一起的时候,常见的误区在于,是按照同一层级的产品去进行比较的。
实际上它们的角色并不一样。
九层维度的数据社区版本,其中包含DBeaver社区,还有Navicat高级精简版。
产品形态
本地化数据库工作台
开源数据库客户端
免费基础数据库客户端
官方边界
社区版包含数据库 DevOps、数据复制、数据库对比
免费开源数据库管理工具
一个面向基本数据库操作的紧凑版本,它是紧凑的,是面向基本数据库操作的版本。
本文聚焦的 MySQL 场景
慢 SQL 治理(趋势、模板、诊断、任务衔接)
单条 SQL 查询与验证
日常数据库基础操作
更擅长的动作
趋势查看、模板聚合、诊断建议、后续 SQL 任务衔接
连库、执行 SQL、看执行计划、改单条 SQL
多库连接、查询编辑、对象查看、结果处理、基础导入导出
更适合承担的角色
慢 SQL 治理主链路
单条 SQL 的即时验证入口
日常数据库基础操作入口
这样看就比较清楚了:
这不是高低关系,也不是替代关系。
不同的职责有着不同的分工,具体而言,客户端的职责在于,要将一条 SQL 以清晰无误的状态看明白,而工作台的职责是,针对一类慢 SQL 进行持续不断的管理工作。
何故众多团队单单凭借客户端,迟缓的SQL最终却依旧停留在“查一回”?
只靠客户端做慢 SQL,最容易断在两个地方。
第一,断在模板层
单条SQL是能够查看的,然而,在几十条、几百条的慢日志当中,哪些实际上是同一个模板,客户端并不会主动帮你将其整理出来,你唯有自己去翻阅日志,进而进行人工归类,做一次两次还算可以,要是做成日常工作那就承受不住了。
第二,断在后续动作。
在客户端当中执行完 EXPLAIN 之后,你清楚了问题大致所在之处,接下来还需要去做出决定:
要是这些动作,还得凭借群消息、截图、Excel、手工记录来串联,那么慢SQL极易再度变为“出了问题才去翻日志”的状况。
重点并非客户端“可不可以使用”,而是它仅承担“查询”职责,不承担“管理”职责,然而慢SQL治理切实所需的,是将“查询”与“管理”相衔接。
总结
DBeaver Community与那个Navicat Premium Lite,它们均属于实用的客户端工具,在针对单条SQL展开的查询以及验证这个行为上,其仍是被DBA通常以来经常会去采用的入口处。
然而,NineData社区版有着不一样的定位,它是免费的,是进行本地化部署的数据管理平台,它把数据库DevOps、数据复制、数据库对比这三大能力整合到了一起。
于 MySQL 慢 SQL 此链路之中,其运用的是 DevOps 里的慢查询分析、SQL 窗口、SQL 任务,从趋势洞察直至变更发布,均于同一套工作台内达成。然而这仅仅是起始点。