如何保留超过 5 天的查询日志?
Posted
技术标签:
【中文标题】如何保留超过 5 天的查询日志?【英文标题】:How do I keep more than 5 day's worth of query logs? 【发布时间】:2013-11-07 19:20:17 【问题描述】:在 Redshift 中,有一个 STL_QUERY
表存储过去 5 天内运行的查询。我正在尝试找到一种方法来保存超过 5 天的记录。以下是我考虑过的一些事情:
-
是否有针对此的 Redshift 设置?看来不是。
我可以使用触发器吗?触发器在 Redshift 中不可用,所以这是不行的。
我能否创建一个 Amazon Data Pipeline 作业来定期“抓取”
STL_QUERY
表?我可以,所以这是一个选择。不幸的是,我必须为管道提供一些 EC2 实例来运行这项工作。让一个实例坐在那里每天刮一次这张桌子似乎是一种浪费。
我可以使用 Amazon Simple Work Flow 作业来刮桌子吗?我可以,但它遇到与 3 相同的问题。
我还缺少其他选项/想法吗?我更喜欢其他不涉及我专用 EC2 实例的选项,即使这意味着支付额外的服务(前提是它比我使用的 EC2 实例便宜)。
【问题讨论】:
【参考方案1】:保持简单,一切都在 Redshift 中完成。
首先,使用“CREATE TABLE ... AS”将所有当前历史记录保存到永久表中。
CREATE TABLE admin.query_history AS SELECT * FROM stl_query;
其次,使用psql
运行它,在您控制的机器上安排一个作业每天运行它。
INSERT INTO admin.query_history SELECT * FROM stl_query WHERE query > (SELECT MAX(query) FROM admin.query_history);
完成。 :)
注意事项:
如果您尚未设置,则需要 8.x 版本的psql
。
即使您的作业有几天没有运行,stl_query 也会保留足够的历史记录,以便覆盖您。
根据您的评论,使用 starttime 而不是 query 作为条件可能更安全。
【讨论】:
感谢您的回答!两件事,一:query
字段是否保证增加?我应该改用starttime
吗?二:我不喜欢让它在我的笔记本电脑上运行的想法。在哪里运行这个东西是问题的焦点。我再放一天,但如果没有其他人回答并且你删除了“笔记本电脑”位,我会接受你的回答。
好的,我删除了对笔记本电脑的引用。我怀疑您控制中至少有一台 24/7 全天候运行的机器。一个 cron 工作就可以解决问题。您可以查看 AWS Data Pipeline 之类的东西来按计划运行脚本,但对于这个用例来说,这似乎有点矫枉过正。以上是关于如何保留超过 5 天的查询日志?的主要内容,如果未能解决你的问题,请参考以下文章
bash脚本通过每天保留1个备份来删除超过7天的备份[重复]