Mysql效率優(yōu)化定位較低sql的兩種方式
關(guān)于mysql效率優(yōu)化一般通過以下兩種方式定位執(zhí)行效率較低的sql語句。
通過慢查詢?nèi)罩径ㄎ荒切﹫?zhí)行效率較低的 SQL 語句,用 --log-slow-queries[=file_name] 選項啟動時, mysqld 會 寫一個包含所有執(zhí)行時間超過 long_query_time 秒的 SQL 語句的日志文件,通過查看這個日志文件定位效率較低的 SQL 。
慢查詢?nèi)罩驹诓樵兘Y(jié)束以后才紀(jì)錄,所以在應(yīng)用反映執(zhí)行效率出現(xiàn)問題的時候查詢慢查詢?nèi)罩静⒉荒芏ㄎ粏栴},可以使用 show processlist 命令查看當(dāng)前 MySQL 在進行的線程,包括線程的狀態(tài)、是否鎖表等,可以實時地查看 SQL 的 執(zhí)行情況,同時對一些鎖表操作進行優(yōu)化。
下面我們舉例說明一下,如何通過慢查詢?nèi)罩径ㄎ粓?zhí)行效率底的 SQL 語句:
開啟慢查詢?nèi)罩?, 配置樣例:
log-slow-queries
在 my.cnf 配置文件中增加上述配置項并重啟 mysql 服務(wù),這時 mysql 慢查詢功能生效。慢查詢 日志將寫入?yún)?shù) DATADIR (數(shù)據(jù)目錄)指定的路徑下,默認(rèn)文件名是 host_name-slow.log 。
和錯誤日志、查詢?nèi)罩疽粯?,慢查詢?nèi)罩居涗浀母袷揭彩羌兾谋荆梢员恢苯幼x取。下例中演示了慢查詢?nèi)罩镜脑O(shè)置和讀取過程。
( 1 )首先查詢一下 long_query_time 的值 。
mysql> show variables like 'long%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | long_query_time | 10 | +-----------------+-------+ 1 row in set (0.00 sec)
( 2 )為了方便測試,將修改慢查詢時間為 5 秒。
mysql> set long_query_time=5;
Query OK, 0 rows affected (0.02 sec)
( 3 )依次執(zhí)行下面兩個查詢語句。
第一個查詢因為查詢時間低于 5 秒而不會出現(xiàn)在慢查詢?nèi)罩局校?br />
mysql> select count(*) from order2008; +----------+ | count(*) | +----------+ | 208 | +----------+ 1 row in set (0.00 sec)
第二個查詢因為查詢時間大于 5 秒而應(yīng)該出現(xiàn)在慢查詢?nèi)罩局校?br />
mysql> select count(*) from t_user; +----------+ | count(*) | +----------+ | 6552961 | +----------+ 1 row in set (11.07 sec)
( 4 )查看慢查詢?nèi)罩尽?br />
[root@localhost mysql]# more localhost-slow.log # Time: 081026 19:46:34 # User@Host: root[root] @ localhost [] # Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961 select count(*) from t_user;
從上面日志中,可以發(fā)現(xiàn)查詢時間超過 5 秒的 SQL ,而小于 5 秒的則沒有出現(xiàn)在此日志中。
如果慢查詢?nèi)罩局杏涗泝?nèi)容很多,可以使用 mysqldumpslow 工具( MySQL 客戶端安裝自帶)來對慢查詢?nèi)罩具M行分類匯總。下例中對日志文件 mysql_master-slow.log 進行了分類匯總,只顯示匯總后摘要結(jié)果:
[root@mysql_master mysql_data]# mysqldumpslow mysql_master-slow.log Reading mysql slow query log from mysql_master-slow.log Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@mysql_master select count(N) from t_user;
對于 SQL 文本完全一致,只是變量不同的語句, mysqldumpslow 將會自動視為同一個語句進行統(tǒng)計,變量值用 N 來代替。這個統(tǒng)計結(jié)果將大大增加用戶閱讀慢查詢?nèi)罩镜男?,并迅速定位系統(tǒng)的 SQL 瓶頸。
注意:慢查詢?nèi)罩緦τ谖覀儼l(fā)現(xiàn)應(yīng)用中有性能問題的 SQL 很有幫助,建議正常情況下,打開此日志并經(jīng)常查看分析。
以上是給大家介紹的Mysql效率優(yōu)化定位較低sql的兩種方式 ,希望以上所述對大家有所幫助。
相關(guān)文章
MYSQL同步 Slave_IO_Running: No 或者Slave_SQL_Running: No的解決方法[已測
為了服務(wù)器更好的安全特將mysql服務(wù)器同步一下,show slave status\G出現(xiàn)了Slave_IO_Running: No 錯誤,特整理了下,方便以后配置2011-06-06MySQL數(shù)據(jù)查看SELECT條件大于?小于(小白入門篇)
這篇文章主要為大家介紹了MySQL數(shù)據(jù)查看SELECT條件大于和小于的語句學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05MySQL實現(xiàn)批量插入測試數(shù)據(jù)的方式小結(jié)
在開發(fā)過程中我們不管是用來測試性能還是在生產(chǎn)環(huán)境中頁面展示好看一點,?經(jīng)常需要一些測試數(shù)據(jù),?本文主要介紹了兩種常用的MySQL測試數(shù)據(jù)批量生成方式,希望對大家有所幫助2023-11-11MySQL數(shù)據(jù)庫表的合并與分區(qū)實現(xiàn)介紹
今天我們來聊聊處理大數(shù)據(jù)時Mysql的存儲優(yōu)化。當(dāng)數(shù)據(jù)達到一定量時,一般的存儲方式就無法解決高并發(fā)問題了。最直接的MySQL優(yōu)化就是分區(qū)分表,以下是我個人對分區(qū)分表的筆記2022-09-09Linux下安裝mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz
這篇文章主要介紹了Linux下安裝mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09在一臺服務(wù)器上安裝兩個或多個mysql的實現(xiàn)步驟
這篇文章給大家介紹如何在一臺服務(wù)器上安裝兩個或多個mysql的實現(xiàn)步驟,有需要的朋友們可以參考學(xué)習(xí),下面跟著小編一起來看看吧。2016-09-09MySQL如何導(dǎo)入csv格式數(shù)據(jù)文件解決方案
本文將詳細介紹MySQL如何導(dǎo)入csv格式數(shù)據(jù)文件并提供詳細解決方案,需要了解的朋友可以參考下2012-11-11