MySQL 中的 slow_log 表多久更新一次?
我已將
long_query_time
10 秒更改為 5 秒。我已經有幾個小時沒有看到任何查詢記錄了。我是否應該調整我的數據庫以使 slow_log 表更頻繁地更新?有超過 10 秒的慢查詢,我已經處理過了。但是,根據
tools.pingdom.com
.更新:
我剛剛將其更改
long_query_time
為 1 秒,但我還沒有看到記錄任何慢查詢。有沒有可能我現在沒有執行時間超過 1 秒的查詢(這似乎好得令人難以置信,不是嗎?)?我現在看到查詢時間超過 1 秒,所以對我來說一切正常 - 我看到了我需要查看的慢查詢。
我如何將慢查詢記錄在 mysql 數據庫的 slow_log 表中? 我使用的是 Amazon RDS MySQL,所以一旦我更改
slow_query_log
為 1,慢查詢就會出現在 slow_log 表中。
一旦查詢完成並且查詢時間超過或等於設置的值,慢查詢日誌就會更新
long_query_time
。所以它可能意味著好或壞。好處是所有查詢都在
long_query_time
. 不好的是慢查詢仍在執行。要體驗慢查詢,您可以嘗試具有多個級別的子查詢。
預設情況下,慢查詢不會記錄在任何地方。
有三 (3) 種方式來啟動慢查詢日誌
啟動#1:文本文件
要將慢查詢記錄到文本文件中,請將以下內容添加到
/etc/my.cnf
[mysqld] long-query-time=5 log-output=FILE slow-query-log slow-query-log-file=/var/log/mysql-slow-queries.log
啟動 #2:CSV 表 (
mysql.slow_log
)要將慢查詢記錄到
mysql.slow_log
,請將以下內容添加到/etc/my.cnf
[mysqld] long-query-time=5 log-output=TABLE slow-query-log
啟動#3:兩種方法(文本文件和表格)
[mysqld] long-query-time=5 log-output=FILE,TABLE slow-query-log slow-query-log-file=/var/log/mysql-slow-queries.log
概括
編輯 /etc/my.cnf(或 Windows 的 my.ini)後,必須重新啟動 mysql
- 對於 Linux,
service mysql restart
- 對於 Windows
net stop mysql
net start mysql
如果您想在 mysql 重啟後測試慢日誌,只需執行以下命令:
SELECT SLEEP(12);
如果long-query-time >= 12,則該語句應該登陸慢日誌。
以下是上述方法中使用的變數
- long-query-time(將此設置為 0,以便所有內容及其祖母都進入慢查詢日誌)
- 日誌輸出
- 慢查詢日誌
- 慢查詢日誌文件
有關慢查詢日誌的更多資訊,請閱讀 MySQL 文件
警告
如果您決定使用
mysql.slow_log
,請記住預設mysql.slow_log
為 CSV 表。您可以查詢mysql.slow_log
,但該表沒有索引。Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.29 MySQL Community Server (GPL) Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show create table mysql.slow_log\G *************************** 1. row *************************** Table: slow_log Create Table: CREATE TABLE `slow_log` ( `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `user_host` mediumtext NOT NULL, `query_time` time NOT NULL, `lock_time` time NOT NULL, `rows_sent` int(11) NOT NULL, `rows_examined` int(11) NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' 1 row in set (0.05 sec) mysql>
如果您希望慢日誌成為 MyISAM,以便您可以像查詢任何其他表一樣查詢它,請執行以下命令:
ALTER TABLE mysql.slow_log ENGINE = MyISAM; ALTER TABLE mysql.slow_log ADD INDEX (start_time);
以下是您之後應該看到的內容:
mysql> ALTER TABLE mysql.slow_log ENGINE = MyISAM; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE mysql.slow_log ADD INDEX (start_time); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table mysql.slow_log\G *************************** 1. row *************************** Table: slow_log Create Table: CREATE TABLE `slow_log` ( `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `user_host` mediumtext NOT NULL, `query_time` time NOT NULL, `lock_time` time NOT NULL, `rows_sent` int(11) NOT NULL, `rows_examined` int(11) NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int(11) NOT NULL, `insert_id` int(11) NOT NULL, `server_id` int(10) unsigned NOT NULL, `sql_text` mediumtext NOT NULL, KEY `start_time` (`start_time`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Slow log' 1 row in set (0.00 sec) mysql>
您可以閱讀我過去的答案:
Nov 18, 2011
:在 MySQL 中創建自定義日誌表Mar 30, 2012
: MySQL慢日誌配置