溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql中慢查詢?nèi)罩镜南嚓P(guān)參數(shù)

發(fā)布時(shí)間:2021-08-25 16:28:46 來(lái)源:億速云 閱讀:343 作者:chen 欄目:建站服務(wù)器

本篇內(nèi)容介紹了“mysql中慢查詢?nèi)罩镜南嚓P(guān)參數(shù)”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、 相關(guān)參數(shù):


? slow_query_log
 ? 是否開啟慢查詢?nèi)罩?/p>

? slow_query_log_file
 ? 慢查詢?nèi)罩疚募? 在 my.cnf 我們已經(jīng)定義為slow.log,默認(rèn)是 機(jī)器名 -slow.log

? long_query_time
 ? 制定慢查詢閾值, 單位是秒,且當(dāng)版本 >=5.5.X ,支持毫秒。例如 0.5 即為 500ms
 ? 大于 該值,不包括值本身。例如該值為2,則執(zhí)行時(shí)間正好 等于 2的SQL語(yǔ)句 不會(huì)記錄

? log_queries_not_using_indexes
 ? 將沒有使索引的SQL記錄到慢查詢?nèi)罩?br/>    ? 如果一開始因?yàn)閿?shù)據(jù)少,查表快,耗時(shí)的SQL語(yǔ)句沒被記錄,當(dāng)數(shù)據(jù)量大時(shí),該SQL可能會(huì)執(zhí)行很長(zhǎng)時(shí)間
    ? 需要測(cè)試階段就要發(fā)現(xiàn)問題,減小上線后出現(xiàn)問題的桜率

? log_throttle_queries_not_using_indexes
 ? 限制每分鐘內(nèi),在慢查詢?nèi)罩局?,去記錄沒有使用索引的SQL語(yǔ)句的次數(shù);版本需要 >=5.6.X
    ? 因?yàn)闆]有使用索引的SQL可能會(huì)短時(shí)間重復(fù)執(zhí)行,為了避免日志快速增大,限制每分鐘的記錄次數(shù)

? min_examined_row_limit
 ? 掃描記錄少于改值的SQL不記錄到慢查詢?nèi)罩?br/>    ? 結(jié)合去記錄沒有使用索引的SQL語(yǔ)句的例子,有可能存在某一個(gè)表,數(shù)據(jù)量維持在幾行左右,且沒有建立索引。這種表即使不建立索引,查詢也很快,掃描記錄很小,如果確定有這種表,則可以通過此參數(shù)設(shè)置,將這個(gè)SQL不記錄到慢查詢?nèi)罩尽?/p>

? log_slow_admin_statements
 ? 記錄超時(shí)的管理操作SQL到慢查詢?nèi)罩?,比如ALTER/ANALYZE TABLE

? log_output
 ? 慢查詢?nèi)罩镜臇袷剑琜FILE | TABLE | NONE],默認(rèn)是FILE;版本 >=5.5
 ? 如果設(shè)置為TABLE,則記錄的到 mysql.slow_log

? log_slow_slave_statements
 ? 在從服務(wù)器上開啟慢查詢?nèi)罩?/p>

? log_timestamps     5.7
 ? 寫入時(shí)區(qū)信息??筛鶕?jù)需求記錄UTC時(shí)間或者服務(wù)器本地系統(tǒng)時(shí)間

二、mysqldumpslow工具使用
  
  如果在線上操作,不需要 mysqldumpslow 去掃整個(gè) slow.log , 可以去 tail -n 10000 slow.log > last_10000_slow.log (10000 這個(gè)數(shù)字根據(jù)實(shí)際情況進(jìn)行調(diào)整 ),然后進(jìn)行 mysqldumpslow last_10000_slow.log


三、慢查詢?nèi)罩敬嫒氡?/p>

-- 在my.cnf 中增加 log_output = TABLE,打開slow_query_log選項(xiàng),然后重啟數(shù)據(jù)庫(kù)實(shí)例
--
mysql> show variables like "log_output%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | TABLE |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like "slow_query_log";
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | ON |
+----------------+-------+
1 row in set (0.00 sec)
mysql> select * from mysql.slow_log;
+----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
| start_time | user_host | query_time | lock_time | rows_sent | rows_examined | db | last_insert_id | insert_id | server_id | sql_text | thread_id |
+----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
| 2015-11-20 19:50:28.574677 | root[root] @ localhost [] | 00:00:04.000306 | 00:00:00.000000 | 1 | 0 | | 0 | 0 | 11 | select sleep(4) | 3 |
+----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
1 row in set (0.00 sec)
mysql> show create table mysql.slow_log;
--
-- 表結(jié)構(gòu)輸出省略
-- 關(guān)鍵一句如下:
--
ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' -- ENGINE=CSV 這里使用的是CSV的引擎,性能較差
-- 建議將slow_log表的存儲(chǔ)引擎改成MyISAM
mysql> alter table mysql.slow_log engine = myisam;
ERROR 1580 (HY000): You cannot 'ALTER' a log table if logging is enabled '-- 提示我正在記錄日志中,不能轉(zhuǎn)換
mysql> set global slow_query_log = 0; -- 先停止記錄日志
Query OK, 0 rows affected (0.01 sec)
mysql> alter table mysql.slow_log engine = myisam; -- 然后轉(zhuǎn)換表的引擎
Query OK, 2 rows affected (5.05 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> set global slow_query_log = 1; -- 再開啟記錄日志
Query OK, 0 rows affected (0.00 sec)
mysql> show create table mysql.slow_log;
--
-- 表結(jié)構(gòu)輸出省略
-- 關(guān)鍵一句如下:
--
ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Slow log' -- ENGINE 變成了MyISAM
使用 TABLE 的優(yōu)勢(shì)在于方便查詢,但是記住當(dāng)在備份的時(shí)候,不要備份慢查詢?nèi)罩镜谋?,避免備份過大。
使用 FILE 也可以,需要定時(shí)清除該文件,避免單文件過大。

“mysql中慢查詢?nèi)罩镜南嚓P(guān)參數(shù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)
AI