2012-02-06 41 views
1

我正在構建一個更新Web應用程序的用戶統計信息的後臺作業。這項工作目前需要55-60秒,而且我擔心如果用戶在作業運行的同時嘗試加載他的統計信息頁面會發生什麼情況。PostgreSQL + Rails併發性說明

從我讀過的關於PostgreSQL和併發性的內容來看,如果兩個客戶端試圖訪問同一行(一次更新和一次讀取),並且我沒有明確啓動任何事務,第一個只需等待第二個完成。

因此,如果我正確地理解了這一點,那麼我可能會遇到的唯一性能問題就是用戶試圖在該行正在更新的同一時刻加載他的統計信息頁的可能性極小。這並不像整個統計表在55-60秒的時間內被鎖定,除非我明確地配置Postgres來做到這一點,對吧?

這是一個正確的解釋嗎?我還有其他因素嗎?

(我提到了Rails的一部分,以防萬一有上述情況的任何軸承)

(另外:PostgreSQL的版本是9.0.4)

回答

1

這取決於事務隔離級別。如果我有你的情況 - 你正在談論骯髒閱讀避免延遲。如果您使用默認隔離級別,則「骯髒讀取」是不可能的。只有當讀取器將嘗試獲取正在更新的同一行時,Reader纔會等待。

Read Committed是PostgreSQL中的默認隔離級別。當事務在此隔離級別上運行時,SELECT查詢僅查看在查詢開始之前提交的數據;

specs on ISOLATION