Dobrý den,
jednomu z našich vyučujících se nedaří vytvořit kopii testu (duplicate quiz) ve svém kurzu.
Po kliknutí na Duplikovat se spustí zálohování do /moodledata/temp/backup/4012343ce2574cb99504725e9371fea7/ a začne se v něm vytvářet (mimo jiných) soubor questions.xml, který cca po 1h nabyde velikosti několik GB a celý proces zkolabuje vyčerpáním paměti: PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 8388608 bytes)
Navýšení paměti na dvojnásobek nepomohlo. Zálohovací proces trval déle, soubor questions.xml se ještě zvětšil, ale vše skončilo opět chybou: PHP Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 16777216 bytes) in /moodle/lib/dml/mysqli_native_moodle_database.php on line 1284
Při hledání na Internetu jsem narazil na diskusi Clone of Quizzes taking hours https://moodle.org/mod/forum/discuss.php?d=375201
SQL dotaz na počet náhodných otázek v tabulce mdl_question (SELECT count(id) FROM mdl_question WHERE qtype='random';) vrací výsledek count(id) 6586908
Dále posílám výpisy skriptu scheduled_task.php --execute=\\qtype_random\\task\\remove_unused_questions' potvrzující obrovský nárůst náhodných otázek během posledních 14ti dní.
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 17.01.2023 01:32 3 min. 22.77 sekund 480004 čtení 193600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 16.01.2023 16:21 3 min. 24.31 sekund 480006 čtení 193600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 16.01.2023 16:06 2 min. 35.84 sekund 368407 čtení 150913 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 16.01.2023 16:05 35.22 sekund 80009 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 16.01.2023 01:32 34 sekund 80005 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 15.01.2023 01:31 34.47 sekund 80005 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 14.01.2023 01:32 34.43 sekund 80005 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 13.01.2023 01:31 34.2 sekund 80005 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 12.01.2023 13:43 36.38 sekund 80005 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 12.01.2023 01:32 37.93 sekund 80005 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 11.01.2023 01:32 38.22 sekund 80005 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 10.01.2023 01:31 38.81 sekund 80005 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 9.01.2023 01:32 38.48 sekund 80005 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 8.01.2023 01:31 32.7 sekund 80005 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 7.01.2023 01:32 35.06 sekund 80005 čtení 40600 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 6.01.2023 01:32 1.26 sekund 2484 čtení 1258 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 5.01.2023 01:32 0.1 sekund 1 čtení 0 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 4.01.2023 01:32 1.15 sekund 2245 čtení 1135 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 3.01.2023 01:32 0.09 sekund 1 čtení 0 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 1.01.2023 01:31 0.08 sekund 1 čtení 0 zápisů Úspěch
Odstranit nepoužité náhodné otázky \qtype_random\task\remove_unused_questions Naplánováno 31.12.2022 01:32 0.09 sekund 1 čtení 0 zápisů Úspěch
Skript Odstranit nepoužité náhodné otázky '\qtype_random\task\remove_unused_questions' by se měl podle nastavení v plánovači (Naplánované úlohy)
Komponenta: Náhodná qtype_random
Poslední spuštění: Úterý, 17. leden 2023, 01.35)
Další spuštění: ASAP
Minuta: 15
Hodina: *
Den: *
Den v týdnu: *
Měsíc: *
Chybové zpoždění: 0
Výchozí: Ano
spuštět v každé 15. minutě každé hodiny, ale spouští se pouze 1x denně v noci, což možná souvisí s frekvencí spouštění skriptu admin/cli/cron.php
Ve zmiňovaném vláknu (https://moodle.org/mod/forum/discuss.php?d=375201) radí uživatelé, které se s tímto problémem setkali, spouštět opakovaně skript Odstranit nepoužité náhodné otázky (třeba každých 5 minut), dokud nedojde ke snížení počtu nepoužitých náhodných otázek na rozumnou hodnotu a tím vyřešení problému.
Je toto správný postup? Je poté potřeba nějaké ruční promazání adresáře /moodledata/temp/backup/ nebo tabulky mdl_backup_controllers, např. záznamy, které mají jiný status než STATUS_FINISHED_OK =1000 ?
Moodle používáme > 15let, aktuálně verzi 3.9.11
Zahrnout banku úloh backup | backup_general_questionbank: ANO (výchozí)
Zahrnout banku úloh backup | backup_import_questionbank: ANO (výchozí)
Zahrnout banku úloh backup | backup_auto_questionbank: ANO (výchozí)
Povolit asynchronní zálohy enableasyncbackup: NE (výchozí)
Extra navýšení paměťového limitu PHP extramemorylimit: 1024M (výchozí 512M)
Předem děkuji za jakoukoli odpověď.
S pozdravem,
Josef Kovář
Metropolitní univerzita Praha, o.p.s.
ale spouští se pouze 1x denně v noci, což možná souvisí s frekvencí spouštění skriptu admin/cli/cron.php
No a jak často tedy spouštíte cron.php? Měl by se spouštět ideálně každou minutu. Jedině tak může plánovač úloh efektivně rozvrhnout spouštění úloh v požadovaných intervalech a časech.
admin/cli/cron.php se spouští pravidelně každou noc v 01:30. Nevím, jaké doporučení jeho spouštění bylo v roce 2008, kdy jsme Moodle instalovali, ale doteď s tím nikdy žádný problém nebyl. Každopádně toto původní nastavení mohu změnit.
Chápu tedy správně, že pouze touto změnou a spouštěním cronu každou minutu dojde časem samo k vyřešení problému a už se nebude opakovat? Nebo je z mé strany zapotřebí něco dalšího?
Je možné zjistit, kde nastala chyba vedoucí k takovému nárůstu náhodných otázek v tak krátkém časovém intervalu? Rád bych to dotyčnému vyučujícímu vysvětlil, co měl udělat jinak, aby se situace neopakovala.
Děkuji za odpověď.
Josef Kovář
Josef Kovář
Já bych začal tím, že budete spouštět častěji ten cron, nejlépe každou minutu - * * * * *
Proč vám tam ale takto bují ty náhodné otázky, to netuším.
Dobrý den,
děkuji za odpověď. Spouštění CRONu jsem upravil. Z celkového počtu > 6,5 miliónu random questions (SELECT count(id) FROM mdl_question WHERE qtype='random';) zůstalo nyní jen okolo 10 tisíc a dále jejich počet v tuto chvíli nenarůstá.
| Proč vám tam ale takto bují ty náhodné otázky, to netuším.
V diskusi https://moodle.org/mod/forum/discuss.php?d=389931#p1571763 jsem narazil na zajívavý odkaz https://yoursite/admin/tool/health/, který mi vypisuje První pomoc - Nalezeny problémy v instalaci!:
1) Random questions data consistency
For random questions, question.parent should equal question.id. There are some questions in your database for which this is not true. One way that this could have happened is for random questions restored from backup before MDL-5482 was fixed.
Zobrazit řešení:
Upgrade to Moodle 1.9.1 or later, or manually execute the SQL
UPDATE mdl_question SET parent = id WHERE qtype = 'random' and parent <> id;
2) Question categories should belong to a valid context
All question categories are linked to a context id, and, the context they are linked to must exist. The following categories belong to a non-existant category:
<výpis 318ti > 8 let starých otázek>
Any of these categories that contain no questions can just be deleted form the database. Other categories will require more thought.
Zobrazit řešení:
You can delete the empty categories by executing the following SQL:
DELETE FROM mdl_question_categories
WHERE
NOT EXISTS (SELECT * FROM mdl_question q WHERE q.category = mdl_question_categories.id)
AND NOT EXISTS (SELECT * FROM mdl_context con WHERE contextid = con.id)
Any remaining categories that contain questions will require more thought. People in the Quiz forum may be able to help.
Měl bych se tím zabývat a UPDATE resp. DELETE příkazy provést nebo to raději nechat, jak je to teď?
S pozdravem,
Josef Kovář
Já osobně bych na svém serveru oba SQL příkazy spustil. Pro jistotu si předtím udělejte kompletní zálohu databáze (SQL dump), ale oba jsou validní.
Zdravím,
problém z největší pravděpodobností souvisí s touto chybou/problémem:
https://tracker.moodle.org/browse/MDL-64595Tím, že jste nespouštěl CRON dostatečně často, se problém ještě umocnil (v rámci dílčího řešení tohoto problém je tam implementováno pravidelné promazávání těchto "zbytečných" random qpestions).
Honza Wohlgemuth
chtěl bych se ještě poradit.
Úpravou plánovače úloh a opakovaným prováděním skriptu scheduled_task.php --execute=\\qtype_random\\task\\remove_unused_questions' došlo ke smazání > 6miliónů nikdy nepoužitých náhodných otázek, viz můj příspěvek výše z úterý, 24. ledna 2023, 15.56.
Bohužel smazání každé jednotlivé otázky bylo zalogováno vytvořením záznamu v tabulce 'mdl_logstore_standard_log', např.
"id","eventname","component","action","target","objecttable","objectid","crud","edulevel","contextid","contextlevel","contextinstanceid","userid","courseid","relateduserid","anonymous","other","timecreated","origin","ip","realuserid"
"9110591","\core\event\question_deleted","core","deleted","question","question","1451071","d","1","55326","50","897","2","897",NULL,"0","a:1:{s:10:""categoryid"";s:4:""7207"";}","1674034201","cli",NULL,NULL
Tyto záznamy nyní činí problém při pravidelném automatickém zálohování 2 kurzů, které končí výpisem admin/cli/cron.php o vyčerpání Allowed memory size:
Automated backup for course: Institutions and Decision Making in the EU encounters an error.
Automated backup for course: Instituce a rozhodování EU - prezenční encounters an error.
PHP Fatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 8192 bytes) in /var/www/mup.cz/moodle/backup/util/xml/output/xml_output.class.php on line 117
PHP Fatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 1052672 bytes) in /var/www/mup.cz/moodle/cache/stores/file/lib.php on line 371
Myslíte, že je bezpečné a mohu z tabulky 'mdl_logstore_standard_log' smazat všechny záznamy týkající se nikdy nepoužitých náhodných otázek u 2 problematických kurzů?
DELETE FROM `mdl_logstore_standard_log` WHERE component='core' AND action='deleted' AND target='question' AND objecttable='question' AND timecreated>'1674034201' AND timecreated<'1674072906' AND courseid='897'; // 3.708.633 záznamů celkem
DELETE FROM `mdl_logstore_standard_log` WHERE component='core' AND action='deleted' AND target='question' AND objecttable='question' AND timecreated>'1674034201' AND timecreated<'1674072906' AND courseid='899'; // 2.621.335 záznamů celkem
Předem děkuji za odpověď.
S pozdravem,
Josef Kovář
je bezpečné a mohu z tabulky 'mdl_logstore_standard_log' smazat všechny záznamy
Ano.