暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

再分享一个 OB 的小而美的 SQL 诊断工具

226

年前分享了一个 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 功能。期望后面版本功能更强大一些。用户对这个工具使用的越多,关注讨论越多,越有助于开发者投入更多的精力完善工具。


        其他参考



        文章转载自数据库技术闲谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论