【发布时间】:2022-01-16 15:36:17
【问题描述】:
我想知道有没有办法在 Redshift 集群中获取表访问历史记录?
我们的集群有很多表,这让我们付出了很多。我想知道在给定时间段内没有访问过哪些特定表,然后我会删除这些表。
有没有办法获取表访问历史记录?如果有人有意见或材料,请告诉我。
谢谢。
【问题讨论】:
标签: sql amazon-web-services amazon-redshift
我想知道有没有办法在 Redshift 集群中获取表访问历史记录?
我们的集群有很多表,这让我们付出了很多。我想知道在给定时间段内没有访问过哪些特定表,然后我会删除这些表。
有没有办法获取表访问历史记录?如果有人有意见或材料,请告诉我。
谢谢。
【问题讨论】:
标签: sql amazon-web-services amazon-redshift
为了管理磁盘空间,STL 日志(系统表,例如 STL_QUERY、STL_QUERYTEXT、)仅保留大约两到五天的日志历史记录(最多 7 天),具体取决于日志使用情况和可用磁盘空间。如果要保留日志数据,则需要定期将其复制到其他表或将其卸载到 Amazon S3。如果您之前没有复制/导出 stl 日志,则无法访问 1 周之前的日志。
-->在您的情况下,您可以发现仅在过去 1 周内没有访问过哪些特定表(假设您之前没有导出日志)。 使用以下查询检查表上的扫描次数以分析其可访问性可能是个好主意。
SELECT
database,
schema AS schemaname,
table_id,
"table" AS tablename,
size,
sortkey1,
NVL(s.num_qs,0) num_qs
FROM svv_table_info t
LEFT JOIN (SELECT
tbl, perm_table_name,
COUNT(DISTINCT query) num_qs
FROM
stl_scan s
WHERE
s.userid > 1
AND s.perm_table_name NOT IN ('Internal Worktable','S3')
GROUP BY
tbl, perm_table_name) s ON s.tbl = t.table_id
AND t."schema" NOT IN ('pg_internal')
ORDER BY 7 desc;
我过去遇到过类似的情况,我建议首先使用以下查询检查表没有在 redshift 中的任何过程或视图中引用:
SELECT DISTINCT
srcobj.oid AS src_oid
,srcnsp.nspname AS src_schemaname
,srcobj.relname AS src_objectname
,tgtobj.oid AS dependent_viewoid
,tgtnsp.nspname AS dependent_schemaname
,tgtobj.relname AS dependent_objectname
FROM
pg_catalog.pg_class AS srcobj
INNER JOIN
pg_catalog.pg_depend AS srcdep
ON srcobj.oid = srcdep.refobjid
INNER JOIN
pg_catalog.pg_depend AS tgtdep
ON srcdep.objid = tgtdep.objid
JOIN
pg_catalog.pg_class AS tgtobj
ON tgtdep.refobjid = tgtobj.oid
AND srcobj.oid <> tgtobj.oid
LEFT OUTER JOIN
pg_catalog.pg_namespace AS srcnsp
ON srcobj.relnamespace = srcnsp.oid
LEFT OUTER JOIN
pg_catalog.pg_namespace tgtnsp
ON tgtobj.relnamespace = tgtnsp.oid
WHERE tgtdep.deptype = 'i' --dependency_internal
AND tgtobj.relkind = 'v' --i=index, v=view, s=sequence
and src_schemaname <> 'pg_catalog' and src_schemaname <> 'information_schema';
-->其次,如果时间允许,开始将 redshift stl 日志导出到 s3 几周,以更好地探索访问最少的表。
--> 如果表很关键且时间不允许,最好将表的数据导出到 s3 并保留几天,然后再从 redshift 中删除表。它可以作为备份,以防万一出现问题。
【讨论】:
STL_QUERY - Amazon Redshift 系统表包含有关数据库查询的执行信息。
您可以解析查询以尝试确定最近访问了哪些表(有点棘手,因为您需要从查询中提取表名)。然后,您可以将这些表名与SVV_TABLE_INFO - Amazon Redshift 进行比较,以发现最近未访问过哪些表。
【讨论】: