您無法輕鬆獲得單個xacts的重播確認。系統跟蹤對等節點重播的日誌序列號,但不記錄那些對應的事務ID,因爲它不關心。
你似乎想要的是近似同步或半同步複製。有一些工作要達到9.6,希望能夠及時使BDR受益,但這在未來會很好。
與此同時,您可以在pg_replication_slots
中看到日誌序列號爲restart_lsn
。這不是副本重播的位置,但它是在崩潰後重啓重播的最老點。
只有在pg_stat_replication
中連接了副本時,才能看到其他LSN字段,如replay_location
。不幸的是,在9.4中,沒有簡單的方法可以看到pg_replication_slots
中的哪個插槽與pg_stat_replication
(固定爲9.5,但BDR基於9.4仍)的哪個活動連接相關聯。所以如果你想挑選出單獨的節點,你必須使用由BDR設置的application_name
,並且它是......「有趣」的解析。也經常被截斷。
你可以通過調用SELECT pg_current_xlog_location();
將返回像0/19E0F060
或任何一個值犯下的XACT提交它後,服務器的當前LSN。然後,您可以在對等節點的pg_stat_replication
中查看該值,直到您看到您提交的節點的replay_location
已達到或通過提交後立即捕獲的LSN。
這並不完美。當你提交和捕獲服務器當前的LSN時,可能還有其他工作要做。這是沒有辦法的,但最糟糕的是你稍等一會兒。如果你使用BDR,你不應該關心微秒甚至毫秒,因爲它是一個異步複製解決方案。
原理與測量正常物理備用服務器的複製延遲非常相似,所以我建議閱讀一些文檔。除了pg_last_xact_replay_timestamp()
不適用於邏輯複製,所以你不能使用它的滯後,你必須使用LSN,並做你自己的時間客戶端。
那麼這是一個意外的總體答案!非常感謝Craig! – MagicDragon