2013-03-08 10 views
5

Wykonanie dużego zapytania dotyczącego aktywnych kwerend z dużą ilością obiektów peryferyjnych.Aktywne ładowanie wstępne powodujące pogorszenie wydajności po wystąpieniu skutku

Dodanie ".includes" (wstępne ładowanie) znacznie przyspiesza poprzez zgniatanie wszystkich N + 1 z .

Strona czym świadczy szybki i pluje na to uwagę w dziennikach:

Completed 200 OK in 504ms (Views: 104.2ms | ActiveRecord: 86.0ms) 

Jednak jest następnie * 90 sekund * aż strona jest rzeczywiście zesłał przeglądarki (lub dyni; testowaliśmy oba).

W tym czasie proces ruby ​​ma procesor ustalony na 100%.

Jeśli usuniemy ".includes" (wstępne ładowanie), powróci on do normalnej, niezręcznej wydajności bez minimalnej przepaści nicości między renderowaniem strony a przeglądarką.

WTF powoduje, że wstępne ładowanie powoduje efekt !?

Jeden z kolegów postawił hipotezę problemu zbierania śmieci; jak mogę przetestować tę teorię?

szyn 3.2.12

Ruby 1.9.3 (p286 i p327 testowanych)

Odpowiedz

1

Znaleziono problem; to był klejnot Bullet (https://github.com/flyerhzm/bullet).

Ten klejnot sprytnie znajduje i zgłasza zapytania N + 1 i nadgorliwe zawiera, ale w przypadku bardzo dużych zestawów wyników znacznie upośledza wydajność aplikacji.

Powiązane problemy