/ / Ruby on Rails: Prečo prvý aktívny záznamový záznam trvá dlhšie? - mysql, rubín na koľajniciach, rubín na koľajniciach-3, aktívny záznam

Ruby on Rails: Prečo prvý aktívny záznam trvá dlhšie? - mysql, rubín na koľajniciach, rubín na koľajniciach-3, aktívny záznam

Ak vykonám aktívny záznamový záznam po nejakej časovej medzere, trvá to dlhšie.

Povedzte Item.all trvá .11 sek na prvý dotaz a .003 neskôr. čo by mohlo byť dôvodom tohto správania?

upravil: aktívny záznam pamäte cache záznamu je činnosť regulátora.V mojom prípade je aktívny záznamový dotaz v následnej žiadosti http je tiež rýchlejšie.

odpovede:

3 pre odpoveď č. 1

Možné vysvetlenia:

  1. ActiveSyncord Caching
  2. Zlúčenie pripojení (nie je potrebné reštartovať spojenie)
  3. Načítať webový server alebo server db.

1 pre odpoveď č. 2

ActiveRecord ukladá výsledky z dopytu. Prvý dopyt skutočne zasiahne databázu - ActiveRecord potom čaká na dokončenie operácie a analyzuje výsledky do svojich objektov. Pri ďalšom uskutočnení rovnakého dotazu majú výsledky výsledky uložené do vyrovnávacej pamäte, takže sa okamžite vrátia, namiesto toho, aby sa vrátili späť do databázy.

Skontrolovať API pre QueryCache: zdá sa, že môžete vymazať vyrovnávaciu pamäť dotazov (connection.clear_query_cache), ak chcete vymazať dopyty uložené v pamäti.

Táto otázka SO tiež naznačuje self.class.uncached do ... end vynechať vyrovnávaciu pamäť, ale nie som si istý, či to stále platí v Rails 3.


0 pre odpoveď č. 3

Určite je to ukladanie do vyrovnávacej pamäte služby ActiveRecord, na ktoré sa pozeráte. Pozri dokument.

Všetky metódy sú založené na jednoduchom ukladaní do vyrovnávacej pamäteprincíp, ktorý bude uchovať výsledok posledného dopytu, pokiaľ nie je konkrétne pokyn, aby to nebolo. Cache je dokonca zdieľaná v rôznych metódach, aby sa dosiahla dokonca lacnejšie používať makro pridané metódy bez toho, aby ste sa veľmi báli o výkonnosti na prvom kroku.