Bootstrap

不会C/C++的不是好DBA,一个解析MYBAITS的脚本

不会C/C++的不是好DBA! 这可不是标题蛋. 数据库作为信息社会的基石,且是核心基石.它需要面对高并发的SQL请求,要处理大量数据的请求,且要运行稳定的三要素. 说白了就是要快,要多,要稳!
所以大部分DB 都是用C或者C++开发的. 
MYSQL 服务层使用用C++,INNODB是用C
LINUX 是用C
REDIS 是用C
PG 也是用C
CLICK HOUSE 用的C++
ES 用的JAVA
人家南京基石的CTO 白鳝 出道的时候就是C++开发工程师,后期转DBA的

这个并不是要求DBA都要把C/C++学得如何全面,如何深,如何精通,以及各种标准库. 我们只是能看懂C/C++语法,知道这是个啥,是循环,是对象,是指针. 也并不要求像专业一样C/C++开发工程师写得那么专业! 可以把C/C++当脚本来写,随心所欲. 这不仅是你的DBA护城河,也能让你跨过心里那到坎,简单容易. 跟学骑自行车一样! 

我差不多花费4个周工作日写了近两千行的C/C++代码,大量的IF语句.
来干嘛呢? 就是静态解析JAVA应用里面的MYBAITS语法XML文件中的SQL! 有人说通过运行可以动态打印可执行的SQL,是的JAVA SQL日志可以.

当那是动态的,可执行的.不是全面的,只是一个时间或者状态的SQL.
像我这种一线DBA,用上了云就很少玩基础运维DBA的活.当是也不能像国企里面甲方DBA样喝着咖啡,在群里进行商业互吹,然后跑到各种大会吹牛逼,经常闲得蛋疼,然后写写文章,写写PPT,赚赚小外快.有问题呼叫他去观摩观摩,能解决就是专家,不能解决呼叫原厂火力支援.
我们这种冲在一线的,要提前抓住问题的火苗,消灭在萌芽状态.有时候真苦逼,这样子很没有成就感,领导觉得都是小问题.真羡慕二线的专家们.

自然不管你是管什么DB的,只要前面业务是用JAVA开发的,使用SQL语句进行请求.那么你就需要这样的脚本. 把代码仓库里的所有MAPPER文件夹下面的XML文件中的SQL提取出来分析. 我这个项目136个文件,提取了1099个SQL.我发现了9个MYBAITS语法BUG. 然后我把这些SQL提到SQL审核里面去匹配下规则.

main.cpp 是我们的GCC脚本,
main.exe  绿色的,是我们个C/C++的可执行文件;
makeDebug 和makeRelase是编译脚本

脚本运行时候 需要指定目录,在目录下一级搜索.xml文件,然后读取里面的SQL,并保存脚本当下目录ParseXMFetchSQL.sql
这里当然前提你要把代码库各个目录下的XML文件CP在一起,本脚本不进行子目录搜索. 目前本脚本提前1089个SQL,约有30个需要手工修正下.
这30个主要是一个DAO方法里变成2个SQL, 多个GROUP,多个ORDERBY.用GCC去解析着实麻烦.而且这样的SQL概率非常低.

剩余的文件都是测试用的,分为当前目录下的DEMO.XML和其它目录下测试脚本. 没什么深澳的,就是方便快速执行而已,为了调式BUG!
 

MYSQL AWR 报表
终于完成MYSQL AWR HTML报告

社区VS饭圈
DBA界中的ACE 是时候落幕了
DBA搞钱之路

写作不易,脚本编写不易,好心人请点下广告,善良的人请分享到朋友圈
愿祖保佑各位岁岁平安,工作稳定
脚本下载: https://pan.baidu.com/s/10w9j7fUIdCcdNPcym-l_Hg?pwd=4562

;