麻花痒 发表于 2024-9-23 19:23:04

postgres【timescaledb】--磁盘监控

监控磁盘空间的利用

这段内容紧张描述了数据库中表的存储方式以及如何监控磁盘空间利用情况。
监控磁盘的利用
表的存储方式:



[*]每个表都有一个主堆磁盘文件,用于存储大部门数据。
[*]假如表中有任何可能具有宽值的列(即数据长度可能凌驾标准页大小的列),则可能还会有一个与表相关联的TOAST文件。TOAST文件用于存储那些太宽而无法舒服地放入主表中的值。(更多关于TOAST的具体信息拜见第73.2节)
[*]假如存在TOAST文件,它将有一个有用的索引。
[*]基础表也可能有与之关联的索引。
[*]每个表和索引都存储在单独的磁盘文件中,假如文件凌驾1GB,则可能不止一个文件。这些文件的命名约定在第73.1节中有描述。
监控磁盘空间的方法:



[*]可以利用三种方式监控磁盘空间:

[*]利用表9.96中列出的SQL函数。
[*]利用oid2name模块。
[*]手动查抄系统目录。

[*]SQL函数是最易于利用的方法,通常也是推荐的。
[*]接下来的部门将展示如何通过查抄系统目录来实现。
利用psql查询表的磁盘利用情况:



[*]在近来举行过VACUUM或ANALYZE操纵的数据库上利用psql,可以发出查询以检察任何表的磁盘利用情况。例如,利用以下查询检察名为’customer’的表的磁盘利用情况:SELECT pg_relation_filepath(oid), relpages FROM pg_class WHERE relname = 'customer';

[*]查询结果会显示文件路径和占用的页数。每页通常是8KB。(注意:relpages字段只在VACUUM、ANALYZE和一些DDL命令如CREATE INDEX时更新)。
[*]假如需要直接查抄表的磁盘文件,文件路径名是有用的。
通过这些信息,可以有用地管理和监控数据库表和索引的磁盘空间利用情况。
对于timescaledb的超表利用下面的sql检察磁盘利用情况
SELECT
    c.relname AS table_name,
    pg_relation_filepath(c.oid) AS filepath,
    c.relpages AS pages
FROM
    pg_class c
JOIN
    pg_inherits i ON c.oid = i.inhrelid
JOIN
    pg_class parent ON parent.oid = i.inhparent
WHERE
    parent.relname = '你的超表';

VACUUM和ANALYZE命令

在 PostgreSQL 中,VACUUM 和 ANALYZE 是用于维护数据库的紧张命令。以下是它们的用法及其功能:
VACUUM

VACUUM 命令用于清理数据库中的无效数据,释放空间,进步性能。
根本用法

VACUUM;


[*]效果:对当前数据库实行清理,处置惩罚全部表。
对特定表实行

VACUUM my_table;


[*]效果:仅清理指定的表。
完全清理

VACUUM FULL;


[*]效果:完全清理数据库,压缩表并释放空闲空间。这会锁定表,因此会影响其他操纵。
ANALYZE

ANALYZE 命令用于收集有关表和索引的统计信息,以资助查询优化器天生更有用的查询筹划。
根本用法

ANALYZE;


[*]效果:对当前数据库中的全部表收集统计信息。
对特定表实行

ANALYZE my_table;


[*]效果:仅对指定的表收集统计信息。
联合利用

您可以同时运行 VACUUM 和 ANALYZE,以同时清理和优化数据库:
VACUUM ANALYZE;



[*]效果:对全部表实行 VACUUM 和 ANALYZE 操纵。
总结



[*]利用 VACUUM 来清理表和释放空间。
[*]利用 ANALYZE 来更新统计信息,优化查询性能。
[*]为特定操纵选择符合的命令和选项,以最大化数据库的性能和服从。
显示由TOAST(表所占用的空间)

要显示由TOAST(The Oversized-Attribute Storage Technique)表所占用的空间,可以利用如下所示的查询语句
SELECT relname, relpages
FROM pg_class,
   (SELECT reltoastrelid
      FROM pg_class
      WHERE relname = 'customer') AS ss
WHERE oid = ss.reltoastrelid OR
      oid = (SELECT indexrelid
             FROM pg_index
             WHERE indrelid = ss.reltoastrelid)
ORDER BY relname;

       relname      | relpages
----------------------+----------
pg_toast_16806       |      0
pg_toast_16806_index |      1
检察和展示索引所占用的空间大小

SELECT c2.relname, c2.relpages
FROM pg_class c, pg_class c2, pg_index i
WHERE c.relname = 'customer' AND
      c.oid = i.indrelid AND
      c2.oid = i.indexrelid
ORDER BY c2.relname;

      relname      | relpages
-------------------+----------
customer_id_index |       26
找到你数据库中最大的表和索引

超表的话显示的是分表
SELECT relname, relpages
FROM pg_class
ORDER BY relpages DESC;

       relname      | relpages
----------------------+----------
bigtable             |   3290
customer             |   3144

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: postgres【timescaledb】--磁盘监控