Redshift table 访问历史记录
Redshift table access history
我想知道有什么方法可以在 Redshift 集群中获取 table 访问历史记录?
我们的集群有很多 table,这让我们付出了很多代价。我想发现哪些特定的 tables 在给定的时间段内没有被访问,然后我会删除那些 tables。
有什么方法可以获取 table 访问历史记录吗?如果有人有意见或材料请告诉我。
谢谢。
STL_QUERY - Amazon Redshift 系统 table 包含有关数据库查询的执行信息。
您可以解析查询以尝试确定最近访问了哪些 table(有点棘手,因为您需要从查询中提取 table 名称)。然后,您可以将这些 table 名称与 SVV_TABLE_INFO - Amazon Redshift 进行比较,以发现哪些 table 最近 未 被访问过。
为了管理磁盘 space,STL 日志(系统 tables 例如 STL_QUERY、STL_QUERYTEXT、)仅保留大约两到五天的日志历史记录(最多 7 天),取决于日志使用情况和可用磁盘 space。如果要保留日志数据,则需要定期将其复制到其他 table 或将其卸载到 Amazon S3。如果您之前没有 copied/exported stl 日志,则无法访问 1 周之前的日志。
-->在你的情况下,你可以发现哪些特定的 tables 没有被访问,仅在过去 1 周内(假设你之前没有导出日志)。
使用以下查询检查 table 上的扫描次数以分析其可访问性可能是个好主意。
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 中的任何过程或视图中是否没有引用 table:
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 数周,以更好地探索访问最少的 tables。
--> 如果 tables 很关键,时间不允许,最好将 tables 的数据导出到 s3 并保留几天,然后再删除 tables 来自红移。它可以作为备份,以防出现问题。
我想知道有什么方法可以在 Redshift 集群中获取 table 访问历史记录?
我们的集群有很多 table,这让我们付出了很多代价。我想发现哪些特定的 tables 在给定的时间段内没有被访问,然后我会删除那些 tables。
有什么方法可以获取 table 访问历史记录吗?如果有人有意见或材料请告诉我。
谢谢。
STL_QUERY - Amazon Redshift 系统 table 包含有关数据库查询的执行信息。
您可以解析查询以尝试确定最近访问了哪些 table(有点棘手,因为您需要从查询中提取 table 名称)。然后,您可以将这些 table 名称与 SVV_TABLE_INFO - Amazon Redshift 进行比较,以发现哪些 table 最近 未 被访问过。
为了管理磁盘 space,STL 日志(系统 tables 例如 STL_QUERY、STL_QUERYTEXT、)仅保留大约两到五天的日志历史记录(最多 7 天),取决于日志使用情况和可用磁盘 space。如果要保留日志数据,则需要定期将其复制到其他 table 或将其卸载到 Amazon S3。如果您之前没有 copied/exported stl 日志,则无法访问 1 周之前的日志。
-->在你的情况下,你可以发现哪些特定的 tables 没有被访问,仅在过去 1 周内(假设你之前没有导出日志)。 使用以下查询检查 table 上的扫描次数以分析其可访问性可能是个好主意。
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 中的任何过程或视图中是否没有引用 table:
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 数周,以更好地探索访问最少的 tables。
--> 如果 tables 很关键,时间不允许,最好将 tables 的数据导出到 s3 并保留几天,然后再删除 tables 来自红移。它可以作为备份,以防出现问题。