您好,登录后才能下订单哦!
一个系统中数据库往往会成为性能瓶颈,在开发阶段更多考虑的可能是功能的完成,随着系统的投入使用,数据量越来越大,sql语句查询速度慢的问题就会被凸显出来。
对于一个有sql语句性能为题的系统,如何找出问题,解决问题,就是下面要探讨的内容:
1. 查看sql执行频率:
Mysql客户端连接成功以后,通过show [session|global] status命令可以提供服务器状态信息,show session status显示当前连接的统计结果,show global status显示自数据库上次启动至今的统计结果,如果不写默认参数是session.
我们关心的信息可以通过下面这个语句获取到
Show status like ‘com_______’;(com后面是六个下划线作为占位符)
它可以查询出com开头的信息。这查询的是当前连接的统计结果,如果想查全局可以使用:
Show global status like ‘com______’;
Com_**指的是相应语句执行的次数,它会对所有存储引擎的表操作进行统计,有几个数据比较重要:
Com_select 执行查询的次数,每次查询累加1
Com_insert 执行插入操作的次数,没插入一条数据累加1,批量插入也累加1
Com_update 执行更新操作的次数
Com_delete 执行删除操作的次数
show status like ‘Innodb_rows_%’;
这个命令可以显示针对Innodb存储引擎的信息
Innodb_rows_read:select查询返回的行数,
Innodb_rows_inserted 插入的条数
Innodb_rows_updated 更新的条数
Innodb_rows_deleted删除的条数
Connections:试图连接MySql服务器的次数
Uptime:服务器工作时间
Show_queries:慢查询的次数
通过这两个命令我们可以看到当前系统是查询占主要地位还是插入占主要地位,为我们的后续优化提供一个方向
2. 定位低效率的sql:
可以通过两种方法来定位低效率的sql
1) 慢查询日志,可以通过慢查询日志来定位到那些执行速度慢的sql语句,但是慢查询日志是在查询结束之后再记录,并不能实时反映sql语句执行的状态。
2) show processlist:通过这个命令可以实时的看到当前mysql在执行的线程,包括线程的执行状态,可以看到sql语句执行的状态
Id:用户登录时系统分配的连接id
User:显示当前登录用户,这个命令只显示当前登录用户权限范围内的sql语句
Host: 显示这个sql语句是由哪个ip的哪个端口发出的。
Db:显示这个进程连接的是哪个数据库
Command:显示当前连接执行的是什么命令,一般有休眠(Sleep),查询(Query),连接(Connection)等
Time:显示这个状态持续的时间,单位是秒
State:显示当前sql语句执行状态,比如查询语句可能经过如下状态:copying to tmp table、sorting result、sending data
Info:显示这个sql语句,通过它可以判断问题
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。