MySQL數據庫在查詢的時候會出現查詢結果很慢,超過1秒,項目中需要找出執行慢的sql進行優化,應該怎么找呢,mysql數據庫提供了一個很好的方法,如下:
mysql5.0以上的版本可以支持將執行比較慢的SQL語句記錄下來。
1.需要使用打開記錄查詢慢的sql記錄日志:
查看慢查詢時間 show variables like 'slow%'; 查看設置多久是慢查詢 show variables like 'long%'; 修改慢查詢時間 set long_query_time=1; 打開慢查詢記錄日志 set global slow_query_log='ON';

2.進入到log_file的目錄下即可查詢哪些sql執行慢了。
3.然后就是進行優化執行慢的sql,加索引、修改查詢方式等
4.另外比較有用的命令:
查看哪些線程正在運行 show full processlist 查看最大連接數 show variables like '%max_connections%'; 當前連接數 show status like 'Threads_connected%';
http://blog.csdn.net/lu_wei_wei/article/details/51242795
在使用mysql運行某些語句時,會因數據量太大而導致死鎖,沒有反映。這個時候,就需要kill掉某個正在消耗資源的query語句即可, KILL命令的語法格式如下:
KILL [CONNECTION | QUERY] thread_id
每個與mysqld的連接都在一個獨立的線程里運行,您可以使用SHOW PROCESSLIST語句查看哪些線程正在運行,並使用KILL thread_id語句終止一個線程。
KILL允許自選的CONNECTION或QUERY修改符:KILL CONNECTION與不含修改符的KILL一樣:它會終止與給定的thread_id有關的連接。KILL QUERY會終止連接當前正在執行的語句,但是會保持連接的原狀。
如果您擁有PROCESS權限,則您可以查看所有線程。如果您擁有超級管理員權限,您可以終止所有線程和語句。否則,您只能查看和終止您自己的線程和語句。您也可以使用mysqladmin processlist和mysqladmin kill命令來檢查和終止線程。
首先登錄mysql,然后使用:
show processlist;
查看當前mysql中各個線程狀態
mysql> show processlist; +------+------+----------------------+----------------+---------+-------+-----------+--------------------- | Id | User | Host | db | Command | Time | State | Info +------+------+----------------------+----------------+---------+-------+-----------+--------------------- | 7028 | root | ucap-devgroup:53396 | platform | Sleep | 19553 | | NULL | 8352 | root | ucap-devgroup:54794 | platform | Sleep | 4245 | | NULL | 8353 | root | ucap-devgroup:54795 | platform | Sleep | 3 | | NULL | 8358 | root | ucap-devgroup:62605 | platform | query | 4156 | updating | update t_shop set |
以上顯示出當前正在執行的sql語句列表,找到消耗資源最大的那條語句對應的id.
然后運行kill命令,命令格式如下:
kill id; - 示例: mysql>kill 8358; ERROR 1317 (70100): Query execution was interrupted
