Abbiamo individuato con ogni probabilità la causa dell'errore che abbiamo in fase di aggiornamento della piattaforma dalla versione 1.4 alla 2.3.
L'errore riguarda l'aggiornamento del database, in particolare nella fase di pre-update e riporta, tra le altre cose, la frase "
MySQL server has gone away", indicando che il server va in timeout dopo l'esecuzione di un passo del processo di aggiornamento.
Il database è su server gestiti da Aruba e non possiamo intervenire sui suoi parametri di base.
Il problema si presenta durante l'esecuzione dello script: upgrade\data\upg_data\200000_db.sql nelle righe dalla 1115 alla 1175:
-- ForEach course add a view_all role (if view exists)
INSERT ignore INTO core_role_members
select ra.idst, g.idst idstmember
from
learning_course c
join (select 1 lvl union select 2 lvl union select 3 lvl union select 4 lvl union select 5 lvl union select 6 lvl union select 7 lvl) core_lvl
join core_group g on g.groupid like concat('/lms/course/',idcourse,'/subscribed/',lvl)
join core_role r on r.roleid like concat('/lms/course/private/',idcourse,'/statistic/view')
join core_role_members rm on r.idst = rm.idst and g.idst = rm.idstMember
join core_role ra on ra.roleid like concat('/lms/course/private/',idcourse,'/statistic/view_all');
....
La query di join, se eseguita da PhpMyAdmin, va in timeout e blocca tutto il sistema fino a quando, attraverso la vista "Processi" si abbatte il processo che la gestisce.
Nel nostro database, le tabelle coinvolte nel join sono piuttosto corpose e questo potrebbe essere la causa del problema:
select count(1) from learning_course -> 1507 records
select count(1) from core_group -> 12078 records
select count(1) from core_role -> 68000 records
select count(1) from core_role_members -> 315340 records
Facciamo presente che esistono anche altre tabelle che hanno raggiunto dimensioni ragguardevoli e non sappiamo se il processo di update, nei passi successivi, possa bloccarsi anche su queste:
Come possiamo risolvere la questione e aggiornare la nostra piattaforma?