欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

通過MySQL慢查詢優(yōu)化MySQL性能的方法講解

 更新時間:2019年03月20日 10:04:01   作者:CODETC  
今天小編就為大家分享一篇關(guān)于通過MySQL慢查詢優(yōu)化MySQL性能的方法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

隨著訪問量的上升,MySQL數(shù)據(jù)庫的壓力就越大,幾乎大部分使用MySQL架構(gòu)的web應(yīng)用在數(shù)據(jù)庫上都會出現(xiàn)性能問題,通過mysql慢查詢?nèi)罩靖櫽袉栴}的查詢非常有用,可以分析出當(dāng)前程序里有很耗費資源的sql語句。

慢查詢?nèi)罩疚覀兛梢酝ㄟ^my.cnf文件設(shè)置開啟,下面先來看一下相關(guān)參數(shù)的意義

log-slow-queries <slow_query_log_file>

存放slow query日志的文件。你必須保證mysql server進(jìn)程mysqld_safe進(jìn)程用戶對該文件有w權(quán)限。

long_query_time

如果query time超過了該值,則認(rèn)為是較慢查詢,并被記錄下來。單位是秒,最小值是1,默認(rèn)值是10秒。10秒對于大多數(shù)應(yīng)用來講,太長了。我們推薦從3秒開始, 依次減少,每次都找出最”昂貴”的10條SQL語句并且優(yōu)化他們。日復(fù)一日,一步一步優(yōu)化。一次性找出很多條SQL語句,對于優(yōu)化來講,意義并不大。

log-queries-not-using-indexes

MySQL會將沒有使用索引的查詢記錄到slow query日志中。無論它執(zhí)行有多快,查詢語句沒有使用索引,都會被記錄。有的時候,有些沒有使用引索的查詢非常快(例如掃描很小的表),但也有可能導(dǎo)致服務(wù)器變慢,甚至還會使用大量的磁盤空間。

log-slow-admin-statements

一些管理指令,也會被記錄。比如OPTIMEZE TABLE, ALTER TABLE等等。

開啟慢查詢

方法一:在服務(wù)器上找到mysql的配置文件my.cnf , 然后再mysqld模塊里追加一下內(nèi)容

log_slow_queries = NO
log-slow-queries = /var/run/mysqld/slow_querys.log 
long_query_time = 3 
log-queries-not-using-indexes 
log-slow-admin-statements

然后重啟mysql服務(wù)器即可,這是通過一下命令看一下慢查詢?nèi)罩镜那闆r:

tail -f /var/run/mysqld/slow_querys.log

方法二:通過修改myssql的全局變量來處理,這樣做的好處是,不用重啟mysql服務(wù)器,登陸到mysql上執(zhí)行一下sql腳本即可

set global slow_query_log=ON;

set global long_query_time=3;

然后通過一下命令查看是否成功

mysql> show variables like 'long%';
+-----------------+-----------+
| Variable_name | Value   |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

mysql> show variables like 'slow%';
+---------------------+---------------+
| Variable_name   | Value     |
+---------------------+---------------+
| slow_launch_time  | 2       |
| slow_query_log   | ON      |
| slow_query_log_file | /tmp/slow.log |
+---------------------+---------------+
3 rows in set (0.00 sec)

分析慢查詢?nèi)罩?/strong>

方法一:通過查看mysql的慢查詢?nèi)罩痉治?,比如我們可以tail -f slow_query.log查看里面的內(nèi)容,字段意義

# Time: 110107 16:22:11 
# User@Host: root[root] @ localhost [] 
# Query_time: 9.869362 Lock_time: 0.000035 Rows_sent: 1 Rows_examined: 6261774 
SET timestamp=1294388531; 
select count(*) from ep_friends; 
  • 第一行,SQL查詢執(zhí)行的時間
  • 第二行,執(zhí)行SQL查詢的連接信息
  • 第三行記錄了一些我們比較有用的信息
  • Query_time SQL執(zhí)行的時間,越長則越慢
  • Lock_time 在MySQL服務(wù)器階段(不是在存儲引擎階段)等待表鎖時間
  • Rows_sent 查詢返回的行數(shù)
  • Rows_examined 查詢檢查的行數(shù)

方法二:使用mysqldumpslow命令分析,例如

mysqldumpslow -s c -t 10 /tmp/slow-log

這會輸出記錄次數(shù)最多的10條SQL語句,其中:

-s, 是表示按照何種方式排序,c、t、l、r分別是按照記錄次數(shù)、時間、查詢時間、返回的記錄數(shù)來排序,ac、at、al、ar,表示相應(yīng)的倒敘; -t, 是top n的意思,即為返回前面多少條的數(shù)據(jù); -g, 后邊可以寫一個正則匹配模式,大小寫不敏感的;

比如

/path/mysqldumpslow -s r -t 10 /tmp/slow-log

得到返回記錄集最多的10個查詢。

/path/mysqldumpslow -s t -t 10 -g “l(fā)eft join” /tmp/slow-log

