2013-03-12 18 views
1

我們是在Heroku上運行的Ruby on rails應用程序,我們正在使用Heroku的Postgres解決方案用於我們的數據庫。會在後臺線程上投入昂貴的查詢幫助網站性能?

我們有一個非常昂貴的數據庫查詢。大約需要45秒。我們使用memcache來緩存這個查詢......但是當用戶第一次進入在緩存中24小時後運行這個查詢的頁面時,這個查詢正在運行,這個站點基本上停止了。

我們正在考慮將查詢放在後臺線程上。這會很好地與memcache一起工作,並會幫助網站的性能?數據庫仍在處理大查詢會影響其他頁面的加載嗎?

+0

取決於「網站基本崩潰」的原因。這個大查詢是否導致鎖爭用?餓了其他I/O進程?溢出巨大的臨時文件並導致嚴重的磁盤損壞?您需要從制定系統瓶頸的位置開始,以及減慢其他查詢的速度。查看'pg_locks'並查看http://wiki.postgresql.org/wiki/Lock_Monitoring。使用vmstat,top等(如果你可以在Heroku上)觀察系統的負載。查看'pg_stat_activity'查看是否有很多查詢排隊,如果是,它們處於什麼狀態。 – 2013-03-12 23:55:55

回答

1

如果問題不是dyno上的資源密集型問題或鎖定數據庫可能會有所幫助。

如果這兩種情況都不正確,您可以簡單地將某些內容(以前的版本,可能在緩存過期之前啓動該進程)返回給啓動客戶端並旋轉一個新線程。

如果強度在測功機上而不是數據庫上,則可以嘗試旋轉工人測功機或scheduled job

如果您的數據庫被鎖定,那麼您將回到繪圖板。

哦,如果你的應用程序只使用一個數據庫連接,一定要打開另一個線程(一個測功機將自己照顧自己)。