我有一个带有字段的表::ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
我的问题是,如果我在这个表上使用延迟插入,时间戳是请求排队的时间还是实际插入的时间?
我有一个带有字段的表::ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
我的问题是,如果我在这个表上使用延迟插入,时间戳是请求排队的时间还是实际插入的时间?
答案是当请求排队时,但在发出请求时不一定正确,因为如果还没有表的线程,则在建立表的线程之后请求排队。
线程执行 INSERT 语句,但不是将行写入表,而是将最后一行的副本放入由处理程序线程管理的队列中。线程注意到任何语法错误并报告给客户端程序。
延迟语句执行时的事件顺序:
DELAYED
锁INSERT
并将最后一行放入队列delayed_insert_limit
行并SELECTS
在写入之间执行任何挂起DELAYED
释放锁根据是否需要创建线程以及检查或获取DELAYED
锁所需的时间,执行语句(步骤 0)和执行语句(步骤 3)之间的时间会有所不同。然后,根据队列的大小(特别是如果它超过delayed_insert_limit
行),以及是否SELECTS
发生任何挂起,写入将延迟一些不可预测的时间。
无论是否INSERT DELAYED
使用,或者如果表由于另一个线程或更新或诸如此类而被锁定,该值ts
将等于INSERT
发出的时间。
它应该花费实际插入的时间