2012-10-03 53 views
0

我剛剛遇到一個奇怪的問題。我在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驅動器。

+0

這聽起來很合理。很可能可以用'perf'或類似的方法驗證它。 「PREPARE TRANSACTION」應該遵守'synchronous_commit = off'似乎表面上是合理的,但可能有原因。這在pgsql-general郵件列表上可能會更好。如果你在那裏發帖,請回到這篇文章。 –

+0

這聽起來很合理。查詢主要是從內存緩衝區執行的,所有的「實際工作」都集中在一致點上,這涉及到將內容強制到磁盤(並等待它完成)。 – wildplasser

+0

但是爲什麼commit和commit之間有很大的區別? –

回答

相關問題