首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql:使timeseries表更小

Postgresql:使timeseries表更小
EN

Stack Overflow用户
提问于 2021-02-01 09:56:20
回答 1查看 29关注 0票数 1

我使用的是PostgreSQL 12.5,由Visual C++ build 1914编译,64位,我有下表:

代码语言:javascript
复制
CREATE TABLE public.historian_new_data_id_v2 (
    "timestamp" timestamptz NOT NULL,
    value float8 NOT NULL,
    quality float4 NOT NULL,
    tagname_id int2 NOT NULL
);

我预计这个表将占用8+8+4+2=每行22个字节,因为我认为没有对齐问题。即使在最坏的情况下,所有字段都是8字节对齐的,我也希望它占用8*4= 32字节/行。

但是,这些是表的大小统计数据:

代码语言:javascript
复制
with row_count as (select COUNT(*) as c from historian_new_data_id_v2)
select
    c as "number of rows",
    pg_size_pretty(pg_total_relation_size('historian_new_data_id_v2')) as "total table size",
    pg_total_relation_size('historian_new_data_id_v2')::numeric / c as " bytes/row"
from row_count

行数:409858537

表大小:20 GB

字节/行:52.1783453494345538

这是大量的开销!每行52字节,而不是预期的22字节或更糟的情况32。这种差异是如何解释的?

另外,有什么建议可以让这个表变小(行数很快就会猛增)?

EN

回答 1

Stack Overflow用户

发布于 2021-02-01 10:13:31

PostgreSQL中的每一行都有系统列:

代码语言:javascript
复制
select attname, attnum, attlen
  from pg_attribute
 where attrelid = 'public.historian_new_data_id_v2'::regclass
 order by attnum;

+------------+----------+----------+
| attname    | attnum   | attlen   |
|------------+----------+----------|
| tableoid   | -6       | 4        |
| cmax       | -5       | 4        |
| xmax       | -4       | 4        |
| cmin       | -3       | 4        |
| xmin       | -2       | 4        |
| ctid       | -1       | 6        |
| timestamp  | 1        | 8        |
| value      | 2        | 8        |
| quality    | 3        | 4        |
| tagname_id | 4        | 2        |
+------------+----------+----------+

如果需要,此列可供选择:

代码语言:javascript
复制
select tableoid, cmax, xmax, cmin, xmin, ctid, timestamp, value, quality, tagname_id
  from public.historian_new_data_id_v2;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65990568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档