PostgreSQL 索引大小和值数
PostgreSQL index size and value number
我正在尝试获取有关索引的统计信息。我正在寻找索引中的总值及其大小。
我只能找到table上所有索引的大小。
Table pg_class 列 relpages 和 reltuples 显示 table 而非特定索引级别的值。
此外,函数 pg_indexes_size 将 table 名称作为参数,return table 的总索引大小。
有没有办法获取索引级别的大小和行号?
我正在使用 PostgreSQL 9.3。
在此先感谢您的帮助
pg_table_size('index_name')
用于单个索引 - 但它只会显示磁盘上的大小,而不是数据量
count(*)
获取确切的当前行数
sum(pg_column_size(column_name)) from table_name
用于估计列数据量
你可以自己尝试一下:
t=# \di+ tbl*
List of relations
Schema | Name | Type | Owner | Table | Size | Description
--------+----------------------+-------+----------+----------------+--------+-------------
public | tbl_pkey | index | postgres | tbl | 156 MB |
public | tbl_unpic | index | postgres | tbl | 46 MB |
public | tbl_x1 | index | postgres | tbl | 57 MB |
(3 rows)
t=# \dt+ tbl
List of relations
Schema | Name | Type | Owner | Size | Description
--------+----------------+-------+----------+-------+-------------
public | tbl | table | postgres | 78 MB |
(1 row)
t=# select pg_size_pretty(pg_total_relation_size('tbl'));
pg_size_pretty
----------------
337 MB
(1 row)
t=# select 78+57+46+156;
?column?
----------
337
(1 row)
并检查 psql 如何获取单个索引大小,运行 它与 psql -E
..
再一次 - 上面的函数与它占用的磁盘大小一起工作 - 它可能/(可能不会)与实际数据量有很大不同。吸尘在这里有帮助
更新
我不知道你从哪里直接得到索引中的“行”数,因此只能提供间接的方式。例如让我有部分索引,所以“行数”不同于 table。我可以用 EXPLAIN 检查估计值(当然你必须为此重复 where 子句)检查 Index Only Scan using
中的 rows=66800
让我知道该索引中的行数(实际上它是 rows=64910
你可以通过 explain analyze
或 运行ning count(*)
获得)。我在 pg_stats 中找不到相关信息 - 也许有一些公式。我不知道。
此 sql 将为您提供 table 和索引大小
的详细信息
SELECT
relname as table_name,
pg_size_pretty(pg_total_relation_size(relid)) As "Total Size",
pg_size_pretty(pg_indexes_size(relid)) as "Index Size",
pg_size_pretty(pg_relation_size(relid)) as "Actual Size"
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
这是检索以下信息的查询:
总大小
所有索引的总大小
Table尺寸
索引大小
估计 table 行数
SELECT i.relname "Table Name",indexrelname "Index Name",
pg_size_pretty(pg_total_relation_size(relid)) As "Total Size",
pg_size_pretty(pg_indexes_size(relid)) as "Total Size of all Indexes",
pg_size_pretty(pg_relation_size(relid)) as "Table Size",
pg_size_pretty(pg_relation_size(indexrelid)) "Index Size",
reltuples::bigint "Estimated table row count"
FROM pg_stat_all_indexes i JOIN pg_class c ON i.relid=c.oid
WHERE i.relname='uploads'
也许对某些人有用。
我正在尝试获取有关索引的统计信息。我正在寻找索引中的总值及其大小。
我只能找到table上所有索引的大小。 Table pg_class 列 relpages 和 reltuples 显示 table 而非特定索引级别的值。
此外,函数 pg_indexes_size 将 table 名称作为参数,return table 的总索引大小。
有没有办法获取索引级别的大小和行号? 我正在使用 PostgreSQL 9.3。
在此先感谢您的帮助
pg_table_size('index_name')
用于单个索引 - 但它只会显示磁盘上的大小,而不是数据量
count(*)
获取确切的当前行数
sum(pg_column_size(column_name)) from table_name
用于估计列数据量
你可以自己尝试一下:
t=# \di+ tbl*
List of relations
Schema | Name | Type | Owner | Table | Size | Description
--------+----------------------+-------+----------+----------------+--------+-------------
public | tbl_pkey | index | postgres | tbl | 156 MB |
public | tbl_unpic | index | postgres | tbl | 46 MB |
public | tbl_x1 | index | postgres | tbl | 57 MB |
(3 rows)
t=# \dt+ tbl
List of relations
Schema | Name | Type | Owner | Size | Description
--------+----------------+-------+----------+-------+-------------
public | tbl | table | postgres | 78 MB |
(1 row)
t=# select pg_size_pretty(pg_total_relation_size('tbl'));
pg_size_pretty
----------------
337 MB
(1 row)
t=# select 78+57+46+156;
?column?
----------
337
(1 row)
并检查 psql 如何获取单个索引大小,运行 它与 psql -E
..
再一次 - 上面的函数与它占用的磁盘大小一起工作 - 它可能/(可能不会)与实际数据量有很大不同。吸尘在这里有帮助
更新
我不知道你从哪里直接得到索引中的“行”数,因此只能提供间接的方式。例如让我有部分索引,所以“行数”不同于 table。我可以用 EXPLAIN 检查估计值(当然你必须为此重复 where 子句)检查 Index Only Scan using
中的 rows=66800
让我知道该索引中的行数(实际上它是 rows=64910
你可以通过 explain analyze
或 运行ning count(*)
获得)。我在 pg_stats 中找不到相关信息 - 也许有一些公式。我不知道。
此 sql 将为您提供 table 和索引大小
的详细信息SELECT
relname as table_name,
pg_size_pretty(pg_total_relation_size(relid)) As "Total Size",
pg_size_pretty(pg_indexes_size(relid)) as "Index Size",
pg_size_pretty(pg_relation_size(relid)) as "Actual Size"
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;
这是检索以下信息的查询:
总大小
所有索引的总大小
Table尺寸
索引大小
估计 table 行数
SELECT i.relname "Table Name",indexrelname "Index Name", pg_size_pretty(pg_total_relation_size(relid)) As "Total Size", pg_size_pretty(pg_indexes_size(relid)) as "Total Size of all Indexes", pg_size_pretty(pg_relation_size(relid)) as "Table Size", pg_size_pretty(pg_relation_size(indexrelid)) "Index Size", reltuples::bigint "Estimated table row count" FROM pg_stat_all_indexes i JOIN pg_class c ON i.relid=c.oid WHERE i.relname='uploads'
也许对某些人有用。