Mysql慢查询使用与参数详解

慢查询为系统中查询时间超过long_query_time的值,分析慢查询是优化SQL的基础,默认清下Mysql慢查询为关闭状态,可以通过

show variables where Variable_name = 'log_slow_queries';

来查看是否开启,如果为OFF则需要修改mysql配置文件,在mysqld下面增加以下参数

#慢查询日志地址,需要mysql运行帐号对该目录有写权限
log-slow-queries="/log/slow.log"
#当query语句大于2s时记录慢查询日志
long_query_time=2
#没有使用索引的query也计入慢查询日志(可根据情况增加)
log-queries-not-using-indexes

慢查询分析

可以使用mysql自带的mysqldumpslow来进行分析,该命令可带3个参数
-s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙;
-t, 是top n的意思,即为返回前面多少条的数据;
-g, 后边可以写一个正则匹配模式,大小写不敏感的;
比如 按照时间返回前10条里面含有左连接的sql语句

mysqldumpslow -s t -t 10 -g "left join" /alidata/log/mysql/slow.log

mysql运行状态和变量查看

通过查看mysql的status和variables来优化mysql

1、慢查询配置,未打开的情况下建议打开,可发现系统中的慢查询语句以及慢查询的条数

mysql> show variables like '%slow%';
+---------------------+-----------------------------+
| Variable_name       | Value                       |
+---------------------+-----------------------------+
| log_slow_queries    | ON                          |
| slow_launch_time    | 2                           |
| slow_query_log      | ON                          |
| slow_query_log_file | /alidata/log/mysql/slow.log |
+---------------------+-----------------------------+
4 rows in set (0.00 sec)
mysql> show global status like '%slow%';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| Slow_launch_threads | 4     |
| Slow_queries        | 3     |
+---------------------+-------+
2 rows in set (0.00 sec)

2、连接数查看,max_connections为允许的最大连接数,Max_used_connections 系统中出现过的最大连接数,据说理想的设置是

Max_used_connections / max_connections * 100% ≈ 85%
mysql> show variables like '%connections%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| max_connections      | 2000  |
| max_user_connections | 0     |
+----------------------+-------+
2 rows in set (0.00 sec)
mysql> show global status like '%connections%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Connections          | 35049 |
| Max_used_connections | 12    |
+----------------------+-------+
2 rows in set (0.00 sec)

分析日志 ? mysqldumpslow

分析日志,可用mysql提供的mysqldumpslow,使用很简单,参数可?help查看

# -s:排序方式。c , t , l , r 表示记录次数、时间、查询时间的多少、返回的记录数排序;
#                             ac , at , al , ar 表示相应的倒叙;
# -t:返回前面多少条的数据;
# -g:包含什么,大小写不敏感的;
mysqldumpslow -s r -t 10  /slowquery.log     #slow记录最多的10个语句
mysqldumpslow -s t -t 10 -g "left join"  /slowquery.log     #按照时间排序前10中含有"left join"的
推荐用分析日志工具 ? mysqlsla
wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz
tar zvxf mysqlsla-2.03.tar.gz
cd mysqlsla-2.03
perl Makefile.PL
make
make install
mysqlsla /data/mysqldata/slow.log
# mysqlsla会自动判断日志类型,为了方便可以建立一个配置文件“~/.mysqlsla”
# 在文件里写上:top=100,这样会打印出前100条结果。

【说明】
queries total: 总查询次数 unique:去重后的sql数量
sorted by : 输出报表的内容排序
最重大的慢sql统计信息, 包括 平均执行时间, 等待锁时间, 结果行的总数, 扫描的行总数.
Count, sql的执行次数及占总的slow log数量的百分比.
Time, 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比.
95% of Time, 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间.
Lock Time, 等待锁的时间.
95% of Lock , 95%的慢sql等待锁时间.
Rows sent, 结果行统计数量, 包括平均, 最小, 最大数量.
Rows examined, 扫描的行数量.
Database, 属于哪个数据库
Users, 哪个用户,IP, 占到所有用户执行的sql百分比
Query abstract, 抽象后的sql语句
Query sample, sql语句

 

