在我們的生產環境中,我們注意到Rails應用程序中出現頻繁的尖峯(〜每1小時)。深入挖掘,這是由於以下查詢在單個HTTP請求中累計運行時間大於1.5 s(稱爲100x)。如何修復Rails中pg_attribute表的緩慢隱式查詢
SELECT a.attname, format_type(a.atttypid, a.atttypmod), pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod FROM pg_attribute a
LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = ?::regclass AND a.attnum > ? AND NOT a.attisdropped
ORDER BY a.attnum
我們沒有明確調用該表的代碼,但似乎Rails調用它來確定每個模型的屬性。 「Unexpected SQL queries to Postgres database on Rails/Heroku」是相關的。
但不應該被Rails重複調用嗎?
我們如何加快速度?
你有沒有發現我們這裏叫什麼名字?如果是這樣,你可能會想出如何在memcache或類似的緩存中緩存這個響應,並減少頻率。我不會一起消除任何核心導軌調用,但用ttl緩存可能會有所幫助。只是一個想法。 – engineersmnky
Thx用於編輯。事情是,我們從來沒有明確地稱呼它。也許是某種事物的副作用。任何想法如何追溯? –
'運行時間大於1.5ms'我不會稱這個*慢*'爲100x',但我不會反覆調用il一百次。這看起來像一個RoR「功能」 – joop