# 慢查询

慢查询是指那些执行时间超过特定阈值的SQL查询语句。这个阈值是通过MySQL的配置参数long_query_time来设定的,单位是秒。当某个查询的执行时间超过了这个阈值,MySQL就会将这个查询记录到慢查询日志中。

常规的 my.cnf 配置内容如下:

[client]
#password	= your_password
port		= 3306
socket		= /tmp/mysql.sock

[mysqld]
port		= 3306
socket		= /tmp/mysql.sock
datadir = /www/server/data
default_storage_engine = InnoDB
performance_schema_max_table_instances = 400
table_definition_cache = 400
skip-external-locking
key_buffer_size = 128M
max_allowed_packet = 100G
table_open_cache = 512
sort_buffer_size = 2M
net_buffer_length = 4K
read_buffer_size = 2M
read_rnd_buffer_size = 256K
myisam_sort_buffer_size = 32M
thread_cache_size = 64
query_cache_size = 64M
tmp_table_size = 64M
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

explicit_defaults_for_timestamp = true
#skip-name-resolve
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

log-bin=mysql-bin
binlog_format=mixed
server-id = 1
expire_logs_days = 10
slow_query_log=1
slow-query-log-file=/www/server/data/mysql-slow.log
long_query_time=3
#log_queries_not_using_indexes=on
early-plugin-load = ""


innodb_data_home_dir = /www/server/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /www/server/data
innodb_buffer_pool_size = 512M
innodb_log_file_size = 256M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_max_dirty_pages_pct = 90
innodb_read_io_threads = 2
innodb_write_io_threads = 2

[mysqldump]
quick
max_allowed_packet = 500M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 2M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

# 慢查询日志的作用

1、识别出执行时间长的查询语句

2、分析查询语句的执行计划,找出性能瓶颈

3、针对性能瓶颈进行优化,如添加索引,优化查询语句结构等。

# 如何开启慢查询日志

# 临时开启

通过 mysql 命令行或者客户端,执行 SQL 命令来开启慢查询日志,并设置相关参数。

set global slow_query_log = 'ON';

# 设置阈值为 2 秒
set global long_query_time = 2;

# 设置慢查询日志文件的路径
set global slow_query_log_file = '/path/to/your/slow-query.log';

# 永久开启

修改 mysql 的配置文件 /etx/my.cnf,在[mysqld]部分添加或修改相关配置选项,然后重启mysql服务。

[mysqld]
slow_query_log=1
slow-query-log-file=/path/to/your/slow-query.log
long_query_time=2