Bootstrap

Discourse 数据库重建索引

在 Discourse 数据库进行升级后的主要特性就是对 Discourse 数据库中使用的索引进行优化。

Discourse 中的索引主要使用的是post_timings 表和数据库的索引。

当对数据库升级完成后,需要针对数据库运行下面的命令来对数据库的索引进行优化和重建。

cd /var/discourse
./launcher enter app
su postgres
psql
\connect discourse
REINDEX SCHEMA CONCURRENTLY public;
\q
exit
exit

当完成上面的命令后,可以检查下 post_timings 的大小来查看数据库重构索引后的数据库数据大小变化。

2025-02-10_22-22-15

也可以使用下面的命令来对数据库进行查询,下面的 SQL 查询将会返回你当前运行 Discourse 实例中 20 个最大的数据对象。

可以在索引重建之前和之后都运行下来比较大小。

WITH RECURSIVE pg_inherit(inhrelid, inhparent) AS
    (select inhrelid, inhparent
    FROM pg_inherits
    UNION
    SELECT child.inhrelid, parent.inhparent
    FROM pg_inherit child, pg_inherits parent
    WHERE child.inhparent = parent.inhrelid),
pg_inherit_short AS (SELECT * FROM pg_inherit WHERE inhparent NOT IN (SELECT inhrelid FROM pg_inherit))
SELECT table_schema
    , TABLE_NAME
    , row_estimate
    , pg_size_pretty(total_bytes) AS total
    , pg_size_pretty(index_bytes) AS INDEX
    , pg_size_pretty(toast_bytes) AS toast
    , pg_size_pretty(table_bytes) AS TABLE
  FROM (
    SELECT *, total_bytes-index_bytes-COALESCE(toast_bytes,0) AS table_bytes
    FROM (
         SELECT c.oid
              , nspname AS table_schema
              , relname AS TABLE_NAME
              , SUM(c.reltuples) OVER (partition BY parent) AS row_estimate
              , SUM(pg_total_relation_size(c.oid)) OVER (partition BY parent) AS total_bytes
              , SUM(pg_indexes_size(c.oid)) OVER (partition BY parent) AS index_bytes
              , SUM(pg_total_relation_size(reltoastrelid)) OVER (partition BY parent) AS toast_bytes
              , parent
          FROM (
                SELECT pg_class.oid
                    , reltuples
                    , relname
                    , relnamespace
                    , pg_class.reltoastrelid
                    , COALESCE(inhparent, pg_class.oid) parent
                FROM pg_class
                    LEFT JOIN pg_inherit_short ON inhrelid = oid
                WHERE relkind IN ('r', 'p')
             ) c
             LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
  ) a
  WHERE oid = parent
) a
ORDER BY total_bytes DESC LIMIT 20;   

Discourse 数据库重建索引 - Discourse - iSharkFly在 Discourse 数据库进行升级后的主要特性就是对 Discourse 数据库中使用的索引进行优化。 Discourse 中的索引主要使用的是post_timings 表和数据库的索引。 当对数据库升级完成后,需要针对数据库运行下面的命令来对数据库的索引进行优化和重建。 cd /var/discourse./launcher enter appsu postgrespsql\connect discourseREI…icon-default.png?t=O83Ahttps://www.isharkfly.com/t/discourse/16904 

;