我有这个MySQL
DELETE FROM sys_log
WHERE sys_log.tstamp < UNIX_TIMESTAMP(ADDDATE(NOW(), INTERVAL -2 MONTH))
ORDER BY sys_log.tstamp ASC
LIMIT 10000
Run Code Online (Sandbox Code Playgroud)
如果我是cronjob,这对于保持sys_log小是否有用?
是和否
如果你关心你的记录历史,那就不是了.您可以使用sys_history表还原对记录(内容,页面等)的更改.sys_history表和sys_log表是相关的.截断sys_log时,您也无法回滚对系统的任何更改.您的客户可能不喜欢这样.
如果您只关心sys_log大小,那就是它.通过cron截断表格很好.
在TYPO3 4.6及以上版本中,您可以使用Table垃圾收集调度程序任务,pgampe说.对于低于4.5的TYPO3版本,您可以使用tablecleaner扩展.如果从[N]天以后的sys_log中删除所有记录,您还将保留[N]天的记录历史记录.这对我来说似乎是最好的解决方案.
并且请首先尝试修复填充sys_log的内容;-)
有一个调度程序任务.
它被称为Table garbage collection (scheduler).
在TYPO3 4.7中,它只能清理sys_log表格.从TYPO3 6.0开始,它也可以清理sys_history表格.您可以配置要清理的天数和表.
扩展可以注册更多表来清理.
Since TYPO3 9, the history is no longer stored using sys_log.
You can safely delete records from sys_log.
Run Code Online (Sandbox Code Playgroud)
请参阅重大更改 #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
Run Code Online (Sandbox Code Playgroud)
随意根据您的要求优化它。
您还可以安全地(不影响 sys_history)做的是删除 sys_log.error != 0 的记录。
还有一些建议:
truncate sys_log和truncate sys_history上一个主要版本升级使用低级清洁和删除记录与删除= 1在一起。不过,请务必先与编辑附近的人交谈,因为这将删除整个历史记录。确保你会想要这样做。对于调度程序任务“表垃圾收集”,请参阅文档:https : //docs.typo3.org/c/typo3/cms-scheduler/master/en-us/Installation/BaseTasks/Index.html
| 归档时间: |
|
| 查看次数: |
12450 次 |
| 最近记录: |