SQL自动审核

一、工具概述

SQL自动审核-自助上线平台,可以让开发自上线,开发提交SQL后就会自动返回优化建议,无需DBA的再次审核,从而提升上线效率,有利于建立数据库开发规范,让DBA从日常繁琐的工作中解放出来。

SQL自动审核主要完成两方面目的:

1、避免性能太差的SQL进入生产系统,导致整体性能降低。

2、检查开发设计的索引是否合理,是否需要添加索引。

思路其实很简单:

1、获取开发提交的SQL。

2、对要执行的SQL做分析,触碰事先定义好的规则来判断这个SQL是否可以自动审核通过,未通过审核的需要人工处理。

使用说明:

1、针对select/insert/update/create/alter加了规则,delete需要审批。

2、语句之间要有空格,例where id = 100,没有空格会影响判断的准确性。

3、SQL语句后面要加分号; MySQL解析器规定分号才可以执行SQL。

4、反引号`会造成上线失败,需要用文本编辑器替换掉。

5、支持多条SQL解析,用一个分号;分割。例如:

insert into t1 values(1,‘a‘);

insert into t1 values(2,‘b‘);

6、JSON格式里的双引号要用反斜杠进行转义,例如:{\"dis_text\":\"nba\"}。

注:审核规则是根据我公司的情况制定而成,非Inception审核规则(只借鉴思路),使用时请注意!

其内部的原理,主要用正则表达式匹配规则实现。

二、功能实现

SELECT审核

  • 开发人员可以直接将SQL语句提交到平台进行风险评估
  • 平台对SQL语句进行分析,自动给出其不符合开发规范的改进意见
  • 适用场景:应用开发阶段

检查项:

1、select * 是否有必要查询所有的字段?

2、警告!没有where条件,注意where后面的字段要加上索引

3、没有limit会查询更多的数据

4、警告!子查询性能低下,请转为join表关联

5、提示:in里面的数值不要超过1000个

6、提示:采用join关联,注意关联字段要都加上索引,如on a.id=b.id

7、提示:MySQL对多表join关联性能低下,建议不要超过3个表以上的关联

8、警告!like ‘%%‘双百分号无法用到索引,like ‘mysql%‘这样是可以利用到索引的

9、提示:默认情况下,MySQL对所有GROUP BY col1,col2...的字段进行排序。如果查询包括GROUP BY,想要避免排序结果的消耗,则可以指定ORDER BY NULL禁止排序。

10、警告!MySQL里用到order by rand()在数据量比较多的时候是很慢的,因为会导致MySQL全表扫描,故也不会用到索引

11、提示:是否要加一个having过滤下?

12、警告!禁止不必要的order by排序,因为前面已经count统计了

13、警告!MySQL里不支持函数索引,例DATE_FORMAT(‘create_time‘,‘%Y-%m-%d‘)=‘2016-01-01‘是无法用到索引的,需要改写为

create_time>=‘2016-01-01 00:00:00‘ and create_time<=‘2016-01-01 23:59:59‘

14、之后会调用美团网SQLAdvisor进行索引检查

INSERT审核

检查项:

  • 警告:insert 表1 select 表2,会造成锁表。

UPDATE审核规则

1、警告!没有where条件,update会全表更新,禁止执行!!!

2、更新的行数小于1000行,可以由开发自助执行。否则请联系DBA执行!!!

3、防止where 1=1 绕过审核规则

4、检查更新字段有无索引

CREATE审核规则

检查项:

1、警告!表没有主键

2、警告!表主键应该是自增的,缺少AUTO_INCREMENT

3、提示:id自增字段默认值为1,auto_increment=1

4、警告!表没有索引

5、警告!表中的索引数已经超过5个,索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间

6、警告!表字段没有中文注释,COMMENT应该有默认值,如COMMENT ‘姓名‘

7、警告!表没有中文注释

8、警告!表缺少utf8字符集,否则会出现乱码

9、警告!表存储引擎应设置为InnoDB

10、警告!表应该为timestamp类型加默认系统当前时间

ALTER审核规则

检查项:

1、警告!不支持create index语法,请更改为alter table add index语法。

2、警告!更改表结构要减少与数据库的交互次数,应改为,例alter table t1 add index IX_uid(uid),add index IX_name(name)

3、表记录小于100万行,可以由开发自助执行。否则表太大请联系DBA执行!

4、支持删除索引,但不支持删除字段

具体演示,请移步

http://blog.51cto.com/hcymysql/2053798

三、安装部署

环境安装

1、PHP环境安装

# yum install httpd php mysql php-mysql php-devel php-pear libssh2 libssh2-devel -y

2、安装PHP SSH2扩展

pecl install -f ssh2

3、修改/etc/php.ini

在最后一行添加

extension=ssh2.so

4、关闭selinux

# vim /etc/selinux/config

SELINUX=disabled

5、美团网SQLAdvisor安装

请移步

https://github.com/Meituan-Dianping/SQLAdvisor/blob/master/doc/QUICK_START.md

部署

将php-sqlreview.zip解压缩到/var/www/html/目录下

1、导入dbinfo.sql(DB配置信息表)和operation.sql(SQL工单记录表)

2、修改db_config.php(DB配置信息的IP、端口、用户名、密码、库名)

3、修改sqladvisor_config.php(访问SQLAdvisor服务器的IP、SSH端口、SSH用户名、SSH密码)

4、修改sql_submit.php(记录工单表的IP、端口、用户名、密码)和(调用mysql客户端的IP、SSH端口、SSH用户名、SSH密码)

脚本解释

1、index.html(SQL传参入口)

2、sql_review.php(过审核规则)

3、sql_submit.php(通过后,SQL上线提交)

4、order.php(工单查询-只记录成功入库的SQL)

5、order_result1.php(按照用户名分页搜索)

6、order_result2.php(按照时间范围分页搜索)

点击此处【下载工具脚本】或登录链接

https://pan.baidu.com/s/1eUct4Bo即可下载工具脚本

现通过DBAplus社群免费为大家提供SQL自动审核-自助上线平台的下载使用。若使用过程中有任何问题或建议可随时与我们联系,欢迎大家试用!

原文地址:https://www.cnblogs.com/chenshengqun/p/9078229.html

时间: 2024-08-06 05:32:35

SQL自动审核的相关文章

sql自动审核工具-inception

[inception使用规范及说明文档](http://mysql-inception.github.io/inception-document/usage/)[代码仓库](https://github.com/smile-java/inception) inception介绍 inception是去哪网团队开发的一个集审核.执行.备份及生成回滚语句于一身的MySQL自动化运维工具, 可以集成进mysql自动化运维平台来实现sql的自动审核.开发语言:C/C++ ,在mysql源码的基础上改造的

SQL自动审核-给出优化建议

sql_review 为方便dba和开发审核sql,特增加了规则,只需在网页里输入sql语句,会自动给出优化建议.参考的percona在线sql审核思路实现. php环境搭建:yum install httpd php 演示地址:http://106.75.10.36/ 使用说明: 1.我只对select和create加了规则,update/delete/alter属于危险语句,仍旧需要人工审核. 2.语句之间要有空格,例where id = 100,没有空格会影响判断的准确性. GitHub源

SQL业务审核与优化

审核   什么是业务审核 类似与code review 评审业务Schema和SQL设计 偏重关注性能 是业务优化的主要入口之一 审核提前发现问题,进行优化 上线后通过监控或巡检发现问题,进行优化 Schema设计审核 表和字段命名是否合规 字段类型,长度设计是否适当 表关联关系是否合理 主键,更新时间保留字段等是否符合要求 约束,默认值等配置是否恰当 了解业务,表数据量,增长模式 数据访问模式,均衡度 根据业务需求,表是否需要分区,是否有数据什么周期 SQL语句审核 SQL语句的执行频率 表上

SQL Server 审核(Audit)-- 审核组件

SQL Server 审核(Audit)-- 审核组件 关于审核的架构如下图. SQL Server 审核 审核是由"服务器操作组"."数据库操作组"等操作组合而成,可用于收集与监视服务器级别或数据库级别的操作.审核内部是使用"扩展事件(Extended Events)"所创建.审核组件位于SQL Server实例级别.每个 SQL Server 实例可以具有多个审核.定义审核时,将指定结果的输出位置. 这是审核的目标位置. 审核是在禁用状态下创

织梦DedeCMS信息发布员发布文章默认自动审核更新并生成HTML页面

织梦DedeCMS信息发布员发布文章默认自动审核更新并生成HTML页面 一直以为DEDECMS的信息发布员在后台发布文章后,非要管理员审核才能显示,今天一哥们问我这个问题.问:“能不能直接发布,并自动生成HTML,这样就节省了非要管理员来审核的麻烦?”我先跟他讲是不能的,非要管理员审核之后才能显示.呵呵,亏我用了这么长时间了,这么个简单的问题还回答的这么外行! 方法一:仔细研究了一下,是有办法的,让信息发布员的权限能够在发布文章之后自动生成HTML,并自动生成列表页和首页,具体办法如下: if(

通过SQL自动添加流水号

项目中往往有一些单据流水号或者流程流水号是希望通过新增一条记录后自动产生一个编号的,比如新增一条流程就自动根据当前日期自动添加该流程的流程流水号,下面介绍两种不同类型流水号通过SQL自动产生的方法. 流水号格式: www.2cto.com 第一种(数值类型):日期+流水号,比如“201104190001”-->"201104190002": 第二种(文本类型):前缀+日期+流水号,比如“WT201104190001”-->"WT201104190002"

SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)

介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候做了什么事情".具体是指审核SQL Server 数据库引擎实例或单独的数据库涉及到跟踪和记录数据库引擎中发生的事件.它的底层是基于扩展事件(Extented Event),所以其性能和灵活性相对较好.审核数据可以输出到审核文件.Windows安全日志和应用程序日志. Audit都需要创建一个实例级的"SQL Server审核",然后可以创建从属于它"服务器审核规范&qu

SQL Server 审核(Audit)介绍

SQL Server 审核(Audit)-- 介绍 MSDN请参见: http://msdn.microsoft.com/zh-cn/library/cc280386%28v=sql.120%29.aspx 认识审核 SQL Server审核是从SQL Server 2008开始引入的一套全新的审核系统."审核"SQL Server 数据库引擎实例或单独的数据库涉及到跟踪和记录数据库引擎中发生的事件. 通过 SQL Server 审核,您可以创建服务器审核,其中可以包含针对服务器级别事

SQL自动调优

SQL自动调优,是oracle 自带的调优工具,可以提出一些解决方案. 本次我主要介绍下面这些自动SQL调优工具: 自动SQL调优(automatic sql tuning) SQL调优工具集(SQL tuning sets,STS) SQL调优顾问(SQL Tuning Advisor) 自动数据库诊断监视器(addm) 显示SQL自动调优建议最快的方法: SQL> select dbms_auto_sqltune.report_auto_tuning_task from dual; GENE