show status中文详解 Mark

状态名 作用域 详细解释
Aborted_clients Global 由于客户端没有正确关闭连接导致客户端终止而中断的连接数
Aborted_connects Global 试图连接到MySQL服务器而失败的连接数
Binlog_cache_disk_use Global 使用临时二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量
Binlog_cache_use Global 使用临时二进制日志缓存的事务数量
Bytes_received Both 从所有客户端接收到的字节数。
Bytes_sent Both 发送给所有客户端的字节数。
com* 各种数据库操作的数量
Compression Session 客户端与服务器之间只否启用压缩协议
Connections Global 试图连接到(不管是否成功)MySQL服务器的连接数
Created_tmp_disk_tables Both 服务器执行语句时在硬盘上自动创建的临时表的数量
Created_tmp_files Global mysqld已经创建的临时文件的数量
Created_tmp_tables Both 服务器执行语句时自动创建的内存中的临时表的数量。如果Created_tmp_disk_tables较大,你可能要增加tmp_table_size值使临时 表基于内存而不基于硬盘
Delayed_errors Global 用INSERT DELAYED写的出现错误的行数(可能为duplicate key)。
Delayed_insert_threads Global 使用的INSERT DELAYED处理器线程数。
Delayed_writes Global 写入的INSERT DELAYED行数
Flush_commands Global 执行的FLUSH语句数。
Handler_commit Both 内部提交语句数
Handler_delete Both 行从表中删除的次数。
Handler_discover Both MySQL服务器可以问NDB
CLUSTER存储引擎是否知道某一名字的表。这被称作发现。Handler_discover说明通过该方法发现的次数。
Handler_prepare Both A counter for the prepare phase of two-phase commitoperations.
Handler_read_first Both 索引中第一条被读的次数。如果较高,它建议服务器正执行大量全索引扫描;例如,SELECT col1 FROM
foo,假定col1有索引。
Handler_read_key Both 根据键读一行的请求数。如果较高,说明查询和表的索引正确。
Handler_read_next Both 按照键顺序读下一行的请求数。如果你用范围约束或如果执行索引扫描来查询索引列,该值增加。
Handler_read_prev Both 按照键顺序读前一行的请求数。该读方法主要用于优化ORDER BY ... DESC。
Handler_read_rnd Both 根据固定位置读一行的请求数。如果你正执行大量查询并需要对结果进行排序该值较高。你可能使用了大量需要MySQL扫描整个表的查询或你的连接没有正确使用键。
Handler_read_rnd_next Both 在数据文件中读下一行的请求数。如果你正进行大量的表扫描,该值较高。通常说明你的表索引不正确或写入的查询没有利用索引。
Handler_rollback Both 内部ROLLBACK语句的数量。
Handler_savepoint Both 在一个存储引擎放置一个保存点的请求数量。
Handler_savepoint_rollback Both 在一个存储引擎的要求回滚到一个保存点数目。
Handler_update Both 在表内更新一行的请求数。
Handler_write Both 在表内插入一行的请求数。
Innodb_buffer_pool_pages_data Global 包含数据的页数(脏或干净)。
Innodb_buffer_pool_pages_dirty Global 当前的脏页数。
Innodb_buffer_pool_pages_flushed Global 要求清空的缓冲池页数
Innodb_buffer_pool_pages_free Global 空页数。
Innodb_buffer_pool_pages_latched Global 在InnoDB缓冲池中锁定的页数。这是当前正读或写或由于其它原因不能清空或删除的页数。
Innodb_buffer_pool_pages_misc Global 忙的页数,因为它们已经被分配优先用作管理,例如行锁定或适用的哈希索引。该值还可以计算为Innodb_buffer_pool_pages_total
- Innodb_buffer_pool_pages_free - Innodb_buffer_pool_pages_data。
Innodb_buffer_pool_pages_total Global 缓冲池总大小(页数)。
Innodb_buffer_pool_read_ahead_rnd Global InnoDB初始化的“随机”read-aheads数。当查询以随机顺序扫描表的一大部分时发生。
Innodb_buffer_pool_read_ahead_seq Global InnoDB初始化的顺序read-aheads数。当InnoDB执行顺序全表扫描时发生。
Innodb_buffer_pool_read_requests Global InnoDB已经完成的逻辑读请求数。
Innodb_buffer_pool_reads Global 不能满足InnoDB必须单页读取的缓冲池中的逻辑读数量。
Innodb_buffer_pool_wait_free Global 一般情况,通过后台向InnoDB缓冲池写。但是,如果需要读或创建页,并且没有干净的页可用,则它还需要先等待页面清空。该计数器对等待实例进行记数。如果已经适当设置缓冲池大小,该值应小。
Innodb_buffer_pool_write_requests Global 向InnoDB缓冲池的写数量。
Innodb_data_fsyncs Global fsync()操作数。
Innodb_data_pending_fsyncs Global 当前挂起的fsync()操作数。
Innodb_data_pending_reads Global 当前挂起的读数。
Innodb_data_pending_writes Global 当前挂起的写数。
Innodb_data_read Global 至此已经读取的数据数量(字节)。
Innodb_data_reads Global 数据读总数量。
Innodb_data_writes Global 数据写总数量。
Innodb_data_written Global 至此已经写入的数据量(字节)。
Innodb_dblwr_pages_written Global 已经执行的双写操作数量
Innodb_dblwr_writes Global 双写操作已经写好的页数
Innodb_log_waits Global 我们必须等待的时间,因为日志缓冲区太小,我们在继续前必须先等待对它清空
Innodb_log_write_requests Global 日志写请求数。
Innodb_log_writes Global 向日志文件的物理写数量。
Innodb_os_log_fsyncs Global 向日志文件完成的fsync()写数量。
Innodb_os_log_pending_fsyncs Global 挂起的日志文件fsync()操作数量。
Innodb_os_log_pending_writes Global 挂起的日志文件写操作
Innodb_os_log_written Global 写入日志文件的字节数。
Innodb_page_size Global 编译的InnoDB页大小(默认16KB)。许多值用页来记数;页的大小很容易转换为字节。
Innodb_pages_created Global 创建的页数。
Innodb_pages_read Global 读取的页数。
Innodb_pages_written Global 写入的页数。
Innodb_row_lock_current_waits Global 当前等待的待锁定的行数。
Innodb_row_lock_time Global 行锁定花费的总时间,单位毫秒。
Innodb_row_lock_time_avg Global 行锁定的平均时间,单位毫秒。
Innodb_row_lock_time_max Global 行锁定的最长时间,单位毫秒。
Innodb_row_lock_waits Global 一行锁定必须等待的时间数。
Innodb_rows_deleted Global 从InnoDB表删除的行数。
Innodb_rows_inserted Global 插入到InnoDB表的行数。
Innodb_rows_read Global 从InnoDB表读取的行数。
Innodb_rows_updated Global InnoDB表内更新的行数。
Key_blocks_not_flushed Global 键缓存内已经更改但还没有清空到硬盘上的键的数据块数量。
Key_blocks_unused Global 键缓存内未使用的块数量。你可以使用该值来确定使用了多少键缓存
Key_blocks_used Global 键缓存内使用的块数量。该值为高水平线标记,说明已经同时最多使用了多少块。
Key_read_requests Global 从缓存读键的数据块的请求数。
Key_reads Global 从硬盘读取键的数据块的次数。如果Key_reads较大,则Key_buffer_size值可能太小。可以用Key_reads/Key_read_requests计算缓存损失率。
Key_write_requests Global 将键的数据块写入缓存的请求数。
Key_writes Global 向硬盘写入将键的数据块的物理写操作的次数。
Last_query_cost Session 用查询优化器计算的最后编译的查询的总成本。用于对比同一查询的不同查询方案的成本。默认值0表示还没有编译查询。 默认值是0。Last_query_cost具有会话范围。
Max_used_connections Global 服务器启动后已经同时使用的连接的最大数量。
ndb* ndb集群相关
Not_flushed_delayed_rows Global 等待写入INSERT DELAY队列的行数。  
Open_files Global 打开的文件的数目。
Open_streams Global 打开的流的数量(主要用于记录)。
Open_table_definitions Global 缓存的.frm文件数量
Open_tables Both 当前打开的表的数量。
Opened_files Global 文件打开的数量。不包括诸如套接字或管道其他类型的文件。 也不包括存储引擎用来做自己的内部功能的文件。
Opened_table_definitions Both 已经缓存的.frm文件数量
Opened_tables Both 已经打开的表的数量。如果Opened_tables较大,table_cache 值可能太小。
Prepared_stmt_count Global 当前的预处理语句的数量。 (最大数为系统变量: max_prepared_stmt_count) 
Qcache_free_blocks Global 查询缓存内自由内存块的数量。
Qcache_free_memory Global 用于查询缓存的自由内存的数量。
Qcache_hits Global 查询缓存被访问的次数。
Qcache_inserts Global 加入到缓存的查询数量。
Qcache_lowmem_prunes Global 由于内存较少从缓存删除的查询数量。
Qcache_not_cached Global 非缓存查询数(不可缓存,或由于query_cache_type设定值未缓存)。
Qcache_queries_in_cache Global 登记到缓存内的查询的数量。
Qcache_total_blocks Global 查询缓存内的总块数。
Queries Both 服务器执行的请求个数,包含存储过程中的请求。
Questions Both 已经发送给服务器的查询的个数。
Rpl_status Global 失败安全复制状态(还未使用)。
Select_full_join Both 没有使用索引的联接的数量。如果该值不为0,你应仔细检查表的索引
Select_full_range_join Both 在引用的表中使用范围搜索的联接的数量。
Select_range Both 在第一个表中使用范围的联接的数量。一般情况不是关键问题,即使该值相当大。
Select_range_check Both 在每一行数据后对键值进行检查的不带键值的联接的数量。如果不为0,你应仔细检查表的索引。
Select_scan Both 对第一个表进行完全扫描的联接的数量。
Slave_heartbeat_period Global 复制的心跳间隔
Slave_open_temp_tables Global 从服务器打开的临时表数量
Slave_received_heartbeats Global 从服务器心跳数
Slave_retried_transactions Global 本次启动以来从服务器复制线程重试次数
Slave_running Global 如果该服务器是连接到主服务器的从服务器,则该值为ON。
Slow_launch_threads Both 创建时间超过slow_launch_time秒的线程数。
Slow_queries Both 查询时间超过long_query_time秒的查询的个数。
Sort_merge_passes Both 排序算法已经执行的合并的数量。如果这个变量值较大,应考虑增加sort_buffer_size系统变量的值。
Sort_range Both 在范围内执行的排序的数量。
Sort_rows Both 已经排序的行数。
Sort_scan Both 通过扫描表完成的排序的数量。
ssl* ssl连接相关
Table_locks_immediate Global 立即获得的表的锁的次数。
Table_locks_waited Global 不能立即获得的表的锁的次数。如果该值较高,并且有性能问题,你应首先优化查询,然后拆分表或使用复制。
Threads_cached Global 线程缓存内的线程的数量。
Threads_connected Global 当前打开的连接的数量。
Threads_created Global 创建用来处理连接的线程数。如果Threads_created较大,你可能要增加thread_cache_size值。缓存访问率的计算方法Threads_created/Connections。
Threads_running Global 激活的(非睡眠状态)线程数。
Uptime Global 服务器已经运行的时间(以秒为单位)。
Uptime_since_flush_status Global 最近一次使用FLUSH STATUS 的时间(以秒为单位)

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索服务器
, 文件
, 数据
, 缓存
, 索引
时间
mysql 参数详解、mysqldump 参数详解、mysql配置参数详解、mysql 5.6 参数详解、mysql命令参数详解,以便于您获取更多的相关知识。

