问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何查看mysql数据库中哪条SQL访问速度太慢

发布网友 发布时间:2022-04-22 04:31

我来回答

1个回答

热心网友 时间:2023-07-16 17:09

一、MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句\x0d\x0a\x0d\x0a1,slow_query_log\x0d\x0a这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。\x0d\x0a\x0d\x0a2,long_query_time\x0d\x0a当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。\x0d\x0a\x0d\x0a3,slow_query_log_file\x0d\x0a记录日志的文件名。\x0d\x0a\x0d\x0a4,log_queries_not_using_indexes\x0d\x0a这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快。\x0d\x0a\x0d\x0a二、检测mysql中sql语句的效率的方法\x0d\x0a\x0d\x0a1、通过查询日志\x0d\x0a(1)、Windows下开启MySQL慢查询\x0d\x0aMySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上\x0d\x0a代码如下\x0d\x0alog-slow-queries = F:/MySQL/log/mysqlslowquery。log\x0d\x0along_query_time = 2\x0d\x0a\x0d\x0a(2)、Linux下启用MySQL慢查询\x0d\x0aMySQL在Windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上\x0d\x0a代码如下\x0d\x0alog-slow-queries=/data/mysqldata/slowquery。log\x0d\x0along_query_time=2\x0d\x0a说明\x0d\x0alog-slow-queries = F:/MySQL/log/mysqlslowquery。\x0d\x0a为慢查询日志存放的位置,一般这个目录要有MySQL的运行帐号的可写权限,一般都将这个目录设置为MySQL的数据存放目录;\x0d\x0along_query_time=2中的2表示查询超过两秒才记录;\x0d\x0a\x0d\x0a2.show processlist 命令\x0d\x0a\x0d\x0aSHOW PROCESSLIST显示哪些线程正在运行。您也可以使用mysqladmin processlist语句得到此信息。\x0d\x0a各列的含义和用途:\x0d\x0aID列\x0d\x0a一个标识,你要kill一个语句的时候很有用,用命令杀掉此查询 /*/mysqladmin kill 进程号。\x0d\x0auser列\x0d\x0a显示单前用户,如果不是root,这个命令就只显示你权限范围内的sql语句。\x0d\x0ahost列\x0d\x0a显示这个语句是从哪个ip的哪个端口上发出的。用于追踪出问题语句的用户。\x0d\x0adb列\x0d\x0a显示这个进程目前连接的是哪个数据库。\x0d\x0acommand列\x0d\x0a显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)。\x0d\x0atime列\x0d\x0a此这个状态持续的时间,单位是秒。\x0d\x0astate列\x0d\x0a显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state只是语句执行中的某一个状态,一个 sql语句,以查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成\x0d\x0ainfo列\x0d\x0a显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据。\x0d\x0a\x0d\x0a这个命令中最关键的就是state列,mysql列出的状态主要有以下几种:\x0d\x0aChecking table\x0d\x0a 正在检查数据表(这是自动的)。\x0d\x0aClosing tables\x0d\x0a 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。\x0d\x0aConnect Out\x0d\x0a 复制从服务器正在连接主服务器。\x0d\x0a\x0d\x0aCopying to tmp table on disk\x0d\x0a 由于临时结果集大于tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。\x0d\x0aCreating tmp table\x0d\x0a 正在创建临时表以存放部分查询结果。\x0d\x0adeleting from main table\x0d\x0a 服务器正在执行多表删除中的第一部分,刚删除第一个表。\x0d\x0adeleting from reference tables\x0d\x0a 服务器正在执行多表删除中的第二部分,正在删除其他表的记录。\x0d\x0a\x0d\x0aFlushing tables\x0d\x0a 正在执行FLUSH TABLES,等待其他线程关闭数据表。\x0d\x0aKilled\x0d\x0a 发送了一个kill请求给某线程,那么这个线程将会检查kill标志位,同时会放弃下一个kill请求。MySQL会在每次的主循环中检查kill标志位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么kill请求会在锁释放时马上生效。\x0d\x0aLocked\x0d\x0a 被其他查询锁住了。\x0d\x0aSending data\x0d\x0a 正在处理SELECT查询的记录,同时正在把结果发送给客户端。\x0d\x0a\x0d\x0aSorting for group\x0d\x0a 正在为GROUP BY做排序。\x0d\x0a Sorting for order\x0d\x0a 正在为ORDER BY做排序。\x0d\x0aOpening tables\x0d\x0a 这个过程应该会很快,除非受到其他因素的干扰。例如,在执ALTER TABLE或LOCK TABLE语句行完以前,数据表无法被其他线程打开。正尝试打开一个表。\x0d\x0aRemoving plicates\x0d\x0a 正在执行一个SELECT DISTINCT方式的查询,但是MySQL无法在前一个阶段优化掉那些重复的记录。因此,MySQL需要再次去掉重复的记录,然后再把结果发送给客户端。\x0d\x0a\x0d\x0aReopen table\x0d\x0a 获得了对一个表的锁,但是必须在表结构修改之后才能获得这个锁。已经释放锁,关闭数据表,正尝试重新打开数据表。\x0d\x0aRepair by sorting\x0d\x0a 修复指令正在排序以创建索引。\x0d\x0aRepair with keycache\x0d\x0a 修复指令正在利用索引缓存一个一个地创建新索引。它会比Repair by sorting慢些。\x0d\x0aSearching rows for update\x0d\x0a 正在讲符合条件的记录找出来以备更新。它必须在UPDATE要修改相关的记录之前就完成了。\x0d\x0aSleeping\x0d\x0a 正在等待客户端发送新请求.\x0d\x0a\x0d\x0aSystem lock\x0d\x0a 正在等待取得一个外部的系统锁。如果当前没有运行多个mysqld服务器同时请求同一个表,那么可以通过增加--skip-external-locking参数来禁止外部系统锁。\x0d\x0aUpgrading lock\x0d\x0a INSERT DELAYED正在尝试取得一个锁表以插入新记录。\x0d\x0aUpdating\x0d\x0a 正在搜索匹配的记录,并且修改它们。\x0d\x0a\x0d\x0aUser Lock\x0d\x0a 正在等待GET_LOCK()。\x0d\x0aWaiting for tables\x0d\x0a 该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线程关闭这个表。以下几种情况下会产生这个通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE,或OPTIMIZE TABLE。\x0d\x0awaiting for handler insert\x0d\x0a INSERT DELAYED已经处理完了所有待处理的插入操作,正在等待新的请求。\x0d\x0a 大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。\x0d\x0a 还有其他的状态没在上面中列出来,不过它们大部分只是在查看服务器是否有存在错误是才用得着。\x0d\x0a\x0d\x0a例如如图:\x0d\x0a\x0d\x0a3、explain来了解SQL执行的状态\x0d\x0aexplain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。\x0d\x0a使用方法,在select语句前加上explain就可以了:\x0d\x0a例如:\x0d\x0aexplain select surname,first_name form a,b where a.id=b.id\x0d\x0a结果如图\x0d\x0a\x0d\x0aEXPLAIN列的解释\x0d\x0atable\x0d\x0a显示这一行的数据是关于哪张表的\x0d\x0atype\x0d\x0a这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL\x0d\x0apossible_keys\x0d\x0a显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句\x0d\x0akey\x0d\x0a实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句 中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引\x0d\x0akey_len\x0d\x0a使用的索引的长度。在不损失精确性的情况下,长度越短越好\x0d\x0aref\x0d\x0a显示索引的哪一列被使用了,如果可能的话,是一个常数\x0d\x0arows\x0d\x0aMYSQL认为必须检查的用来返回请求数据的行数\x0d\x0aExtra\x0d\x0a关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢\x0d\x0a\x0d\x0aextra列返回的描述的意义\x0d\x0aDistinct\x0d\x0a一旦MYSQL找到了与行相联合匹配的行,就不再搜索了\x0d\x0aNot exists\x0d\x0aMYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了\x0d\x0aRange checked for each Record(index map:#)\x0d\x0a没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一\x0d\x0aUsing filesort\x0d\x0a看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行\x0d\x0aUsing index\x0d\x0a列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候\x0d\x0aUsing temporary\x0d\x0a看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上\x0d\x0aWhere used\x0d\x0a使用了WHERE从句来*哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题不同连接类型的解释(按照效率高低的顺序排序)\x0d\x0aconst\x0d\x0a表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待\x0d\x0aeq_ref\x0d\x0a在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用\x0d\x0aref\x0d\x0a这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好\x0d\x0arange\x0d\x0a这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况\x0d\x0aindex\x0d\x0a这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)\x0d\x0aALL\x0d\x0a这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免
如何查找MySQL中查询慢的SQL语句

1、通过查询日志 (1)、Windows下开启MySQL慢查询 MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上 代码如下 log-slow-queries = F:/MySQL/log/mysqlslowquery。log long_query_time = 2 (2)、Linux下启用MySQL慢查询 MySQL在Windows系统中的配置文件一般是是my.cnf找到[mysq...

如何查询mysql中执行效率低的sql语句

查询mysql中执行效率低的sql语句可以使用MySQL 自带 slow log 的分析工具 mysqldumpslow。slow log 是 MySQL 根据 SQL 语句的执行时间设定,写入的一个文件,用于分析执行较慢的语句。配置方法如下:1、打开mysql的安装目录,找到my.cnf文件,并打开,输入以下配置:log-slow-queries = [slow_query_log_...

如何查找MySQL中查询慢的SQL语句

这是一个慢查询日志的展示工具,能够帮助 DBA 或者开发人员分析数据库的性能问题,给出全面的数据摆脱直接查看 slow-log。QAN(Query Analytics)PMM 目前有 2 个版本,但是对于 QAN 来说其大致由三部分组成:QAN-Agent(client):负责采集 slow-log 的数据并上报到服务端 QAN-API(server):负责存储...

MySQL中如何查看“慢查询”,如何分析执行SQL的效率?

log\x0d\x0along_query_time = 2\x0d\x0a\x0d\x0a(2)、Linux下启用MySQL慢查询\x0d\x0aMySQL在Windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上\x0d\x0a代码如下\x0d\x0alog-slow-queries=/data/mysqldata/slowquery。log\x0d\x0along_query_time=2\x0d\x0a说明\x0d\x...

如何发现及处理 MySQL 主从延迟问题

可以使用Percona工具包中的pt-heartbeat更准确地测量Slave日志的滞后情况。至此,我们学会了如何检查复制延迟,无论是Slave IO_THREAD还是Slave SQL_THREAD。现在,让我们提供一些提示和建议,以了解导致延迟的原因以及可能的修复方法。通常,Slave IO_THREAD的滞后是由于主/从之间的网络速度过慢。大多数情况...

如果mysql里面的数据过多,查询太慢怎么办?

整理 我们诊断的关键点如下:\1. 对于 information_schema 中的元数据表,执行计划不能提供有效信息。\2. 通过查看 MySQL 改写后的 SQL,我们猜测了优化器发生了误判。\3. 我们增加了 hint,指导 MySQL 正确进行优化判断。但目前我们的实验仅限于猜测,猜中了万事大吉,猜不中就无法做出好的诊断。

mysql,有一张表里面已经有几千万条数据了,网页访问时极其缓慢,如何提高...

00:10:00' and '2012-11-01 00:11:10';查看建立索引前面的返回的结果。假如没有索引的话,explain会显示返回查询全表的数据自然会很慢了。假如用到了索引的话,可以快速的找到需要查询的区间里的数据,往往需要查询的数据量是全表的1/100,1/1000,那么这时候花费的时间就是1/100,1/1000了。

MySQL数据库服务器逐渐变慢 该怎么分析与解决

我们先来看第一个阶段,MySQL慢的诊断思路,一般我们会从三个方向来做:第一个方向是MySQL内部的观测 第二个方向是外部资源的观测 第三个方向是外部需求的改造 1.1 MySQL 内部观测 我们来看MySQL内部的观测,常用的观测手段是这样的,从上往下看,第一部分是Processlist,看一下哪个SQL压力不太正常,...

如何实时监控mysql中的SQL语句的执行情况

1. OS 层面的 CPU、IO、内存、磁盘、网络等信息;2. MySQL 层面的行锁等待、会话连接、主从复制,状态参数等信息。而且 pt-stalk 是一个 Shell脚本,对于我这种看不懂 perl 的人来说比较友好,脚本里面的监控逻辑与监控命令也可以拿来参考,用于构建自己的监控体系。三、使用 接着我们来看下如何使用...

mysql分页显示的问题,查找条件太复杂,很慢,要是用limit分页,进入下一...

上面的查询在有2M行记录时需要0.22sec,通过EXPLAIN查看SQL的执行计划可以发现该SQL检索了100015行,但最后只需要15行。大的分页偏移量会增加使用的数据,MySQL会将大量最终不会使用的数据加载到内存中。就算我们假设大部分网站的用户只访问前几页数据,但少量的大的分页偏移量的请求也会对整个系统造成...

oracle数据库与mysql mysql数据库有什么用 mysql数据库怎么用 怎么登录mysql数据库 mysql数据库界面 mysql数据库登录命令 mysql数据库授权 mysql数据库类型 mysql怎么连接数据库
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...真心谢谢你,外贸邮件用的,谢谢你,很重要,在线等,就剩下这么点分... 请帮忙翻译下吧,谢谢,急用,不要再线翻译 ...可以把一个人的QQ号给封了或者限制他登录(除了举报),或者把他... 一直开窗通风地板会翘起来吗 iphone上买icloud存储空间买不了显示连接不到icloud怎么办?_百度... 新家铺的强化复合地板,开窗通风晚上下大雨进水了,早晨板面上还有水不... 联想笔记本电脑e40thinkpad家庭版 昨晚玩电脑时不小心按了关闭显示器... 招标代理机构的代表,应当进入评标委员会的项目是 莎普爱思滴眼液多少钱 莎普爱思滴眼液哪里有售? 白天的时候,假发可以带出去吗? 假发可以经常带吗,带出去呢? 母亲节快乐这些祝福短信和祝福语你知道吗? pdf文件怎么汇编 mysql数据量上十万条后,查询慢导致服务器卡有什么... 电脑上音乐识别软件有嘛? 文件汇编的格式是什么样的呢? mysql 创建完索引之后 ,查询反而变慢了,这是为什... 火车上让带剪头发用的假发吗? 母亲节快乐的英文 在家怎么用烤箱烤板栗 MySQL怎么查询比较耗时的sql语句 母亲节快乐的英文怎么写? 公文汇编本是什么意思?是把好多公文文件订到一块吗? 假发可以带出门吗 什么叫发文汇编 出境能戴假发么 如果mysql里面的数据过多,查询太慢怎么办? 母亲节快乐的好词好句 Mysql 查询速度慢怎么办 如何用烤箱做烤板栗吃? 多个文件汇编到一个word中,将文件名称作为文件汇... 如何用烤箱烤板栗 文件汇编怎么做word2007目录 mysql数据库查询好慢怎么解决 假发能不能带出门 板栗用烤箱怎么烤 mysql中的慢查询会不会影响速度 带假发出门会怎样。。 怎么写文件汇编前言? 烤箱烤板栗的做法 压测时在mysql慢查询日志中有一条很简单的SQL语句... 文件汇编的格式是什么样的呢?拜托各位大神 母亲节快乐? 祝你母亲母亲节快乐英文怎么说 mysql 查询的时候加了索引 查询还是很慢怎么办 板栗放烤箱怎么烤 Mysql 如何记录执行慢的语句日志 三句有创意的自我介绍 请问:淘宝上50元的长直假发带上会不会很假?能带...