数据从多个服务器插入表中,速率为100-200插入/秒。每个服务器按id顺序读取该表中的所有行,并在每隔几秒运行一次的计时器线程中处理数据。读入的最后一个id存储在内存中,并在下一次查询期间再次使用。
发生的事情是读取数据的函数无法读取某些行;当插入率很高时,它们会被跳过。
以下是该方案。
读取数据的函数读入数据直到id 100.它现在尝试读取id为>的行。 100.返回的行是101,102,104,105。跳过行103(即使它存在)。
当前正在发生的工作原理是,由于数据是由多个服务器插入的,因此在读取发生时没有提交行103,因此不会作为结果集的一部分返回。提交可能发生在此读取之后。事务隔离级别设置为“REPEATABLE-READ”。
以前有人遇到过这样的事吗?它是如何处理的。欢迎任何建议。
编辑:我正在寻找一种方法来按顺序读取所有行,没有任何间隙。
答案 0 :(得分:1)
你的猜测几乎肯定是发生了什么。
有未提交的插入内容。一旦另一个线程使用它,序列仍然会递增,但在提交之前你不会看到该行。
从查询启动时起,您的结果集将是读取一致的,因此即使在返回结果期间提交了行,您仍然不会在查询之前看到它。
你正在寻找一个建议吗?你将永远无法读取未提交的行。