时间: 2024-11-04 20:11:37

Mysql慢查询使用与参数详解的相关文章

MySQL慢查询日志开启分析详解介绍

(1)配置开启 Linux: 在mysql配置文件 my.cnf 中增加如下语句: log-slow-queries=/var/lib/mysql/slowquery.log #指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log long_query_time=5 #记录超过的时间,默认为10s,这里设置为查询时间超过5s的查询语句 log-queries-not-using-indexes = on # 列出没有使用索引的查询语句 #log-querie

MySQL高速缓存启动方法及参数详解(query_cache_size)_Mysql

MySQL query cache从4.1版本开始提供了,不过值今天本人才对其进行研究.默认配置下,MySQL的该功能是没有启动的,可能你通过show variables like '%query_cache%';会发现其变量have_query_cache的值是yes,MYSQL初学者很容易以为这个参数为YES就代表开启了查询缓存,实际上是不对的,该参数表示当前版本的MYSQL是否支持Query Cache,实际上是否开启查询缓存是看另外一个参数的值:query_cache_size ,该值为

mysql SELECT查询的速度优化详解

总的来说,要想使一个较慢速select ... where更快,应首先检查是否能增加一个索引.不同表之间的引用通常通过索引来完成.你可以使用explain语句来确定select语句使用哪些索引.参见7.4.5节,"mysql教程如何使用索引"和7.2.1节,"explain语法(获取关于select的信息)". 下面是一些加速对myisam表的查询的一般建议: ·         为了帮助mysql更好地优化查询,在一个装载数据后的表上运行analyze table

