【问题标题】:Is it possible to get the last usage date of an index?是否可以获得索引的最后使用日期?
【发布时间】:2021-11-22 02:34:06
【问题描述】:

我想收集有关 PostgreSQL 中索引的统计信息。
我找到了一种收集诸如索引扫描次数、索引大小等统计信息的方法。 这是一个查询:

    SELECT
      current_database()                             AS datname,
      t.schemaname,
      t.tablename,
      psai.indexrelname                              AS index_name,
      pg_relation_size(i.indexrelid)                 AS index_size,
      CASE WHEN i.indisunique THEN 1 ELSE 0 END      AS "unique",
      psai.idx_scan                                  AS number_of_scans,
      psai.idx_tup_read                              AS tuples_read,
      psai.idx_tup_fetch                             AS tuples_fetched
    FROM
      pg_tables t
      LEFT JOIN pg_class c ON t.tablename = c.relname
      LEFT JOIN pg_index i ON c.oid = i.indrelid
      LEFT JOIN pg_stat_all_indexes psai ON i.indexrelid = psai.indexrelid
    WHERE
      t.schemaname NOT IN ('pg_catalog', 'information_schema')
    ORDER BY 1, 2;

但是,我没有看到如何收集索引的最后使用日期的方法。在 PostgreSQL 中可以吗?

【问题讨论】:

  • 不,这是不可能的。 Postgres 不存储这些信息。

标签: sql postgresql indexing


【解决方案1】:

这是不可能的。

如果您想了解某个表是否在下周(例如下周)使用,您可以现在和一周后查看 pg_stat_all_indexes.idx_scan,看看这个数字是否增加了。监控系统非常适合。

【讨论】:

    【解决方案2】:

    pg_stat_all_indexes 视图中的每一行都包含一个索引的信息。此视图中没有任何列指示解析索引的最近日期和时间。

    但是,可以重置统计信息:pg_stat_reset()

    如果 idx_scan 字段变为 > 0,这可以让您知道自该日期以来索引是否已被使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 2021-06-28
      • 2017-01-02
      • 1970-01-01
      • 2017-07-26
      相关资源
      最近更新 更多