2012-06-27 9 views
9

Ho questo MySQLIl modo migliore per mantenere il TYPO3 sys_log bello e pulito?

DELETE FROM sys_log 
WHERE sys_log.tstamp < UNIX_TIMESTAMP(ADDDATE(NOW(), INTERVAL -2 MONTH)) 
ORDER BY sys_log.tstamp ASC 
LIMIT 10000 

È un bene per mantenere il piccolo sys_log, se mi cronjob esso?

+1

cronjob è in realtà un verbo? – HerrSerker

+0

No, è un nome. Questo cronjob. Un cronjob. Anche se personalmente non mi interessa la creazione creativa delle parole qui. Se ti dispiace, cura di modificare? – wirap

risposta

8

Sì e No

E NON È se avete a cuore la vostra storia di record di. È possibile ripristinare le modifiche ai record (contenuto, pagine, ecc.) Utilizzando la tabella sys_history. Le tabelle sys_history e sys_log sono correlate. Quando si tronca sys_log, si perde anche la possibilità di eseguire il rollback di eventuali modifiche al sistema. Ai tuoi clienti potrebbe non piacere.

E IS se vi interessa soltanto la dimensione sys_log. Troncare la tabella tramite cron va bene.

Con TYPO3 4.6 e versioni successive è possibile utilizzare l'attività Pianificatore di raccolta dati della tabella dei rifiuti, come dice p. Per le versioni di TYPO3 successive alla 4.5 è possibile utilizzare l'estensione tablecleaner. Se rimuovi tutti i record da sys_log più vecchi di [N] giorni, manterrai anche la cronologia record per [N] giorni. Questa sembra essere la soluzione migliore per me.

E vi prego di cercare di risolvere quello che sta riempiendo il tuo sys_log in primo luogo ;-)

+0

Un rapido commento - IIRC c'è un lavoro di pianificazione, in modo da poter mantenere la pulizia della casa "dentro" l'installazione di TYPO3 e non avere diversi job cli esterni in esecuzione –

6

V'è un compito di pianificazione per questo.

Si chiama Table garbage collection (scheduler).

In TYPO3 4.7, è possibile solo pulire la tabella sys_log. A partire da TYPO3 6.0, può anche pulire la tabella sys_history. È possibile configurare il numero di giorni e le tabelle da pulire.

Le estensioni possono registrare ulteriori tabelle da pulire.

+0

Come si chiama? – HerrSerker

+0

Ho aggiunto il nome e qualche altra parola nella risposta. – pgampe

+0

in typo3 4.7.8 questa attività non può essere programmata dall'interno del back-end a causa di vari bug nell'estensione del programma di pianificazione.Vedi bug http://forge.typo3.org/issues/48022, diff: http://forge.typo3.org/projects/typo3v4-core/repository/revisions/f3f892ee2d3915b1934a7ce62cc921a3555cf8be/diff/typo3/sysext/scheduler/class. tx_scheduler_module.php – knb

1

Un'altra causa comune per i grandi sys_log tavoli sono problemi/errori in una delle estensioni utilizzati nell'installazione TYPO3.

Un esempio comune quando si utilizza una vecchia versione di tx_solr:

Core: Error handler (FE): PHP Warning: Invalid argument supplied for foreach() in typo3conf/ext/solr/classes/class.tx_solr_util.php 
Core: Error handler (FE): PHP Warning: array_reverse() expects parameter 1 to be array, null given in typo3conf/ext/solr/classes/class.tx_solr_util.php line 280 

Questa serie di record si apriranno in sys_log ogni minuto o giù di lì che porta a milioni di record in un breve periodo di tempo.

Fortunatamente, questo tipo di record non ha alcun effetto sulla cronologia record in sys_history e la funzionalità di rollback associata, quindi è sicuro eliminarli.

Se si dispone di un grande sys_log questo probabilmente causerà problemi con LOCK timeout, quindi dovrete avere per limitare la query di eliminazione:

delete from sys_log where details LIKE 'Core:%' LIMIT 200000;

1

Risposta breve:

No, non è sicuramente una buona idea. Se vuoi davvero eliminare roba da sys_log, tieni presente che sys_history sta ancora facendo riferimento a questo. Dovresti fare lo stesso anche per sys_history.

Oppure, semplicemente effettuare le seguenti operazioni:

DELETE FROM sys_log WHERE NOT EXISTS 
(SELECT * FROM sys_history WHERE sys_history.sys_log_uid=sys_log.uid) 
AND recuid=0 AND tstamp < $timestamp LIMIT $limit 

Sentitevi liberi di ottimizzare questo per le vostre esigenze.

Che cosa si può fare anche in modo sicuro (senza intaccare sys_history) è l'eliminazione di record con sys_log.error = 0.

La risposta ovvia:!

  • fare il test in fase di sviluppo, non la produzione . Elimina i tuoi errori nello sviluppo. Allenati e fortifica i tuoi sviluppatori per tenerlo d'occhio.
  • impostare il livello di debug a verbose (Avvertenze) su sviluppo, ma gli errori-solo nella produzione
  • monitorare da vicino la sys_log, da script o manualmente

Alcuni più raccomandazioni:

  • Guarda regolarmente il registro sys ed elimina i problemi. È possibile eliminare l'errore specifico da sys_log dopo aver risolto il problema (vedere sys_log.error! = 0, sys_log.details). Si può fare questo con un comando di database o sulle versioni più recenti di TYPO3 utilizzare il "SISTEMA: log" pulsante nel backend e utilizzare il "Elimina errori simili":

enter image description here

  • Su ogni aggiornamento importante , facciamo un truncate sys_log e truncate sys_history, insieme con l'uso del pulitore a basso tenore (che cancella i record con cancellato = 1, ad esempio). Assicurati di parlare con qualcuno in vicino agli editor prima, anche se questo rimuoverà l'intera cronologia. Facciamo bene a mantenere online una versione precedente dell'istanza di TYPO3 solo con accesso interno. Ci piace mantenere le cose pulite :)

Nelle versioni più recenti di TYPO3, non ci sarà più questo problema di relazione tra sys_log e sys_history. Guardi su Breaking Change #55298 in TYPO3 9.

Problemi correlati