Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL innoDB更新缓慢(不清楚)_Mysql_Sql_Innodb - Fatal编程技术网

MySQL innoDB更新缓慢(不清楚)

MySQL innoDB更新缓慢(不清楚),mysql,sql,innodb,Mysql,Sql,Innodb,我有一个相当简单的查询,在大多数情况下运行得非常快,在其他罕见的情况下需要30秒。我不知道是什么引起的。这是我所说的一个例子 mysql>更新matchSessionMembers msm加入matchSessions ms ON msm.matchNo=ms.matchNo和ms.STATUS!='N'设置msm.STATUS='P' 其中msm.memberNo=7,msm.STATUS=M 查询正常,0行受影响(0.00秒) 匹配的行:0已更改:0警告:0 mysql>更新matchSes

我有一个相当简单的查询,在大多数情况下运行得非常快,在其他罕见的情况下需要30秒。我不知道是什么引起的。这是我所说的一个例子

mysql>更新matchSessionMembers msm加入matchSessions ms ON msm.matchNo=ms.matchNo和ms.STATUS!='N'设置msm.STATUS='P' 其中msm.memberNo=7,msm.STATUS=M
查询正常,0行受影响(0.00秒)
匹配的行:0已更改:0警告:0

mysql>更新matchSessionMembers msm加入matchSessions ms ON msm.matchNo=ms.matchNo和ms.STATUS!='N'设置msm.STATUS='P' 其中msm.memberNo=7,msm.STATUS=M
查询正常,0行受影响(0.00秒)
匹配的行:0已更改:0警告:0

mysql>更新matchSessionMembers msm加入msm.matchNo=ms.matchNo和ms.STATUS上的matchSessions ms!='N'设置msm.STATUS='P' 其中msm.memberNo=7,msm.STATUS=M
查询正常,0行受影响(3.01秒)
匹配行:0已更改:0警告:0

mysql>更新matchSessionMembers msm加入matchSessions ms ON msm.matchNo=ms.matchNo和ms.STATUS!='N'设置msm.STATUS='P' 其中msm.memberNo=7,msm.STATUS=M
查询正常,0行受影响(0.00秒)
匹配的行:0已更改:0警告:0

mysql>更新matchSessionMembers msm加入msm.matchNo=ms.matchNo和ms.STATUS上的matchSessions ms!='N'设置msm.STATUS='P' 其中msm.memberNo=7,msm.STATUS=M
查询正常,0行受影响(1.88秒)
匹配行:0已更改:0警告:0

mysql>更新matchSessionMembers msm加入matchSessions ms ON msm.matchNo=ms.matchNo和ms.STATUS!='N'设置msm.STATUS='P' 其中msm.memberNo=7,msm.STATUS=M
查询正常,0行受影响(0.00秒)
匹配的行:0已更改:0警告:0

在这个查询中,我为所有msm.matchNo、ms.matchNo、ms.status、msm.status和msm.memberNo设置了索引

我对同一个查询运行了6次,有4次查询在不到一秒钟的时间内完成,而有2次查询的处理时间超过一秒钟。我做了更多的测试,得到了其中一个更严重案例的概要数据,执行这个愚蠢的查询需要30秒

mysql> SHOW PROFILE FOR QUERY 3;  
+---------------------------+-----------+  
| Status                    | Duration  |  
+---------------------------+-----------+  
| starting                  |  0.000075 |  
| checking permissions      |  0.000013 |  
| checking permissions      |  0.000012 |  
| Opening tables            |  0.000073 |  
| checking permissions      |  0.000011 |  
| checking permissions      |  0.000013 |  
| System lock               |  0.000023 |  
| init                      |  0.000021 |  
| updating main table       |  0.000014 |  
| optimizing                |  0.000020 |  
| statistics                |  0.000117 |  
| preparing                 |  0.000028 |  
| executing                 |  0.000011 |  
| Sending data              | 31.940094 | <==
| updating reference tables |  0.000039 |  
| end                       |  0.000016 |  
| end                       |  0.000015 |  
| query end                 |  0.000048 |  
| closing tables            |  0.000039 |  
| freeing items             |  0.000036 |  
| logging slow query        |  0.000011 |  
| cleaning up               |  0.000014 |  
+---------------------------+-----------+  
mysql>显示查询3的配置文件;
+---------------------------+-----------+  
|状态|持续时间|
+---------------------------+-----------+  
|启动| 0.000075 |
|检查权限| 0.000013 |
|检查权限| 0.000012 |
|期初表| 0.000073 |
|检查权限| 0.000011 |
|检查权限| 0.000013 |
|系统锁| 0.000023 |
|初始值| 0.000021 |
|更新主表| 0.000014 |
|优化| 0.000020 |
|统计数字| 0.000117 |
|编制| 0.000028 |
|执行| 0.000011 |
|发送数据| 31.940094 |我找到了答案

我犯了一个愚蠢的错误。不过,要识别它并不容易。 我有一个不同的超慢查询,大约每小时运行一次,一个更新查询的执行时间超过30秒。我不能完全确定,但我认为那个查询一定锁定了所有内容,并将所有其他查询放入队列中

我在慢速查询日志中没有注意到它,因为它被隐藏在由这一次愚蠢查询产生的所有其他慢速查询下


我希望这能帮助其他有类似问题的人。

我们讨论了多少行?我的意思是这两个表中的大约行数。请尝试更新matchSessionMembers msm JOIN matchSessions ms ON msm.matchNo=ms.matchNo设置msm.STATUS='P',其中msm.memberNo=7和msm.STATUS='M'和ms.STATUS!='N′并报告。数量不算太多。大约110k用于matchSessions,220k用于matchSessionMembers。发送数据瓶颈实际上是在这之前所花的时间。这是一个已知的查询分析问题。因此,执行是造成瓶颈的原因,这很可能是由于必须检查的行数。@N.B.我已经想到了这一点,但我不明白为什么查询时间如此不一致。