problém s duplikací testu v kurzu

problém s duplikací testu v kurzu

autor Josef Kovar -
Počet odpovědí: 9

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.

Počet hodnocení: -
V odpovědi na Josef Kovar

Re: problém s duplikací testu v kurzu

autor David Mudrák -
Obrázek: Moodle HQ Obrázek: Obzvláště nápomocní moodlisté Obrázek: Překladatelé Obrázek: Vývojáři

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.

V odpovědi na David Mudrák

Re: problém s duplikací testu v kurzu

autor Josef Kovar -
30 01 * * *
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ář
V odpovědi na Josef Kovar

Re: problém s duplikací testu v kurzu

autor Josef Kovar -
Mohu ještě očekávat nějaký příspěvek s odpovědí na položené otázky nebo už čekám marně?
Josef Kovář
V odpovědi na Josef Kovar

Re: problém s duplikací testu v kurzu

autor David Mudrák -
Obrázek: Moodle HQ Obrázek: Obzvláště nápomocní moodlisté Obrázek: Překladatelé Obrázek: Vývojáři

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.

V odpovědi na David Mudrák

Re: problém s duplikací testu v kurzu

autor Josef Kovar -

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ář

V odpovědi na Josef Kovar

Re: problém s duplikací testu v kurzu

autor David Mudrák -
Obrázek: Moodle HQ Obrázek: Obzvláště nápomocní moodlisté Obrázek: Překladatelé Obrázek: Vývojáři

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í.

V odpovědi na Josef Kovar

Re: problém s duplikací testu v kurzu

autor Jan Wohlgemuth -
Obrázek: Moodle Partner Obrázek: Obzvláště nápomocní moodlisté

Zdravím,

problém z největší pravděpodobností souvisí s touto chybou/problémem:

https://tracker.moodle.org/browse/MDL-64595


Tí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 

V odpovědi na Jan Wohlgemuth

Re: problém s duplikací testu v kurzu

autor Josef Kovar -
Dobrý den,
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ář