本番環境では、Railsアプリケーションで頻繁なスパイク(〜1時間ごと)が発生していました。もっと深く掘り下げていくと、1回のHTTPリクエストで累積的に1.5秒を超える(100倍と呼ばれる)次のクエリが原因です。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などでこのレスポンスをどのようにキャッシュし、その頻度を減らすかを考え出すことができます。私はすべてのコアレールを取り除くわけではありませんが、MTLでキャッシュすると役立つかもしれません。ちょっとした考え。 – engineersmnky
編集のThx。事は、明示的にこれを明示的に呼ぶことはありません。おそらく何かの副作用。どんなアイデアをどのようにバックトレースするには? –
'が1.5ミリ秒を超えて実行されています。私は遅い*とは言わず、100倍と呼ばれますが、繰り返し100回は呼び出さないでしょう。これはRoRの「機能」のように見えます – joop