D-SMART社区版发布一个重要的升级版本,届时所有的社区版用户都可以使用PATCH工具直接升级而不用重新安装。这个版本中的有一个十分有趣的功能,就是关键SQL监控。实际上在2.1.6版本中D-SMART已经具备了关键SQL跟踪的能力,可以及时发现关键SQL执行中发生的问题。在V2.2中的关键SQL跟踪会支持社区版支持的所有数据库对象,包括Oracle、MySQL、达梦、PG系列(包括高斯,金仓等)。
关键SQL,顾名思义就是在系统中比较关键的SQL语句,一旦这些SQL出现问题,就会对系统的性能产生很大的影响,对核心业务产生影响。
最近我也遇到过几个客户遇到关键SQL性能问题导致核心业务被迫暂时下线的严重故障。他们问我能不能实时监控SQL语句的执行计划,当SQL执行计划出问题的时候能够告警。我当时的回答是,对于业务负载较大的大型系统中,直接监控所有的执行计划既不必要,成本也过高,弄不好这个监控反而会引发一些高并发执行的SQL的性能问题。
后来我就考虑这个业务的需求是什么,用户希望当系统中某条SQL发生异常时能够及时感知,及时告警,被及时识别出来。于是就有了关键SQL告警这个功能。这个功能在V2.1.6版本中就已经上线了。
仅仅有告警还不能满足一些用户的需求,对于一些十分核心的系统,很多用户希望构建关键SQL监控的能力。能够在监控大屏上很直观的看到这些SQL的执行情况。于是就有了关键SQL监控这个功能。
关键SQL监控不仅仅是一个监控,而是一个对于关键SQL进行监控、预警、分析的集成化入口。因此我们同时在监控界面上集成了关键SQL告警的数据。在这里我们不需要通过告警中心,就可以直接进行关键SQL告警分析。
当系统中出现了关键SQL告警的时候,在某个维度会显示告警数量的红色警示。此时我们就可以进行下钻分析了。
点击进去可以查看详情,点击SQL详情分析可以对这条SQL进行分析诊断。这里调用的诊断工具与在告警中心的“运维经验告警”模块中点击诊断效果是完全一致的。
通过这个诊断工具,我们发现了一张大表上缺乏索引,进行了全表扫描的问题。
关键SQL监控与告警,对于证券、银行、运营商等的一些大并发量的关键系统的保驾护航还是挺有意义的。有很多SQL很可能平时都不会出现在数据库的TOP SQL中,但是这些SQL是十分关键的。一旦这些SQL出现一些异常,会引发业务的严重问题。一条平时10个逻辑读的SQL,可能每秒执行数量就高达数百次,如果走错了执行计划,逻辑读变成10万一次了,那么很可能服务器的CPU就爆掉了,或者热块冲突就十分严重了。这时候如果我们能够提前感知,提前处置,或者故障发现时能够快速定位,快速找到解决方案,是很有价值的。
哪怕SQL没有走错执行计划,由于做了某些维护操作,表的数据量发生了较大的变化,或者出现了很多碎片,也可能引发关键SQL的性能问题。集群延时增加,也会导致关键SQL执行变慢。而SQL执行变慢后,又会引发某条SQL的并发执行量越来越大,从而进一步恶化数据库的整体性能,最终引发严重故障。
根据用户的需求,我们会不断的优化迭代这个功能,我想今后一些核心系统迁移到信创数据库上,这个功能就更有用武之地了。