MySQL慢查询日志配置方法详解

查看 MySQL 服务器的慢查询状态是否开启:     1 show variables like '%slow%';   slow_launch_time,表示超过2秒定义为慢查询 log_slow_queries 和 slow_query_log,表示慢查询已经开启 slow_query_log_file,表示慢查询日志的文件的位置   在 mysql 的配置文件 my.cnf 或 my.ini 的 [mysqld]下加入慢查询的配置语句的设置即可开启慢查询状态:   1 #定义超过指定时间

mysql中mysqldumper安装、使用和参数详解

mysqldumper这个备份工具比较好的点很明显,就是可以并发备份,比mysqldump要快些,另一个就是备份的表是单独的文件,恢复单表时会很方便(表结构和数据文件也是分开一个文件的). 一.下载安装 下载最新的mysqldumper mysqldumper 下载地址:https://launchpadlibrarian.net/185032423/mydumper-0.6.2.tar.gz [root@mysql.dmc.com ]$tar -zxvf mydumper-0.6.2.tar.

MySQL数据库使用mysqldump导出数据详解_Mysql

mysqldump是mysql用于转存储数据库的客户端程序.它主要产生一系列的SQL语句,可以封装到文件,该文件包含有所有重建您的数据库所需要的 SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等.可以用来实现轻量级的快速迁移或恢复数据库.是mysql数据库实现逻辑备份的一种方式. 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具:它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有

