PostgreSQL的表压缩

news/2024/9/19 11:11:25/ 标签: postgresql, 数据库, 运维

PostgreSQL的表压缩

PostgreSQL提供了在表或列级别进行数据压缩的功能,以帮助减少存储空间和提高I/O性能。具体来说,PostgreSQL 14及以后的版本引入了对表级和列级压缩的支持。

表压缩

The COMPRESSION clause sets the compression method for the column. Compression is supported only for variable-width data types, and is used only when the column’s storage mode is main or extended. (See ALTER TABLE for information on column storage modes.) Setting this property for a partitioned table has no direct effect, because such tables have no storage of their own, but the configured value will be inherited by newly-created partitions. The supported compression methods are pglz and lz4. (lz4 is available only if --with-lz4 was used when building PostgreSQL.) In addition, compression_method can be default to explicitly specify the default behavior, which is to consult the default_toast_compression setting at the time of data insertion to determine the method to use.

COMPRESSION子句设置列的压缩方法。压缩仅支持可变宽度数据类型,并且仅在列的存储模式为主或扩展时使用。(有关列存储模式的信息,请参阅ALTER TABLE。)为分区表设置此属性没有直接影响,因为这些表没有自己的存储,但配置的值将由新创建的分区继承。支持的压缩方法是pglz和lz4。(只有在构建PostgreSQL时使用了-with-lz4时,lz4才可用。)此外,compression_method可以默认为显式指定默认行为,即在插入数据时参考default_toast_pression设置以确定要使用的方法。

支持的压缩方法

PostgreSQL 支持以下几种压缩方法:

  1. lz4:基于LZ4算法的快速压缩,适合大多数使用场景。
  2. pglz:基于PostgreSQL原生压缩算法的压缩方法。

创建表时定义压缩存储

在创建表时,可以为特定的列指定压缩方法。例如:

CREATE TABLE yewu1.t2 (id serial PRIMARY KEY,data_1 text COMPRESSION pglz,data_2 text COMPRESSION pglz
);

修改现有表的压缩存储

可以使用 ALTER TABLE 语句来更改现有列的压缩方法:

ALTER TABLE test_tableALTER COLUMN data_1 SET COMPRESSION pglz;

表级压缩的使用场景

使用表和列级压缩可以带来多种好处,但也有一些需要注意的事项:

优点
  1. 减少存储空间:压缩会显著减少数据文件的大小,从而节省存储成本。
  2. 提高查询性能:特别是在I/O密集的查询中,压缩可以减少磁盘读取的数据量,从而提高查询性能。
注意事项
  1. 压缩开销:虽然压缩可以减少存储和提高读取速度,但同样也会带来CPU的开销。因此,适合在读多写少的场景使记指定不同列的压缩方法。

可以结合对特定列的性能需求,指定不同列的压缩方法。

ALTER TABLE test_tableALTER COLUMN data_1 SET COMPRESSION pglz;

检查表级压缩状态

要确认某个表或列是否启用了压缩,可以查询 pg_attribute 视图:

SELECT attname, attcompression
FROM pg_attribute
WHERE attrelid = 'yewu1.t2'::regclass;

这将显示表中各列的压缩方法:

white=# SELECT attname, attcompression
white-# FROM pg_attribute
white-# WHERE attrelid = 'yewu1.t2'::regclass;attname  | attcompression 
----------+----------------tableoid | cmax     | xmax     | cmin     | xmin     | ctid     | id       | data_1   | pdata_2   | p
(9 rows)

通过这些信息,你可以了解到各列的压缩状态以及所使用的压缩方法。

总结

PostgreSQL的表级和列级压缩功能为用户提供了灵活的压缩选项,可以在不同的列上使用不同的压缩方法来优化存储和性能。对于读多写少的数据和大数据量场景,合适的压缩配置可以显著提高性能并减少存储成本。然而,在使用压缩时需要考虑到压缩和解压缩的CPU开销,以便在性能和资源利用之间找到最优平衡。


http://www.ppmy.cn/news/1526749.html

相关文章

NASA:ATLAS/ICESat-2 L2 A标准化相对反向散射剖面V006

ATLAS/ICESat-2 L2A Normalized Relative Backscatter Profiles V006 ATLAS/ICESat-2 L2 A标准化相对反向散射剖面V006 简介 ATL04 包含大气层的沿轨迹归一化相对后向散射剖面图。 该产品包括完整的 532 nm(14 公里)未校准衰减后向散射剖面图&#xf…

mysql workbench 如何访问远程数据库

要使用 MySQL Workbench 访问远程数据库,可以按照以下步骤操作: 步骤 1:获取远程数据库的连接信息 首先,确保你有远程数据库的以下信息: 主机名(Host):通常是服务器的 IP 地址或域…

mysql把某一个字段的值中的aa,替换成bb

UPDATE my_table SET my_column REPLACE(my_column, aa, bb); 例 假设my_table表在替换前的数据如下: idmy_column1hello aa2world aa aa3no aa here 执行上述UPDATE语句后,my_table表的数据将变为: idmy_column1hello bb2world bb b…

vulnhub靶机:Holynix: v1

下载 下载地址:https://www.vulnhub.com/entry/holynix-v1,20/ 打开虚拟机 选择下载解压之后的文件打开 新添加一张 NAT 网卡,mac 地址修改如下 00:0c:29:bc:05:de 给原来的桥接网卡,随机生成一个 mac 地址 然后重启虚拟机 信息收集 主…

[网络]https的概念及加密过程

文章目录 一. HTTPS二. https加密过程 一. HTTPS https本质上就是http的基础上增加了一个加密层, 抛开加密之后, 剩下的就是个http是一样的 s > SSL HTTPS HTTP SSL 这个过程, 涉及到密码学的几个核心概念 明文 要传输的真正意思是啥 2)密文 加密之后得到的数据 这个密文…

10.索引下推

10.索引下推 10.1.什么是索引下推? (1)索引下推 (Index Condition Pushdown, ICP) 是 MySQL 5.6 中新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式。 (2)如果没有 ICP,存储引擎会遍…

设计模式---中介者模式

设计模式---中介者模式 定义与设计思路中介者模式的引入:机场控制塔中介者模式的设计框架 定义与设计思路 定义:用一个中介对象来封装一系列对象交互。中介者使各对象不需要相互引用,从而使其耦合松散,而且可以独立地改变它们之间…

CISP-PTE CMS sqlgun靶场

sql靶场有个搜索框先点一下go,有回显说明存在漏洞 有个xss 然后在这里尝试sql注入 输入 -1 union select 1,2,3# 有回显可以查看数据库 然后查询数据库,用户 查询数据库的表名 查询它的数据这里admin用户的密码是md5加密 去解密看看 然后扫描ip目录发…

【ShuQiHere】 进位回补与溢出问题全解:二补码与一补码的进阶指南

【ShuQiHere】 在现代计算机系统中,数值运算的准确性和效率至关重要。无论是整数的加法还是减法,在处理负数、符号位和进位问题时,都可能遇到 进位回补(End-Around Carry) 和 溢出(Overflow) 等…

python Open3D 验证安装崩溃

环境 Win11 python 3.11.9 numpy 2.1.1 问题 根据官方指南安装了python的open3d库,但是在验证安装的时候,总是崩溃,详细内容参考GitHub Issue # Python API python -c "import open3d as o3d; \mesh o3d.geometry.TriangleMesh.cre…

Netty笔记06-组件ByteBuf

文章目录 概述ByteBuf 的特点ByteBuf的组成ByteBuf 的生命周期 ByteBuf 相关api1. ByteBuf 的创建2. 直接内存 vs 堆内存3. 池化 vs 非池化4. ByteBuf写入代码示例 5. ByteBuffer扩容6. ByteBuf 读取7. retain() & release()TailContext 释放未处理消息逻辑HeadContext 8. …

基于kolla-ansible在openEuler 22.03 SP4上部署OpenStack-2023.2

测试环境 openEuler-22.03-LTS-SP4-x86_64-dvd.iso Virtual Box,4 vCPU, 8G RAM, 50 vDisk。安装时删除/home,SWAP分区,全部空间给/目录。 目标是部署OpenStack All-In-One模式,控制节点计算节点存储节点在一台机器实现。 系统配…

有哪些方法可以减少脏页标记技术中的磁盘 I/O 操作?

减少脏页标记技术中磁盘 I/O 操作的方法 一、引言 在数据库系统中,脏页标记技术用于跟踪被修改但尚未写入磁盘的数据页。然而,频繁的磁盘 I/O 操作会严重影响数据库的性能。因此,寻找有效的方法来减少脏页标记技术中的磁盘 I/O 操作至关重要。 二、优化脏页标记策略 (一…

Axure设计之全屏与退出全屏交互实现

在Axure RP中,设计全屏与退出全屏的交互功能可以极大地提升用户体验,尤其是在展示产品原型或进行演示时。本文将详细介绍如何在Axure RP中通过结合JavaScript代码实现全屏与退出全屏的交互效果。 ​ Axure原型设计web端交互元件库:https://…

【系统架构设计师】建造者模式(Builder Pattern)

建造者模式详解 1. 什么是建造者模式? 建造者模式(Builder Pattern)是一种创建型设计模式,它允许通过分步构造复杂对象,而无需知道对象内部的具体实现细节。换句话说,建造者模式将对象的创建过程抽象出来,分离对象的构建和表示,使得同样的构建过程可以创建不同类型的…

什么是大模型的推理?

目录 1. 大模型的推理过程原理 2. 简单生动的例子说明大模型推理 3. 学习大模型推理的最好办法 1. 大模型的推理过程原理 大模型的推理过程主要是基于海量数据的训练,来生成或预测出最可能的输出。以语言模型为例,它是通过输入一段文本(称…

请求响应-05.请求-日期参数JSON参数

一.日期参数 当浏览器发起的请求参数类型是日期参数时,我们通常使用LocalDateTime对象来接收,前面使用DateTimeFormat注解来完成日期的格式转换(日期时间格式有多种,需要哪种就设置为哪种:如yyyy-MM-dd HH:mm:ss&…

基于python+django+vue的鲜花商城系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的线…

Charles mac电脑配置

安装 Charles: 如果你还没有安装 Charles,可以从官方网站下载安装包并按照提示完成安装。 启动 Charles: 安装完成后,启动 Charles 应用程序。 设置 Charles 代理: Charles 默认的代理端口是 8888。你可以通过以下步…

flink增量检查点启动恢复的时间是很久的,业务上不能接受,怎么处理

可以考虑以下几种优化策略和替代方案,以减少恢复时间或提高业务的容忍度: 1. 优化增量检查点恢复时间 a. 合并增量检查点 定期将多个增量检查点合并为一个完整的检查点。合并增量检查点可以减少恢复时需要处理的增量数量,从而加快恢复速度。…