设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 服务器 > 安全 > 正文

如何高效快速地优化MySQL、SQL语句(附源码)(4)

发布时间:2021-01-07 19:30 所属栏目:53 来源:网络整理
导读:根据固定位置读一行的请求数.如果执行大量查询并需要对结果进行排序该值较高.则可能使用了大量需要MySQL扫描整个表的查询或连接没有正确使用键. Handler_read_rnd_next 在数据文件中读下一行的请求数.如果正进行大

根据固定位置读一行的请求数.如果执行大量查询并需要对结果进行排序该值较高.则可能使用了大量需要MySQL扫描整个表的查询或连接没有正确使用键.

  • Handler_read_rnd_next

在数据文件中读下一行的请求数.如果正进行大量的表扫描,该值较高.通常说明表索引不正确或写入的查询没有利用索引.

6、SQL性能分析器(Query Profiler)

MySQL的Query Profiler是一个使用非常方便的Query诊断分析工具,通过该工具可以获取一条Query在整个执行过程中多种资源的消耗情况,如CPU、IO、IPC、SWAP等,以及发生的PAGE FAULTS、CONTEXT SWITCHE等,同时还能得到该Query执行过程中的MySQL所调用的各个函数在源文件中的位置.

使用方法
  • 开启
mysql> select @@profiling;

mysql> set profiling=1;

默认情况下profiling的值为0表示MySQL SQL Profiler处于OFF状态,开启SQL性能分析器后profiling的值为1.

  • 执行SQL语句
mysql> select count(*) from t1;

  • 获取概要信息

使用”show profile”命令获取当前系统中保存的多个Query的profile的概要信息.

mysql> show profiles;

+———-+————+———————–+

| Query_ID | Duration?? | Query?????????????????? |

+———-+————+———————–+

|??????? 1 | 0.00039300 | select count(*) from t1 |

+———-+————+———————–+

  • 针对单个Query获取详细的profile信息

在获取概要信息之后,就可以根据概要信息的Query_ID来获取某个Query的执行过程中详细的profile信息.

mysql> show profile for query 1;

mysql> show profile cpu,block io for query 1;

二、工具说明

前面谈到了多种手段,对于SQL语句的调优都有所帮助.通过下面这个小工具,可以自动调用命令将上面这些内容一次性推给DBA,大大加速优化的过程.

1、准备条件

  • 模块 – MySQLDB
  • 模块 – sqlparse
  • Python版本 = 2.7.3 (2.6.x版本应该也没问题,3.x版本没测试)

2、调用方法

python mysql_tuning.py -p tuning_sql.ini -s ‘select xxx’

参数说明

-p? 指定配置文件名称

-s? 指定SQL语句

3、配置文件

共分两节信息,分别是[database]描述数据库连接信息,[option]运行配置信息.

[database]
server_ip?? = 127.0.0.1

db_user???? = testuser

db_pwd????? = testpwd

db_name???? = test

[option]
sys_parm??? = ON???? //是否显示系统参数

sql_plan??? = ON //是否显示执行计划

obj_stat??? = ON //是否显示相关对象(表、索引)统计信息

ses_status? = ON //是否显示运行前后状态信息(激活后会真实执行SQL)

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读