相信很多朋友都有LAMP或LNAMP建站,那么必然会有使用MySQL,对于非DBA的我们,优化SQL语句总是无从下手,大叔偶然之下,发现网上有大佬写的一个MySQL的语句优化工具,Python版本的,而且代码全公开,算是开源吧。
有需要的朋友可以前往下载。
工具说明
1、准备条件
模块 – MySQLDB
模块 – sqlparse
Python版本 = 2.7.3 (2.6.x版本应该也没问题,3.x版本没测试)
2、调用方法
python mysql_tuning.py -p tuning_sql.ini -s 'select xxx'
1) 参数说明
-p 指定配置文件名称
-s 指定SQL语句
3、配置文件
共分两节信息,分别是[database]描述数据库连接信息,[option]运行配置信息。
1) [database]
server_ip = 127.0.0.1
db_user = testuser
db_pwd = testpwd
db_name = test
2) [option]
sys_parm = ON //是否显示系统参数
sql_plan = ON //是否显示执行计划
obj_stat = ON //是否显示相关对象(表、索引)统计信息
ses_status = ON //是否显示运行前后状态信息(激活后会真实执行SQL)
sql_profile = ON //是否显示PROFILE跟踪信息(激活后会真实执行SQL)
4、输出说明
1) 标题部分:===== BASIC INFORMATION =====
包含运行数据库的地址信息及数据版本信息。
2) 原始SQL:===== ORIGINAL SQL TEXT =====
用户执行输入的SQL,这部分主要是为了后续对比SQL改写时使用。语句显示时使用了格式化。
3) 系统级参数:===== SYSTEM PARAMETER =====
脚本选择显示了部分与SQL性能相关的参数。这部分是写死在代码中的,如需扩展需要修改脚本。
4) 优化器开关:===== OPTIMIZER SWITCH =====
优化器相关的一些参数,通过调整这些参数可以人为干预优化器行为。
5) 执行计划:===== SQL PLAN =====
就是调用explain extended的输出结果。如果结果过长,可能出现显示串行的问题(暂时未解决)。
6) 优化器改写后的SQL:===== OPTIMIZER REWRITE SQL =====
通过这里可判断优化器是否对SQL进行了某种优化(例如子查询的处理)。
7) 统计信息:===== OBJECT STATISTICS =====
在SQL语句中所有涉及到的表及其索引的统计信息都会在这里显示出来。
8) 运行状态信息:===== SESSION STATUS (DIFFERENT) =====
在会话级别对比了执行前后的状态(SHOW STATUS),并将出现变化的部分显示出来。需要注意的是,因为收集状态数据是采用SELECT方式,会造成个别指标的误差(例如Com_select)。
9) PROFILE详细信息:===== SQL PROFILING(DETAIL)=====
调用SHOW PROFILE得到的详细信息。
10) PROFILE汇总信息:===== SQL PROFILING(SUMMARY)=====
根据PROFILE的资源消耗情况,显示不同阶段消耗对比情况(TOP N),直观显示”瓶颈”所在。
工具下载
优化工具
原作者:韩锋