Nette caching SQLliteJournal velmi pomalý

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jiří Nápravník
Člen | 710
+
+1
-

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
+
+1
-

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
+
0
-

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
+
0
-

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
+
0
-

@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
+
0
-

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
+
0
-

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
+
0
-

@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
+
+1
-

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
+
0
-

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:)

jan.reges
Člen | 10
+
0
-

Ahoj kluci,

vidím, že v posledním Nette je v SQLiteJournal.php nastavení PRAGMA journal_mode = WAL, ale PRAGMA synchronous = OFF tam není.

Nezkoušeli jste někdo na produkci, jestli to funguje spolehlivě s PRAGMA synchronous = OFF?

Díky.