Zbytečně provedený dotaz „SET NAMES utf8“
- Myiyk
- Člen | 321
Ahoj,
zkoumám jak vylepšit výkon stránek. Data jsou statická, takže po jednom
načtení z DB se již databáze nadále nepoužívá.
Přestože stránka již je v cache a nic se nenačítá z databáze, MySqlDriver
provede dotaz SET NAMES 'utf8'
Naprosto zbytečně to zatěžuje server.
Dá se to nějak obejít?
- Filip Procházka
- Moderator | 4668
První dotaz na databázi, ten který otevírá spojení, většinou trvá déle, než kdybys ho vykonal třeba jako třetí. Tedy vidíš zkreslené údaje – ve skutečnosti tě to nezatěžuje vůbec.
Ovšem pokud je to jediný dotaz na databázi, tak se ti spojení otevírá zcela zbytečně (což je ta věc co tě zatěžuje, né to jedno SQLko, které jenom nastaví nějakou proměnnou) a tedy bys měl databázi nastavit tak, aby se ti připojovala lazy, jak píše @matej21.
- Myiyk
- Člen | 321
Ano, mám tam lazy
Ale když si dívám do zdrojáku https://api.nette.org/…ver.php.html#38,
řádek 38. A všechno co se tam potom spustí, tak se tam lazy vůbec
nekontroluje.
- David Matějka
- Moderator | 6445
ale driver se vytvari az tady,
si proste do connect pridej throw new \Exception
a uvidis, odkud to
bylo vyvolany…
Editoval matej21 (4. 10. 2014 15:34)
- Myiyk
- Člen | 321
Už jsem na to přišel. Volám model, ale ten model nepoužije fetch ani nic podobného. V šabloně se data z modelu nevypisují, proto se ani nenačítají z databáze. Ale při tom volání modelu, se vytvoří Selection a načítá se MySqlDriver, který se sice nepoužije. Ale v driveru ve __construct se napevno volá „set names“.
Toto chování mi přijde chybné.
Testy databáze jedou na Postgress (PgSqlDriver), takže chybu neodhalí.