2011-09-20 3 views
12

Ho un controller che restituisce JSON o XML da una query relazionale abbastanza complessa con qualche logica del controller.Rails - Tempo completato per una richiesta significativamente superiore rispetto ai tempi di visualizzazione e DB

Mi sono sintonizzato sul lato DB perfezionando la mia query e assicurandomi che i miei indici siano corretti per la mia query.

Nel mio registro vedo articoli come questo:

Completed in 740ms (View: 1, DB: 50) 

Quindi, se ho capito bene questo significa che la vista ha preso 1 secondo per il rendering e la query DB era 50ms. È tutto il tempo rimanente nel controller? Ho provato a bypassare la logica del mio controller e ho lasciato il mio to_json e to_xml lì ed è altrettanto lento. Come punto di riferimento il mio set di risultati JSON medio restituito è 168k.

Ci sono altri passaggi che vanno al completamento in tempo? Include il tempo fino all'ultimo byte per il trasferimento di rete?

Aggiornamento: ho avvolto varie parti del mio controller in blocchi di benchmarking:

self.class.benchmark("Active Record Find") do 
    #my query here 
end 

Quello che ho trovato è che anche se la linea di log dice DB: 50 mio record attivo ritrovamento sta prendendo la quasi totalità del tempo rimanente. Così ora sono confuso su cosa significhi quel numero di DB e perché la linea di riferimento dirà ~ 600ms ma il DB: il tempo sarà ~ 50.

Grazie

+0

si prega di inviare le query e la logica di controllo – jschorr

+0

Cercavi 1ms per la vista per rendere ? – lulalala

risposta

10

tuo numero di DB è tempo effettivamente speso nel database, ma non il caricamento di oggetti ActiveRecord.

Quindi, se si sta caricando 168.000 oggetti rubino active_record per rendere poi come JSON, questo spiegherebbe i tuoi 550 ms (o più!)

+0

Not 168k records. 168 k di testo JSON. Ma sì, hai ragione, la durata del DB era bassa ma "scaricata" era alta a causa di un gran numero di: include. Grazie per aver chiarito cosa significava quel numero. Sono stato in grado di azzerare il problema. – Nick

Problemi correlati