Mysql

MySQL 中的 slow_log 表多久更新一次?

  • January 27, 2021

我已將long_query_time10 秒更改為 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,則該語句應該登陸慢日誌。

以下是上述方法中使用的變數

有關慢查詢日誌的更多資訊,請閱讀 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>

您可以閱讀我過去的答案:

引用自:https://dba.stackexchange.com/questions/33325