Se um usuário estiver inscrito é muitos cursos, centenas ou milhares de curso, o processo de login é muito lento. Isso ocorre uma vez que o Moodle carrega permissão de todos os cursos que o usuário estiver inscrito de uma só vez.
Se o seu Moodle estiver nessa situação, uma alternativa é fazer hacker de código para que seja carregado permissão só do curso que o aluno vai acessar. Para isso, siga os seguintes passos:
1) Abra o arquivo MOODLE_DIR/lib/accesslib.php
2) Localize a função get_user_access_sitewide($userid)
3) Adicione o seguinte código aproximadamente na linha 838
global $USER;
$courseid=0;
$cousesql= "";
$ref=$_SERVER['REQUEST_URI'];
$pos=strpos($ref,'course/view.php?id=');
$posas=strpos($ref,'course/loginas.php');
if($pos || $posas){$courseid= optional_param('id', NULL,PARAM_INT);}
if($courseid>0){$cousesql= " AND ctx.instanceid=$courseid ";}
Esse código atribuir um comando SQL na variável $cousesql caso o usuário está tentando entrar em um curso antes de logar.
Em seguida, adicione no trecho do código SQL a variável $cousesql depois da claúsula WHERE como mostra o código abaixo. O código inserido dentro do SQL está destacado em vermelho.
$sql = "SELECT ctx.path, ra.roleid, ra.contextid
FROM {role_assignments} ra
JOIN {context} ctx
ON ctx.id = ra.contextid
LEFT JOIN {block_instances} bi
ON (ctx.contextlevel = ".CONTEXT_BLOCK." AND bi.id = ctx.instanceid)
LEFT JOIN {context} bpctx
ON (bpctx.id = bi.parentcontextid)
WHERE ra.userid = :userid $cousesql
AND (ctx.contextlevel <= ".CONTEXT_COURSE." OR bpctx.contextlevel < ".CONTEXT_COURSE.")";
Essa alteração faz leitura de permissão apenas do curso em que estiver navegando antes de logar. Esse hacker não se aplica se usuário logar no Moodle e depois entrar no curso.
4) Salve as alterações