我正在查看 pg_stat_activity 视图。有两个领域对我来说是无法区分的:
xact_start:事务开始运行的时间,可能与 query_start 不同,但应始终发生在 query_start 时间之前。
query_start:查询开始运行的时间。这对于确定查询是否已运行很长时间很有用。
它说它们都决定了查询的开始时间。它还说 xact_start 可以与 query_start 不同,但没有解释为什么 - 只是它应该在 query_start 之前启动。但两者之间的实际区别是什么?为什么我会关心 xact_start?
它还说 xact_start 可以与 query_start 不同,但没有解释为什么
当事务封装多个查询时,则不同,例如:
BEGIN; -- starts at t0, beginning of transaction
query1; -- starts at t1
query2; -- starts at t2
COMMIT; -- starts at t4, end of transaction
Run Code Online (Sandbox Code Playgroud)
如果我们在运行时pg_stat_activity查看此会话的条目query2,xact_starts将会是t0和query_start将会是t2,t2>t0区别主要在于 的持续时间query1。
xact_start 有助于发现长时间运行的事务,这在对实时数据库进行故障排除或调整时很有用。