Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

奇怪的 postgresql 問題, HINT: To avoid a database shutdown, execute a full-database VACUUM in...
post by tommy @ 19 八月, 2009 15:18

昨天在使用 pgadmin III 連上資料庫後, 查詢了幾筆資料後, 突然發現... 似乎有個不平常的訊息出現:

WARNING: database "xxx" must be vacuumed within 107009986 transactions
HINT: To avoid a database shutdown, execute a full-database VACUUM in "xxx".

看起來似乎很嚴重的樣子, 用 google 查了一下, 發現了這篇 postgresql 的文件, 說明是因為沒有做 vacuum 的關係. 只要做一次 vacuum 就可以了.問題是.... 我們的伺服器上頭有打開 auto vacuum 的設定, 也有每天用一個 cron job 去跑 vacuumdb, 怎麼還會有這個問題呢?

更嚴重的是.... 當我試著用 psql 連上去, 跑了 vacuum (資料不少, 跑一次要好幾個小時) 之後, 發現仍然是一樣的結果.... 就連 vacuum full 與 vacuum freeze (又是好幾個小時過去了) 都試過了, 仍然得到同樣的錯誤... 而且那數字也愈來愈小, 據文件所說, 等小於 1 百萬時就會強迫 shutdown, 只能用 single user 去跑了.

google 上頭找了找, 終於看到有人是類似的情形, 不過... 大家在上頭的建議一樣是去執行 vacuum, 而看起來苦主做了之後的結果跟我一樣, 並沒有解決問題. 陸續看了幾個案例, 好像沒有人成功的樣子.... 這... 是 bug 嗎?

今天在該數字逼近百萬之前, 決定把該資料庫用 pg_dump 做一份備份 (其實每天都有整個資料庫的備份, 也是可以用), 然後就直接把該資料庫 drop 再重建一個, 然後再把 dump 下來的資料給 restore 回去... 結果... 果然沒問題.... 只是換成另一個資料庫有問題. 就同樣的方式再處理一次..... 目前看起來應該是沒問題了.

不過... 這個問題也讓我開始懷疑 postgresql 真的適合拿來用嗎? 怎麼會有這樣的問題呢? 如果沒有好的解決方法, 難道過個幾年我們會再碰到相同的問題呢?

如果有人也碰到這個問題, 也有除了 dump/restore 之外的解決方法, 麻煩告知一聲吧.

Del.icio.us Furl HEMiDEMi Technorati MyShare
commons icon [1] Re:奇怪的 postgresql 問題, HINT: To avoid a database shutdown, execute a full-database VACUUM in... [ 回覆 ]

前輩您用的PostgreSQL是幾版的啊? 在哪個平台上(Windows or ...)?

commons icon [2] Re:奇怪的 postgresql 問題, HINT: To avoid a database shutdown, execute a full-database VACUUM in... [ 回覆 ]

出問題的是在 linux 上頭用 8.2.3 的版本.

commons icon [3] Re:奇怪的 postgresql 問題, HINT: To avoid a database shutdown, execute a full-database VACUUM in... [ 回覆 ]

shutdown db, 執行 postgresql 的 single user mode 後對db執行 vacuum.

commons icon [4] Re:奇怪的 postgresql 問題, HINT: To avoid a database shutdown, execute a full-database VACUUM in... [ 回覆 ]

這個動作之前試過, 對我們的情形沒有用.
這一年多來我們碰到了兩次, 上個月碰到的那次, 有找一台機器先把備份還原來用, 然後對有問題的機器慢慢處理. 那個 vacuum 在我們機器上跑了近十個小時, 並沒有解決問題. (說真的, 就算可以解決, 也不是我們能接受的方法, 畢竟出問題要把原本不停機的服務停下來十個小時不能用, 這樣的資料庫很難在商業運作上頭使用吧)
後來發現把有問題的那個 db drop 就可以了 (如果同一個伺服器有很多 db 的話....).

commons icon [5] Re:奇怪的 postgresql 問題, HINT: To avoid a database shutdown, execute a full-database VACUUM in... [ 回覆 ]

我遇到了类似问题。起初也觉得执行vacuumdb不起作用,而且总是停在那里不同,iowait很高。后来尝试将所有链接数据库的应用程序停止后再执行vacuumdb -f -a -v,很快就执行完毕了。
WARNING: database "xxx" must be vacuumed within 107009986 transactions
HINT: To avoid a database shutdown, execute a full-database VACUUM in "xxx".
这样的警告也消失了。

commons icon [6] Re:奇怪的 postgresql 問題, HINT: To avoid a database shutdown, execute a full-database VACUUM in... [ 回覆 ]

請問版主,後去您的公司還有繼續使
PostgreSQL 資料庫嗎?

commons icon [7] Re:奇怪的 postgresql 問題, HINT: To avoid a database shutdown, execute a full-database VACUUM in... [ 回覆 ]

還是用....
不過目前多數的系統有轉到另一台新的主機, 還沒碰過同樣的問題.
舊的這台目前還有幾個系統在上頭, 到目前為止發生過三次, 最後一次只把某個 database 給 drop 就正常了. (之前是整個還原)

commons icon [8] Re:奇怪的 postgresql 問題, HINT: To avoid a database shutdown, execute a full-database VACUUM in... [ 回覆 ]

感謝版主的回答 , 不知版主如果還有選擇性
您還是會選PostgreSQL 當線上的資料庫來用嗎 ?
,另外冒昧請問一下版主的PostgreSQL是否有去上過課? and PostgreSQL 不知道台灣那裡有正式的課程在教授?

迴響
暱稱:
標題:
個人網頁:
電子郵件:
迴響

  

Bad Behavior 已經阻擋了 128 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS