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 来自红移。它可以作为备份,以防出现问题。