Wie man eine langsame implizite Abfrage in der Tabelle pg_attribute in Rails @ behe

In unserer Produktionsumgebung haben wir in unserer Rails-Anwendung häufige Spitzen (~ alle 1 Stunde) festgestellt. Wenn Sie tiefer gehen, liegt dies an der folgenden Abfrage, die in einer einzelnen HTTP-Anforderung kumulativ in mehr als 1,5 s (als 100x bezeichnet) ausgeführt wird.

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

Wir haben keinen Code, der diese Tabelle explizit aufruft, aber anscheinend wird sie von Rails aufgerufen, um die Attribute für jedes Modell herauszufinden. " Unerwartete SQL-Anfragen an die Postgres-Datenbank auf Rails / Heroku" ist verwandt

Aber sollte es nicht von Rails nicht wiederholt aufgerufen werden?

Wie beschleunigen wir das?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage