年前分享了一个 OB 牛人写的两个小工具网址,阅读量非常高。这次再分享一个 OB 的 SQL 诊断工具 ( SQL Diagnoser )。官网社区版页面有下载。
先说外表。
这个工具第一次使用的感觉就是眼前一亮,有一种【小而美】的感觉。先不说功能多好用,光看外表就很不错。
工具文件(介质)简单,就一个编译好的 JAR 包。
mq@OBPILOT:~$ ls -lrth sql-diagnoser-4.2.0.0-20230921.jar
-rwxr-xr-x 1 mq mq 107M Feb 27 16:53 sql-diagnoser-4.2.0.0-20230921.jar
复制
部署简单,就一个 JAVA 命令。可以放到后台。
nohup java -jar ./sql-diagnoser-4.2.0.0-20230921.jar 2>&1 1>/tmp/sql-diagnoser-4.2.0.0.log &
复制
也可以通过参数 -Dserver.port=9090 指定监听端口。
文档简单,寥寥数句,言简意赅。这个不是贬义。:)
提供 API 接口供程序调用。这个就没有测试。
界面清爽,非常容易理解。
这个工具初步看就两个功能:租户 SQL 诊断和 SQL Review。
从工具页面输出和后端日志推测这个【一键诊断】就是根据租户连接信息以及时间范围条件去查找对应的 SQL 审计视图 GV$SQL_AUDIT 或 GV$OB_SQL_AUDIT。当然也可以对执行时间设置一个阈值。仅这一点就非常实用。从 OB 1.4 到 OB 4.2 ,很长一段时间 OB 的性能诊断都是围绕 SQL。虽然集群架构、参数调优那些也很重要,但那些优化一旦确定下来后,OB 业务数据库的性能问题最终都会回归到 SQL 性能诊断的老路上。
所以为了快速定位最近的问题 SQL,我经常查询 OB 的 SQL 审计视图。SQL 简单如下所示,实际情况会增加 SELECT 列和 WHERE 中条件。
SELECT usec_to_time(request_time) req_time, tenant_name, DB_NAME,svr_ip, client_ip, substring(query_sql,1,50) query_sql, ret_code,elapsed_time, user_client_ip
FROM oceanbase.gv$ob_sql_audit
WHERE tenant_id=1004 AND request_type IN (2)
ORDER BY request_time DESC LIMIT 50;
复制
尽管 SQL 审计视图保留的数据都只有最近的,作为快速定位分析当前问题就足够了(当然深入分析 OB 历史性能问题还是要借助 OCP)。显然这个工具的开发者也是这么认为的,只做这一个功能。对于查询出来的 SQL 按照一些 DBA 经验给出诊断建议。
这个诊断建议就是 DBA 平时的经验。常见的性能问题原因不会太多。这个诊断建议不需要特别精准或高深,这样就可以方便最广大的开发者理解和传播。传统数据库服务的经验也是如此。DBA 越是讲的高深莫测,开发就越难以理解,同样的问题就再次出现的可能性就越高。(这句移到文末)可以到 OB 社区论坛上讨论(点开文末【阅读原文】)。
不足之处。
目前使用中发现对于 ORACLE 租户的诊断,在后台日志中还有一些报错,应该是还没有完全适配好。问题出在 ORACLE 租户的默认数据库跟 MySQL 租户不一样。工具程序处理上还有些 BUG 。不过瑕不掩瑜。
这个诊断功能肯定还是能够继续发展的,同样的还有 SQL Review 功能。期望后面版本功能更强大一些。用户对这个工具使用的越多,关注讨论越多,越有助于开发者投入更多的精力完善工具。