我有一个带有数据库(MySQL)的网站。 我的数据库大约是35 MB(不是太大)。 我的桌子引擎是InnoDB。 我的所有查询都是选择查询,除了其中两个(一个UPDATE和另一个INSERT)。
网站大部分时间都很快,但有时候(随机时间可能是每分钟或每10分钟甚至每天......)它会像下面那样放慢速度: 如果我们有两个用户: user1正在进行插入然后更新; 然后(同时)user2要求选择查询(主页的http请求)。 user2应该在某个时候停止(这是问题),直到user1完成查询。
你可以想象如果有两三个用户同时进行插入和更新,那么select查询仍然可以等待3或4分钟。 通过监视我的linux服务器(托管服务器)上的phpmyadmin,我发现当任何人对特定表进行INSERT或更新时,所有其他选择查询将停止,直到该用户完成查询。 重要提示:我使用此表的所有选择查询都可以从中获取一些信息。 现在我的表是InnoDB所以我不认为它是表锁问题。 但是当我检查打开的表格以查看它们中的哪一个被锁定时(IN_USE):
show open tables
我发现IN_USE的值不是0。当有人进行更新时,有时会将IN_USE显示为1或2甚至17。
我的问题是为什么IN_USE变量有时显示不为零,而我的所有表都是InnoDB? 我的意思是InnoDB不应用表锁,那么为什么IN_USE(表示锁中的表)有时显示一个值?