得到按照時間排序的前10條里面含有左連接的查詢語句。

慢查詢?nèi)罩镜牟蛔?/strong>

雖然記錄了slow query能夠幫助你優(yōu)化產(chǎn)品。但是MySQL目前版本,還有幾大蹩足的地方。

1.MySQL5.0版本, long_query_time時間粒度不夠細(xì),最小值為1秒。對于高并發(fā)性能的網(wǎng)頁腳本而言,1秒出現(xiàn)的意義不大。即出現(xiàn)1秒的查詢比較少。直到mysql5.1.21才提供更細(xì)粒度的long_query_time設(shè)定.

2.不能將服務(wù)器執(zhí)行的所有查詢記錄到慢速日志中。雖然MySQL普通日志記錄了所有查詢,但是它們是解析查詢之前就記錄下來了。這意味著普通日志沒辦法包含諸如執(zhí)行時間,鎖表時間,檢查行數(shù)等信息。

3.如果開啟了log_queries_not_using_indexes選項,slow query日志會充滿過多的垃圾日志記錄,這些快且高效的全表掃描查詢(表小)會沖掉真正有用的slow queries記錄。比如select * from category這樣的查詢也會被記錄下來。開啟了log_queries_not_using_indexes選項,slow query日志會充滿過多的垃圾日志記錄,這些快且高效的全表掃描查詢(表小)會沖掉真正有用的slow queries記錄。比如select * from category這樣的查詢也會被記錄下來。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • MySQL主鍵索引和非主鍵索引的實現(xiàn)

    MySQL主鍵索引和非主鍵索引的實現(xiàn)

    本文主要介紹了MySQL主鍵索引和非主鍵索引的實現(xiàn),文中詳細(xì)的介紹了主鍵索引和非主鍵索引有不同的作用和特點,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • MySQL分表自增ID問題的解決方法

    MySQL分表自增ID問題的解決方法

    這篇文章主要為大家詳細(xì)介紹了MySQL分表自增ID問題的解決方法,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Mysql ERROR 1577錯誤解決方法

    Mysql ERROR 1577錯誤解決方法

    這篇文章主要介紹了Mysql ERROR 1577錯誤解決方法,一般是在升級mysql后會發(fā)生這個錯誤,錯誤原因是需要升級MySQL系統(tǒng)表,需要的朋友可以參考下
    2014-08-08
  • 詳解MySQL存儲過程的創(chuàng)建和調(diào)用

    詳解MySQL存儲過程的創(chuàng)建和調(diào)用

    這篇文章主要為大家介紹了MySQL存儲過程的創(chuàng)建和調(diào)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 一文說透什么是MySQL的預(yù)編譯

    一文說透什么是MySQL的預(yù)編譯

    這篇文章主要介紹了一文說透什么是MySQL的預(yù)編譯,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • CentOS6.9+Mysql5.7.18源碼安裝詳細(xì)教程

    CentOS6.9+Mysql5.7.18源碼安裝詳細(xì)教程

    CentOS6.9+Mysql5.7.18源碼安裝,以下操作均在root用戶下執(zhí)行。下面通過本教程給大家詳細(xì)介紹CentOS6.9+Mysql5.7.18源碼安裝方法,需要的的朋友參考下吧
    2017-06-06
  • MySQL可重復(fù)讀隔離級別下開啟事務(wù)的問題解決

    MySQL可重復(fù)讀隔離級別下開啟事務(wù)的問題解決

    本文主要介紹了MySQL可重復(fù)讀隔離級別下開啟事務(wù)的問題解決,詳解在Repeatable?Read隔離級別下,mysql的快照生成時機(jī)的問題,感興趣的可以了解一下
    2024-07-07
  • Windows?本地安裝?Mysql8.0圖文教程

    Windows?本地安裝?Mysql8.0圖文教程

    本文介紹了如何在Windows本地安裝Mysql8.0。從下載Mysql8.0安裝包,運行安裝程序,配置初始設(shè)置到啟動Mysql服務(wù)等詳細(xì)步驟進(jìn)行了講解。
    2023-04-04
  • Mysql關(guān)于進(jìn)程中的死鎖和解除鎖問題

    Mysql關(guān)于進(jìn)程中的死鎖和解除鎖問題

    Mysql 經(jīng)常會遇到語句或者存儲過程長時間沒有反應(yīng),大概率就是掛掉了,或者死鎖了,這篇文章主要介紹了Mysql關(guān)于進(jìn)程中的死鎖和解除鎖問題,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • MySQL 替換某字段內(nèi)部分內(nèi)容的UPDATE語句

    MySQL 替換某字段內(nèi)部分內(nèi)容的UPDATE語句

    至于字段內(nèi)部分內(nèi)容:比如替換標(biāo)題里面的產(chǎn)品價格,接下來為你詳細(xì)介紹下UPDATE語句的寫法,感興趣的你可以參考下哈,希望可以幫助到你
    2013-03-03

最新評論