在数据库运维过程中,优化SQL是业务团队与DBA团队的日常任务。例行SQL优化,不仅可以提升程序性能,还能够降低线上故障的概率。
目前常用的SQL优化方式包括但不限于:业务层优化、SQL逻辑优化、索引优化等。其中索引优化通常通过调整索引或新增索引从而达到SQL优化的目的。索引优化往往可以在短时间内产生非常巨大的效果。如果能够将索引优化转化成工具化、标准化的流程,减少人工介入的工作量,无疑会大大提高DBA的工作效率
SQLAdvisor是由美团点评公司DBA团队(北京)开发维护的SQL优化工具:输入SQL,输出索引优化建议。 它基于MySQL原生词法解析,再结合SQL中的where条件以及字段选择度、聚合条件、多表Join关系等最终输出最优的索引优化建议。目前SQLAdvisor在公司内部大量使用,较为成熟、稳定。
美团点评致力于将SQLAdvisor打造成一款高智能化SQL优化工具,选择将已经在公司内部使用较为成熟的、稳定的SQLAdvisor项目开源,github地址。希望与业内有类似需求的团队,一起打造一款优秀的SQL优化产品。
Usage:
SQL Advisor Summary
Help Options:
-?, --help Show help options
Application Options:
-f, --defaults-file sqls file
-u, --username username
-p, --password password
-P, --port port
-h, --host host
-d, --dbname database name
-q, --sqls sqls
-v, --verbose 1:output logs 0:output nothing
[root@dbmon SQLAdvisor]# sqladvisor -u *** -p *** -h *** -P 6001 -d my -q "select * from my_db where port=6001" -v 1
2017-05-04 11:42:03 27943 [Note] 第1步: 对SQL解析优化之后得到的SQL:select `*` AS `*` from `my`.`my_db` where (`port` = 6001)
2017-05-04 11:42:03 27943 [Note] 第2步:开始解析where中的条件:(`port` = 6001)
2017-05-04 11:42:03 27943 [Note] show index from my_db
2017-05-04 11:42:03 27943 [Note] show table status like 'my_db'
2017-05-04 11:42:03 27943 [Note] select count(*) from ( select `port` from `my_db` FORCE INDEX( ux_hostportservicename ) order by host DESC,port DESC limit 353) `my_db` where (`port` = 6001)
2017-05-04 11:42:03 27943 [Note] 第3步:表my_db的行数:707,limit行数:353,得到where条件中(`port` = 6001)的选择度:353
2017-05-04 11:42:03 27943 [Note] 第4步:开始验证 字段port是不是主键。表名:my_db
2017-05-04 11:42:03 27943 [Note] show index from my_db where Key_name = 'PRIMARY' and Column_name ='port' and Seq_in_index = 1
2017-05-04 11:42:03 27943 [Note] 第5步:字段port不是主键。表名:my_db
2017-05-04 11:42:03 27943 [Note] 第6步:开始验证 字段port是不是主键。表名:my_db
2017-05-04 11:42:03 27943 [Note] show index from my_db where Key_name = 'PRIMARY' and Column_name ='port' and Seq_in_index = 1
2017-05-04 11:42:03 27943 [Note] 第7步:字段port不是主键。表名:my_db
2017-05-04 11:42:03 27943 [Note] 第8步:开始验证表中是否已存在相关索引。表名:my_db, 字段名:port, 在索引中的位置:1
2017-05-04 11:42:03 27943 [Note] show index from my_db where Column_name ='port' and Seq_in_index =1
2017-05-04 11:42:03 27943 [Note] 第9步:开始输出表my_db索引优化建议:
2017-05-04 11:42:03 27943 [Note] Create_Index_SQL:alter table my_db add index idx_port(port)
2017-05-04 11:42:03 27943 [Note] 第10步: SQLAdvisor结束!
注:
利用django, bootstrap,html 来平台化
利用python脚本等来实现自动化
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。