Nette caching SQLliteJournal velmi pomalý
- Jiří Nápravník
- Člen | 710
Zaktualizoval jsem na nejnovější Nette a s ním spojené nette/caching, které jako defaultní journal používá sqlite a v tom je problém, je extrémně pomalejší než stávající filejournal. Setkal se s tím někdo?
Nějaká čísla při generování (měřeno z tracy baru na localhostu, na
serveru je to podobné a tam ještě jako bonus dostanu něklikrát database
locked…)
Filejournal: 39sekund
SqlJournal: 120 sekund
Zkusil jsem pak hledat po netu, co se týče zrychlení a bylo
doporučeno:
PRAGMA journal_mode=WAL – to když jsem přidal, tak mám 40sekund
pak bylo doporučeno dát
PRAGMA synchronous=NORMAL – to jsem se dostal na 30 sekund
Nestálo by za to přidat tato „zrychlení“ i do nette chaching automaticky, pokdu ot nemá žádný další vliv na funkci. Případně co byste doporučili na to, aby to šlo zrychlit? Ano mohu přejít na FileJournal zatím, ale v masteru koukám, že už se s ním nejspíše nepočítá.
Editoval Jiří Nápravník (15. 10. 2015 15:02)
- David Grudl
- Nette Core | 8228
FileJournal byl rychlejší, ale protože ho už jeho původní autor nevyvíjí a nikdo jiný mu nerozumí, nahradili jsme ho SQliteJournalem. Pokud se ti ho podaří nějak zrychlit, pošli prosím pull request.
- Jan Tvrdík
- Nette guru | 2595
protože ho už jeho původní autor nevyvíjí a nikdo jiný mu nerozumí
A navíc tu chybu nikdo nedokázal reprodukovat.
- Jiří Nápravník
- Člen | 710
Musel jsem přejít zpět na FileJournal, protože v nasazení naostro jsem měl problémy i s těmi „zrychleními“. Problém pak byl zase, když jsem chtěl odebrat z cache podle tagů… To bylo až osminásobně pomalejší a nedalo se tak se systémem pracovat.
Zkusím si s tím ve volných chvílích hrát, třeba na něco narazím… Ale překvapuje mě, že na to nikdo nenarazil zatím…
Editoval Jiří Nápravník (15. 10. 2015 15:17)
- Milo
- Nette Core | 1283
@JiříNápravník Zkusil bych přímo
PRAGMA synchronous = OFF
, jako v SQLiteStorage.
IMHO, pro PHP aplikace bezpečné (problematika v manuálu
SQLite).
Btw. kolik záznámů do toho žurnálu dáváte? Na notebooku se mi se
synchronous = OFF
povedlo asi 90000 insertů za vteřinu.
- Jiří Nápravník
- Člen | 710
No prave, ze tam moc polozek nedavam, je jich tam po promazani 900, v podstate jenom doctrine veci (dohromady asi 56 entit).
Zkusil jsem to na poupraveném projektu (ten samy jen komplet localhost)
FileJournal: 28s
SqliteJournal: 79s
se synchronous = OFF: 34s
To uz by celkem slo, ale je otazka, jak by se to chovalo v provozu u mazani z cache apod. Celkem se to bojim nasadit ted.
- Milo
- Nette Core | 1283
Jestli to obsah žurnálu dovoluje, poslal bys mi ho na miloslav.hula na
GMailu? Nebo vystavit a link. A s tím nějaký příklad, jak mažeš
z cache, např. $cache->clean([TAGS => ['a', 'b']])
.
Podíval bych se na ANALYZE těch dotazů.
Btw. kdybys to analyzoval sám, SQLiteStudio je dobrý tool.
- cubic
- Člen | 45
@JiříNápravník Povedlo se Ti to nějak vyřešit? Aktualizoval jsem na Nette 2.4, zatím jen testovací verzi webu, ale ta rychlost je peklo. Se synchronous = OFF se sice dostanu na zlomek času, ale nevím, jestli je to ideální řešení do produkce.
Problém s rychlostí zápisu je prý na některých systémech běžný..
- David Grudl
- Nette Core | 8228
synchronous OFF: if the application running SQLite crashes, the data will be safe, but the database might become corrupted if the operating system crashes or the computer loses power before that data has been written to the disk surface.
To by mohlo být pro potřeby webové aplikace bezpečné, nicméně co to
zkombinovat s PDO::ATTR_PERSISTENT => TRUE
?
- Jiří Nápravník
- Člen | 710
cubic napsal(a):
@JiříNápravník Povedlo se Ti to nějak vyřešit? Aktualizoval jsem na Nette 2.4, zatím jen testovací verzi webu, ale ta rychlost je peklo. Se synchronous = OFF se sice dostanu na zlomek času, ale nevím, jestli je to ideální řešení do produkce.
Problém s rychlostí zápisu je prý na některých systémech běžný..
Je to asi systém od systému. Mám jedno clusterové řešení, kde mám dva weby a tam je to hodně pomalý a tak tam jedu pořád na FileJournalu. Pak mám jeden stroj a na něm web a tam jedu klasicky přes Sqlite a rychlost je celkem ok. Btw je zajímavý, že na tom clusteru jsem nenarazil na ten error, kvůli kterému je FileJournal vyřazen za asi dva roky. Na tom samostatném stroji po dni mám ten error taky:)