我们在Azure上运行MySQL。我们有三个非常小的数据库。
主数据库为POI,保存了11条静态记录。白天,可以在1-2小时内添加和删除一些记录。
我们通常有5-10个移动用户每60秒对POI的所有11-15条记录进行投票。
每天都有几次,我们从SQL查询中得到一些损坏的数据。我们经常看到两个月前从数据库中删除的两条记录。
是什么使如此简单的数据库变得不可靠?
Server: eu-cdbr-azure-north-d.cloudapp.net via TCP/IP
Server type: MySQL
Server version: 5.5.45-log - MySQL Community Server (GPL)
Protocol version: 10
PHP extension: mysqli
PHP version: 5.4.42-编辑
我已将数据库更改为InnoDB。我还是拿到鬼数据了。
当我使用phpMyAdmin查看POI时,幽灵数据是不可见的。
我开始测量数据库连接时间,并意识到它们有时是1-5秒,所以当存储连接请求时,我很可能有并发请求。
我需要做一些特殊的技巧来处理并发性吗?长连接时间可能是由反向DNS查找引起的。我们现在就让它失效。
发布于 2015-12-03 07:10:10
“事务隔离模式”允许您查看数据,即使数据已被删除。有些模式有效地“捕捉所有数据的快照”,然后让您只看到该数据,直到您COMMIT。
我怀疑这是不是造成你所看到的东西的原因。会很少见的。这将需要比合理时间更长的超时时间。你有没有从他们的默认值中更改过什么?
请注意,我还说您必须启动一个事务,并且在很长一段时间内没有完成它;另外,在中间的某个时候,一个DELETE发生在另一个连接上。
看看变量tx_isolation、autocommit和%timeout%。把它们展示给我们,然后勾勒出你的交易。
另一个答案是:在MySQL之外有一个缓存层,导致了这个问题。
https://dba.stackexchange.com/questions/120818
复制相似问题