当前位置: 首页 > news >正文

postgresql的TOAST表

在 PostgreSQL 中,TOAST(The Oversized-Attribute Storage Technique)是一种处理超大数据(如大型文本字段、大型字节数组等)存储的技术。当表中的某些字段非常大,无法直接存储在一个标准 PostgreSQL 数据页中(通常是 8KB),TOAST 就会被用于管理这些超大数据。

TOAST 工作原理

TOAST 通过将超大数据分块存储到专用的 TOAST 表中,并在主表中存储一个指向 TOAST 表的指针来实现其功能。TOAST 主要通过以下方式进行优化:

  1. 压缩:首先尝试使用 PGLZ 算法压缩数据。
  2. 外部存储:如果压缩结果仍然太大,则将数据分块存储在外部的 TOAST 表中。

TOAST 表

TOAST 表是自动生成且完全透明的,用户通常无需直接与 TOAST 表交互。不过,在某些情况下,了解 TOAST 表的细节和内容可能对数据库调优和问题排查有帮助。

每个支持 TOAST 的表在数据库中都会有一个对应的 TOAST 表,该表的名称形式为 pg_toast.pg_toast_<oid>,其中 <oid> 是原始表的对象标识符。

如何识别和查看 TOAST 表

1. 查看发布规则

要查看特定表的 TOAST 表信息,您可以使用以下查询语句:

SELECT relname,reltoastrelid
FROM pg_class
WHERE relname = 'your_table';

reltoastrelid 字段包含 TOAST 表的 OID。

2. 获取 TOAST 表名称

使用 reltoastrelid 可以查询到实际的 TOAST 表名称:

SELECT relname
FROM pg_class
WHERE oid = (SELECT reltoastrelidFROM pg_classWHERE relname = 'your_table');
3. 查看 TOAST 表内容

要查看 TOAST 表的内容,首先获取 TOAST 表的名称,然后查询其内容:

-- 假设找到的 TOAST 表名称为 pg_toast.pg_toast_<oid>SELECT * FROM pg_toast.pg_toast_<oid>;

TOAST 表的结构

TOAST 表包含以下列:

  • chunk_id: 原始数据行的引用 ID。
  • chunk_seq: 块的序号。
  • chunk_data: 实际的数据块。

这些列用于存储和重建原始大数据字段。

管理 TOAST 行为

您可以使用 ALTER TABLE ... SET STORAGE 语句来控制 TOAST 的行为。通过此操作,您可以更改字段的存储策略,比如将其设置为 EXTERNALMAINPLAIN,或 EXTENDED

ALTER TABLE your_table
ALTER COLUMN your_column SET STORAGE EXTERNAL;

示例

以下示例展示如何使用和管理 TOAST 表:

-- 创建一个含有大文本字段的表
CREATE TABLE example_table (id SERIAL PRIMARY KEY,large_text TEXT
);-- 向 large_text 字段插入超大数据
INSERT INTO example_table (large_text)
VALUES (REPEAT('PostgreSQL ', 10000));-- 查询 example_table 的 TOAST 表
SELECT relname,reltoastrelid
FROM pg_class
WHERE relname = 'example_table';-- 假设 TOAST 表的 OID 为 12345,可以查询其内容
SELECT * FROM pg_toast.pg_toast_12345;

优化和调优

通过理解和使用 TOAST,您可以做出以下优化:

  1. 选择适当的存储策略:根据字段的大小和访问模式选择合适的存储策略(PLAIN, MAIN, EXTERNAL, EXTENDED)。
  2. 调整 TOAST 压缩策略:利用 PostgreSQL 的参数 default_toast_compression,可以全局设置 TOAST 的默认压缩方式(如 pglzlz4)。
  3. 管理数据块大小:通过调整 TOAST_TUPLE_THRESHOLD 等参数,您可以定制超大字段何时及如何被分块存储。

结论

TOAST 是 PostgreSQL 中的一个强大工具,用于管理和优化超大数据的存储。当标准数据页大小不足以存储大字段时,TOAST 通过压缩和分块外部存储来保证系统的运行效率和存储优化。


http://www.mrgr.cn/news/42879.html

相关文章:

  • ADE20K数据集
  • 如何使用EventChannel
  • 猴子吃桃-C语言
  • GS-SLAM论文阅读笔记-CaRtGS
  • 上海和18线小县城的异同?
  • 全排列和组合数区分
  • 编程技巧:优化
  • c#代码介绍23种设计模式_17观察者模式
  • 网上的ai写论文可靠吗?分享市面上7款AI论文写作网站
  • HBuilderX连接MuMu模拟器最简单的方法
  • 基于MATLAB的安全帽检测系统
  • 程序员必备!面向Prompt编程全攻略
  • GPTQ vs AWQ vs GGUF(GGML) 速览和 GGUF 文件命名规范
  • python习题2
  • idea插件开发的第六天-开发一个笔记插件
  • 等额本金和等额本息是什么意思?
  • 数据挖掘-padans初步使用
  • 数字 1 出现的个数
  • [图形学]smallpt代码详解(1)
  • 现在的新电脑在任务管理器里又多了个NPU?它是啥?