给定一个数据库,查询在 99% 的时间返回正确的输出,但是在 1% 的时间,它返回错误的输出。可能的原因是什么?
问问题
931 次
3 回答
2
查询返回“错误”或“非预期”结果集的原因有多种:
- “错误”的数据被添加到数据库/表中。
- 查询读取未提交的记录或幻像记录(请参阅数据库隔离级别)
- 您的数据可能尚未编入索引(如果是全文索引)或全文服务正在重建索引
- 查询中没有 ORDER BY 子句,系统负载很高。在这种情况下,我们可能会观察到“旋转木马扫描”:
例如,假设您有一个包含 500,000 页的表。UserA 执行需要扫描(并检索一些记录)表的 Transact-SQL 语句。当该扫描处理了 100,000 页时,UserB 执行另一个 Transact-SQL 语句来扫描同一个表。数据库引擎在 100,001 之后为页面安排一组读取请求,并将每个页面中的行传递回两次扫描。当扫描到达第 200,000 页时,UserC 执行另一个扫描同一个表的 Transact-SQL 语句。从第 200,001 页开始,数据库引擎将其读取的每个页面的行传递回所有三个扫描。读取第 500,000 行后,对 UserA 的扫描完成,对 UserB 和 UserC 的扫描返回并开始读取从第 1 页开始的页面。当数据库引擎到达第 100,000 页时,对 UserB 的扫描完成。然后对 UserC 的扫描继续进行,直到它读取到第 200,000 页。至此,所有的扫描都完成了。更多关于这里优化的信息:旋转木马扫描
- 在分布式数据库的情况下,可以在数据库的不同副本上执行查询(因为“数据库负载平衡器”)。因此,在复制过程中,某些数据库副本可能在某些时候具有不同的数据。
如果有其他想法出现 - 我会更新我的帖子。
于 2012-06-30T04:48:13.533 回答
1
我想也许他们没有检查特殊字符,并且 1% 的时间用户可能会插入特殊字符。
于 2012-06-14T05:39:18.797 回答
0
缓存、同步/复制、资源不足等
于 2012-04-25T11:40:01.737 回答