mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
mysql中查询当前正在运行的SQL语句的方法如下:
进入mysql并执行
mysql>show processlist;
Id | User | Host | db | Command | Time | State | Info
+-------+------+-----------------+-------------+---------+------+--------------
+-------------------------------------------------------------------------------+
| 12 | user_169it | localhost:36506 | 169it | Sleep | 2 | | NULL
| 42 | user_169it | localhost:58020 | 169it | Sleep | 1927 | | NULL
| 43 | user_169it | localhost:58056 | local_169it | Sleep | 13 | | NULL
| 33827 | user_169it | localhost:45620 | mydb | Query | 32 | Sending data | select id,name from 169it.mytable where state=1 order by id desc limit 50
Sending data这一行则表示当前正在执行的mysql语句.
找出mysql中运行慢的sql语句的方法:
启动Mysql时加参数--log-slow-queries来记录执行时间超过long_query_time秒的sql。
MySQL 自带 slow log 的分析工具 mysqldumpslow。
slow log 是 MySQL 根据 SQL 语句的执行时间设定,写入的一个文件,用于分析执行较慢的语句。
只要在 my.cnf 文件中配置好:
log-slow-queries = [slow_query_log_filename]
即可记录超过默认的 10s 执行时间的 SQL 语句。
如果要修改默认设置,可以添加:
long_query_time = 5
设定为 5s .
explain来了解SQL执行的状态。
explain select * from wp_postsG;
另外进入mysql并执行status可以查看当前系统中所有mysql语句的执行情况。
mysql>status;
mysql Ver 14.14 Distrib 5.5.15, for Linux (i686) using readline 5.1
Connection id: 37542
Current database:
Current user: root@user_169it
SSL: in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.5.32-log MySQL Community Server (GPL)
Protocol version: 11
Connection: Localhost via TCP socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql.sock
Uptime: 32 days 15 min 58 sec
Threads: 22 Questions: 37328 Slow queries: 111 Opens: 120 Flush tables: 1 Open tables: 76 Queries per second avg: 7.208