2012-06-27 6 views
9

mam to MySQLNajlepszy sposób na utrzymanie logu sys_log TYPO3 ładnie i czysto?

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

Czy to dobre dla utrzymując sys_log małe, jeśli cronjob go?

+1

Czy cronjob rzeczywiście jest czasownikiem? – HerrSerker

+0

Nie, to jest rzeczownik. To cronjob. Cronjob. Chociaż osobiście nie mam nic przeciwko twórczemu tworzeniu słów tutaj. Jeśli masz coś przeciwko, czy chcesz edytować? – wirap

Odpowiedz

8

Tak i Nie

To NIE JEST jeśli dbasz o historii rekordu. Możesz przywrócić zmiany w zapisach (zawartość, strony itp.) Przy użyciu tabeli sys_history. Tabele sys_history i tabele sys_log są powiązane. Po obcięciu sys_log, tracisz także możliwość wycofywania zmian w systemie. Twoi klienci mogą tego nie lubić.

It IS jeśli zależy Ci tylko na rozmiarze sys_log. Obcinanie tabeli przez cron jest w porządku.

W TYPO3 4.6 i nowszych można użyć zadania harmonogramu zbierania pamięci, als pgampe mówi. W wersjach TYPO3 poniżej 4.5 można użyć rozszerzenia tablecleaner. Jeśli usuniesz wszystkie rekordy z sys_log starszego niż [N] dni, zachowasz także swoją historię rekordów przez [N] dni. To wydaje się być najlepszym rozwiązaniem dla mnie.

I proszę próbować naprawić to, co wypełnia swoje sys_log na pierwszym miejscu ;-)

+0

Szybki komentarz - IIRC jest zadaniem programu planującego, dzięki czemu można utrzymać porządek w domu "wewnątrz" instalacji TYPO3 i nie mają uruchomionych innych zewnętrznych zadań cli –

6

Jest harmonogram zadań do tego.

Nazywa się Table garbage collection (scheduler).

W TYPO3 4.7 można wyczyścić tylko tabelę sys_log. Począwszy od TYPO3 6.0, może również wyczyścić tabelę sys_history. Możesz skonfigurować liczbę dni i jakie tabele należy wyczyścić.

Rozszerzenia mogą rejestrować kolejne tabele do czyszczenia.

+0

Jak to się nazywa? – HerrSerker

+0

Dodałem nazwę i kilka dodatkowych słów w odpowiedzi. – pgampe

+0

w typo3 4.7.8 tego zadania nie można zaplanować z poziomu backendu z powodu różnych błędów w rozszerzeniu programu planującego.Zobacz błąd 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

Inną częstą przyczyną dużych sys_log tabelach są kwestie/błędy w jednym z rozszerzeń stosowanych w instalacji TYPO3.

Typowym przykładem gdy używana jest stara wersja 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 

Ten zestaw rekordów pojawi się w sys_log co minutę lub tak, co prowadzi do milionów rekordów w krótkim okresie czasu.

Na szczęście ten rodzaj rekordów nie ma żadnego wpływu na historię rekordów w sys_history i związaną z tym funkcją wycofywania, więc można bezpiecznie je usunąć.

Jeśli masz dużą sys_log to będzie prawdopodobnie powodować problemy z LOCK limity czasu, więc trzeba ograniczyć zapytania Usuń:

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

1

Krótka odpowiedź:

Nie, to zdecydowanie nie jest dobry pomysł. Jeśli naprawdę chcesz usunąć pliki z sys_log, pamiętaj, że sys_history wciąż się do nich odwołuje. Powinieneś zrobić to samo dla sys_history.

Albo, po prostu wykonaj następujące czynności:

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 

Zapraszam do optymalizacji tego dla własnych potrzeb.

Co można również zrobić bezpiecznie (bez wpływu sys_history) usuwa rekordy z sys_log.error = 0.

Oczywista odpowiedź:

  • Wykonać badania w rozwoju, a nie produkcję . Wyeliminuj swoje błędy w rozwoju. Trenuj i ćwicz swoich programistów, aby mieć na to oko.
  • Ustaw poziom debugowania do opisowy (Ostrzeżenia) na rozwój, ale błędy tylko w produkcji
  • Monitorować sys_log ściśle, przez skrypt lub ręcznie

Niektóre dalsze zalecenia:

  • Regularnie przeglądaj dziennik sys i usuwaj problemy. Możesz usunąć konkretny błąd z sys_log po rozwiązaniu problemu (patrz sys_log.error! = 0, sys_log.details). Można to zrobić za pomocą polecenia bazy danych lub w nowszych wersjach TYPO3 użyć „System: log” przycisk w backend i użyć opcji „Usuń podobnych błędów”:

enter image description here

  • Na każdej większej aktualizacji , robimy truncate sys_log i truncate sys_history, razem z użyciem czyszczenia na poziomie prostym (które usuwa na przykład rekordy z usuniętym = 1). Koniecznie najpierw porozmawiaj z kimś w pobliżu edytorów, ponieważ spowoduje to usunięcie całej historii. Utrzymujemy starą wersję starszej wersji TYPO3 online tylko z dostępem wewnętrznym. Chcemy zachować porządek :)

W nowszych wersjach TYPO3 nie będzie już problemu z relacją między sys_log a sys_history. Spójrz na Breaking Change #55298 w TYPO3 9.