发现记录的日志的时间并不是线性增长的,会突然有一个跳跃的时间点。
打算按照以下思路去定位:
A. 验证生成时间戳的函数global_escaped_ms()是否单调递增;
B. 用包含该时间点的区间来筛选记录,观察是否不同记录之间有混淆;
C. 测试单线程情况下,日志的时间是否正常。
由于采用的计时工具为boost::chrono::steady_clock,所以理论上应该是严格单调的。
该时钟在开机时记录开机时间,在测量点记录当前时间,从而将得到的时间差作为时间戳。
在A实验通过的情况下,开始进行B实验的检查。发现如果按照时间戳从小到大排序,那么异常点刚好能够排进整个流程,反而去掉该点,逻辑上就有步骤缺失。因此开始怀疑sqlite3是否存取时不保证原始顺序。
经过查询确实是这样:
The order of the rows returned by a select that does not have an ORDER BY
clause is guaranteed by the standard to be in any arbitrary order, even from
one execution to another due to changes in the underlying data, index
statistics, amount of memory available, or even the phase of the moon.