MySQL中的RAND()函数使用详解

  这篇文章主要介绍了MySQL中的RAND()函数使用详解,是MySQL入门学习中的基础知识,需要的朋友可以参考下 MySQL RAND()函数调用可以在0和1之间产生一个随机数: ? 1 2 3 4 5 6 7 mysql> SELECT RAND( ), RAND( ), RAND( ); +------------------+-----------------+------------------+ | RAND( ) | RAND( ) | RAND( ) | +----------

mysql免安装版配置步骤详解

 这篇文章主要介绍了mysql免安装版配置步骤详解,提供了二个网友的安装方法,大家可以参考使用 1.准备工作   下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d: mysql-noinstall-5.1.53-win32.这个就是mysql的根目录了.   2.配置   在根目录下有几个文件如下:   my-small.ini (这是针对一个小内存(〈= 64MB)的系统,MySQL 只会被时不时地用一下,很重要的是 my

MySql绿色版配置及使用详解

原文:MySql绿色版配置及使用详解           最近在做项目开发时用到了MySql数据库,在看了一些有关MySql的文章后,很快就上手使用了.在使用的过程中还是出现了一些问题,因为使用的是绿色免安装版的MySql所以在配置的时候出现了一些问题,该篇文章就主要针对MySql绿色版的配置及其使用进行讨论. 一.MySql概述        MySql数据库是有瑞典MySql AB公司开发,现在该公司被Oracle收购属于Oracle所有.同SQL Server类似,它也是基于关系型数据库的