国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

Mysql效率優(yōu)化定位較低sql的兩種方式

2024-07-24 13:08:03
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

通過(guò)慢查詢?nèi)罩径ㄎ荒切﹫?zhí)行效率較低的 SQL 語(yǔ)句,用 --log-slow-queries[=file_name] 選項(xiàng)啟動(dòng)時(shí), mysqld 會(huì) 寫一個(gè)包含所有執(zhí)行時(shí)間超過(guò) long_query_time 秒的 SQL 語(yǔ)句的日志文件,通過(guò)查看這個(gè)日志文件定位效率較低的 SQL

關(guān)于mysql效率優(yōu)化一般通過(guò)以下兩種方式定位執(zhí)行效率較低的sql語(yǔ)句。

通過(guò)慢查詢?nèi)罩径ㄎ荒切﹫?zhí)行效率較低的 SQL 語(yǔ)句,用 --log-slow-queries[=file_name] 選項(xiàng)啟動(dòng)時(shí), mysqld 會(huì) 寫一個(gè)包含所有執(zhí)行時(shí)間超過(guò) long_query_time 秒的 SQL 語(yǔ)句的日志文件,通過(guò)查看這個(gè)日志文件定位效率較低的 SQL 。

慢查詢?nèi)罩驹诓樵兘Y(jié)束以后才紀(jì)錄,所以在應(yīng)用反映執(zhí)行效率出現(xiàn)問(wèn)題的時(shí)候查詢慢查詢?nèi)罩静⒉荒芏ㄎ粏?wèn)題,可以使用 show processlist 命令查看當(dāng)前 MySQL 在進(jìn)行的線程,包括線程的狀態(tài)、是否鎖表等,可以實(shí)時(shí)地查看 SQL 的 執(zhí)行情況,同時(shí)對(duì)一些鎖表操作進(jìn)行優(yōu)化。

下面我們舉例說(shuō)明一下,如何通過(guò)慢查詢?nèi)罩径ㄎ粓?zhí)行效率底的 SQL 語(yǔ)句:

開(kāi)啟慢查詢?nèi)罩?, 配置樣例:

log-slow-queries

在 my.cnf 配置文件中增加上述配置項(xiàng)并重啟 mysql 服務(wù),這時(shí) mysql 慢查詢功能生效。慢查詢 日志將寫入?yún)?shù) DATADIR (數(shù)據(jù)目錄)指定的路徑下,默認(rèn)文件名是 host_name-slow.log 。

和錯(cuò)誤日志、查詢?nèi)罩疽粯樱樵內(nèi)罩居涗浀母袷揭彩羌兾谋荆梢员恢苯幼x取。下例中演示了慢查詢?nèi)罩镜脑O(shè)置和讀取過(guò)程。

( 1 )首先查詢一下 long_query_time 的值 。

 

 
  1. mysql> show variables like 'long%'
  2. +-----------------+-------+ 
  3. | Variable_name | Value | 
  4. +-----------------+-------+ 
  5. | long_query_time | 10 | 
  6. +-----------------+-------+ 
  7. 1 row in set (0.00 sec) 

( 2 )為了方便測(cè)試,將修改慢查詢時(shí)間為 5 秒。

mysql> set long_query_time=5;

Query OK, 0 rows affected (0.02 sec)

( 3 )依次執(zhí)行下面兩個(gè)查詢語(yǔ)句。

第一個(gè)查詢因?yàn)椴樵儠r(shí)間低于 5 秒而不會(huì)出現(xiàn)在慢查詢?nèi)罩局校?/p>

 

 
  1. mysql> select count(*) from order2008; 
  2. +----------+ 
  3. | count(*) | 
  4. +----------+ 
  5. | 208 | 
  6. +----------+ 
  7. 1 row in set (0.00 sec) 

第二個(gè)查詢因?yàn)椴樵儠r(shí)間大于 5 秒而應(yīng)該出現(xiàn)在慢查詢?nèi)罩局校?/p>

 

 
  1. mysql> select count(*) from t_user; 
  2. +----------+ 
  3. | count(*) | 
  4. +----------+ 
  5. | 6552961 | 
  6. +----------+ 
  7. 1 row in set (11.07 sec) 

( 4 )查看慢查詢?nèi)罩尽?/p>

 

 
  1. [root@localhost mysql]# more localhost-slow.log 
  2. # Time: 081026 19:46:34 
  3. # User@Host: root[root] @ localhost [] 
  4. # Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961 
  5. select count(*) from t_user; 

從上面日志中,可以發(fā)現(xiàn)查詢時(shí)間超過(guò) 5 秒的 SQL ,而小于 5 秒的則沒(méi)有出現(xiàn)在此日志中。

如果慢查詢?nèi)罩局杏涗泝?nèi)容很多,可以使用 mysqldumpslow 工具( MySQL 客戶端安裝自帶)來(lái)對(duì)慢查詢?nèi)罩具M(jìn)行分類匯總。下例中對(duì)日志文件 mysql_master-slow.log 進(jìn)行了分類匯總,只顯示匯總后摘要結(jié)果:

 

 
  1. [root@mysql_master mysql_data]# mysqldumpslow mysql_master-slow.log 
  2. Reading mysql slow query log from mysql_master-slow.log 
  3. Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@mysql_master 
  4. select count(N) from t_user; 

對(duì)于 SQL 文本完全一致,只是變量不同的語(yǔ)句, mysqldumpslow 將會(huì)自動(dòng)視為同一個(gè)語(yǔ)句進(jìn)行統(tǒng)計(jì),變量值用 N 來(lái)代替。這個(gè)統(tǒng)計(jì)結(jié)果將大大增加用戶閱讀慢查詢?nèi)罩镜男剩⒀杆俣ㄎ幌到y(tǒng)的 SQL 瓶頸。

注意:慢查詢?nèi)罩緦?duì)于我們發(fā)現(xiàn)應(yīng)用中有性能問(wèn)題的 SQL 很有幫助,建議正常情況下,打開(kāi)此日志并經(jīng)常查看分析。

以上是給大家介紹的Mysql效率優(yōu)化定位較低sql的兩種方式 ,希望以上所述對(duì)大家有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 万年县| 土默特右旗| 宜昌市| 桃江县| 昌宁县| 德昌县| 虹口区| 克什克腾旗| 神木县| 博白县| 嘉义县| 河间市| 南京市| 长治市| 沈阳市| 蒙山县| 江西省| 鞍山市| 敦煌市| 连州市| 古浪县| 安徽省| 冕宁县| 奎屯市| 平南县| 湖南省| 榕江县| 循化| 呼和浩特市| 连南| 额尔古纳市| 聊城市| 西畴县| 凌云县| 龙海市| 紫云| 富川| 紫阳县| 彝良县| 嘉峪关市| 金寨县|