【问题标题】:Redshift table access historyRedshift 表访问历史
【发布时间】:2022-01-16 15:36:17
【问题描述】:

我想知道有没有办法在 Redshift 集群中获取表访问历史记录?

我们的集群有很多表,这让我们付出了很多。我想知道在给定时间段内没有访问过哪些特定表,然后我会删除这些表。

有没有办法获取表访问历史记录?如果有人有意见或材料,请告诉我。

谢谢。

【问题讨论】:

    标签: sql amazon-web-services amazon-redshift


    【解决方案1】:

    为了管理磁盘空间,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 中删除表。它可以作为备份,以防万一出现问题。

    【讨论】:

      【解决方案2】:

      STL_QUERY - Amazon Redshift 系统表包含有关数据库查询的执行信息。

      您可以解析查询以尝试确定最近访问了哪些表(有点棘手,因为您需要从查询中提取表名)。然后,您可以将这些表名与SVV_TABLE_INFO - Amazon Redshift 进行比较,以发现最近访问过哪些表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-10
        • 2011-01-24
        • 2018-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-08
        相关资源
        最近更新 更多