11

我有这个 MySQL

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

如果我 cronjob,这对保持 sys_log 很小有好处吗?

4

5 回答 5

10

是和否

如果你关心你的记录历史,那不是。您可以使用 sys_history 表恢复对记录(内容、页面等)的更改。sys_history 表和 sys_log 表是相关的。当您截断 sys_log 时,您也失去了回滚对系统的任何更改的能力。您的客户可能不喜欢这样。

如果您只关心 sys_log 大小,那就是这样。通过 cron 截断表格很好。

在 TYPO3 4.6 及更高版本中,您可以使用表垃圾收集调度程序任务 als pcampe 说。对于 4.5 以下的 TYPO3 版本,您可以使用tablecleaner扩展。如果您从 sys_log 中删除早于 [N] 天的所有记录,您还将保留您的记录历史记录 [N] 天。这对我来说似乎是最好的解决方案。

请首先尝试修复填充您的 sys_log 的内容 ;-)

于 2013-03-22T10:12:20.590 回答
7

是的。

另请参阅Jochen Weiland关于保持 TYPO3 安装干净和小巧的其他建议

于 2012-06-27T17:00:49.037 回答
7

为此有一个调度程序任务。

它被称为Table garbage collection (scheduler)

在 TYPO3 4.7 中,它只能清理sys_log表。从 TYPO3 6.0 开始,它还可以清理sys_history桌子。您可以配置天数和要清理的表。

扩展可以注册更多的表来清理。

于 2012-06-29T09:32:36.293 回答
6
Since TYPO3 9, the history is no longer stored using sys_log.
You can safely delete records from sys_log.

请参阅重大更改 #55298

简短的回答:

不,这绝对不是一个好主意(除非您使用的是 TYPO3 9 或更高版本,请参阅本文底部的注释)。如果您真的想从 sys_log 中删除内容,请记住 sys_history 仍在引用它。你也应该对 sys_history 做同样的事情。

或者,只需执行以下操作:

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 

随意根据您的要求对其进行优化。

您还可以安全地(不影响 sys_history)删除带有 sys_log.error != 0 的记录。

还有一些建议:

  • 在开发中将调试级别设置为详细(警告),但在生产中仅出错
  • 定期查看系统日志并排除问题。解决问题后,您可以从 sys_log 中删除特定错误(请参阅 sys_log.error != 0, sys_log.details)。您可以使用数据库命令或在较新的 TYPO3 版本上使用后端中的“SYSTEM: log”并使用“删除类似错误”按钮来执行此操作:

在此处输入图像描述

  • 您还可以考虑在主要版本升级时使用低级清理器和删除记录并删除已删除=1 的记录truncate sys_logtruncate sys_history不过,请务必先与编辑附近的人交谈,因为这将删除整个历史记录。确保您愿意这样做。

对于调度程序任务“表垃圾收集”,请参阅文档:https ://docs.typo3.org/c/typo3/cms-scheduler/master/en-us/Installation/BaseTasks/Index.html

于 2018-02-17T19:43:46.677 回答
1

大表的另一个常见原因sys_log是 TYPO3 安装中使用的扩展之一中的问题/错误。

使用旧版本的常见示例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

这组记录每隔一分钟左右就会弹出sys_log一次,从而在短时间内产生数百万条记录。

幸运的是,这些记录对记录历史和相关的回滚功能没有任何影响sys_history,因此删除它们是安全的。

如果你有一个大的sys_log,这可能会导致LOCK超时问题,所以你必须限制删除查询:

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

于 2013-05-28T12:43:17.223 回答