我剛剛遇到一個奇怪的問題。我在pgfourine上做了一個報告,發現我的XA交易開始很慢。準備交易和提交準備合併在13.2s中花費12.55s。但爲什麼?PostgreSQL。慢準備交易和提交準備
##### Overall statistics #####
Number of unique normalized queries: 175
Number of queries: 268,772
Total query duration: 13m2s
##### Queries by type #####
SELECT: 116493 43.3%
INSERT: 15926 5.9%
UPDATE: 7935 3.0%
DELETE: 4923 1.8%
##### Queries that took up the most time (N) #####
1) 6m32s - 26,338 - COMMIT PREPARED ''
--
2) 6m23s - 25,972 - PREPARE TRANSACTION ''
--
3) 0.6s - 3,848 - update avatar set lfa_position=NULL where Id=0
.....
7) 0.3s - 21,514 - COMMIT
.....
我有一個理論,但沒有證明..我有慢光盤,我關閉了synchronous_commit。也許PostgreSQL必須在「準備事務」期間做一個fsync,即使synchronous_commit關閉了嗎?
fsync = on
synchronous_commit = off
任何想法?
UPDATE
與
fsync = off
synchronous_commit = off
##### Overall statistics #####
Number of unique normalized queries: 155
Number of queries: 186,838
Total query duration: 6.6s
##### Queries by type #####
SELECT: 84367 45.2%
INSERT: 9197 4.9%
UPDATE: 5486 2.9%
DELETE: 2996 1.6%
##### Queries that took up the most time (N) #####
1) 1.8s - 16,972 - PREPARE TRANSACTION ''
--
2) 1.1s - 16,965 - COMMIT PREPARED ''
--
3) 0.4s - 2,904 - update avatar set lfa_position=NULL where Id=0
--
4) 0.2s - 16,031 - COMMIT
相同的測試看起來像FSYNC花時間數量繁多,但不是所有的時間。 16k提交 - 0.2秒,17k準備+提交2.9秒。
悲傷的故事。看起來XA提交比本地提交花費的時間多15倍,並且不考慮synchronous_commit設置。 fsync = off對於生產使用不安全。因此,如果我想使用XA事務,我必須謹慎使用它,並使用具有高IOPS的優質SSD驅動器。
這聽起來很合理。很可能可以用'perf'或類似的方法驗證它。 「PREPARE TRANSACTION」應該遵守'synchronous_commit = off'似乎表面上是合理的,但可能有原因。這在pgsql-general郵件列表上可能會更好。如果你在那裏發帖,請回到這篇文章。 –
這聽起來很合理。查詢主要是從內存緩衝區執行的,所有的「實際工作」都集中在一致點上,這涉及到將內容強制到磁盤(並等待它完成)。 – wildplasser
但是爲什麼commit和commit之間有很大的區別? –