相关疑难解决方法(0)

具有页面布局的表大小

我在Oracle Linux Server 6.3版上使用PostgreSQL 9.2.

根据存储布局文档,页面布局包含:

  • PageHeaderData(24字节)
  • n项目的数量(索引项/表项)AKA ItemIdData(4字节)
  • 可用空间
  • n项目数量
  • 特殊空间

我测试它以制作一些公式来估计预期的表格大小......(TOAST概念可能会被忽略.)

postgres=# \d t1;

                      Table "public.t1"
    Column    ','         Type         ','         Modifiers
---------------+------------------------+------------------------------
 code          |character varying(8)    |not null
 name          |character varying(100)  |not null
 act_yn        |character(1)            |not null default 'N'::bpchar
 desc          |character varying(100)  |not null
 org_code1     |character varying(3)    |
 org_cole2     |character varying(10)   |

 postgres=# insert into t1 values(
'11111111', -- 8
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', <-- 100
'Y',
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', <-- 100
'111',
'1111111111');

postgres=# select * from pgstattuple('t1');
 table_len | tuple_count …
Run Code Online (Sandbox Code Playgroud)

postgresql storage database-design types

3
推荐指数
1
解决办法
1532
查看次数

如何减少 PostgreSQL 数据库的大小?

我计划从 MySQL 迁移到 PostgreSQL,因为我想使用 TimescaleDB。

一切看起来都很好,直到我检查了 PostgreSQL (v11.2) 与 MySQL (v5.6) 使用的存储大小相比。对于完全相同的行数 (1,440,000) 和内容:

  • MySQL:156 MB
  • PostgreSQL:246 MB
  • PostgreSQL + TimescaleDB(分区/分块数据):324 MB

MySQL 和 PostgreSQL 的数字就像 for like(即包括索引和其他约束),PostgreSQL + TimescaleDB 有向表添加时间戳的开销。有关的表如下所示:

create table cell(
    cell_id            serial not null
   ,ts                 timestamp not null
   ,parent_id          int references parent( parent_id )
   ,instance_id        smallint
   ,v                  float
   ,a                  float
   ,t                  float
   ,s1                 float
   ,s2                 float
   ,s3                 float
   ,s4                 float
   ,s5                 float
   ,primary key( cell_id )
);
create index ix_cell_pid on cell( parent_id );
create index …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql storage types data-storage

3
推荐指数
1
解决办法
1万
查看次数

Postgres。通过将 BIGINT 切换为 INT 我可以期待良好的加速吗

这个 Postgres 数据库拥有各种大小的表,最多可达 1000 万行。几乎所有的都有一个 BIGINT 主键,从 1 开始计数。

由于 BIGINT 是 64 位,但 1000 万行完全在 INT 的 20 亿最大值之内,因此是否值得将这些 BIGINT 列转换为 INT(32 位)和 SMALLINT(16 位)以加速某些重型 SQL?更紧凑地存储索引/表应该会给我们带来更高的缓存命中率。如果有的话,我能期望多少加速?不使用 BIGINT 有什么缺点吗?(假设达到 INT/SMALLINT 的最大值永远不会成为问题)

database postgresql database-indexes

3
推荐指数
1
解决办法
2376
查看次数

在 Postgres 12 或 13 中根据 UUID 进行分区

问题

我被要求将大量数据复制到 Postgres 的新表中。数据包含装配组件列表,在下面的表定义中进行了简化:

CREATE TABLE IF NOT EXISTS assembly_item (
    id               uuid       NOT NULL DEFAULT  NULL,
    assembly_id.     uuid.      NOT NULL DEFAULT  NULL,
    done_dts         timestamp  NOT NULL DEFAULT 'epoch', 

CONSTRAINT assembly_item_pk
    PRIMARY KEY (id) 
);
Run Code Online (Sandbox Code Playgroud)

原来有几十个属性,现在有几亿行。这些记录分布在多个安装中,并且不存储在本地 Postgres 中。据猜测,该表上的插入量会快速增加,一年内将增长到 1B 行。日期很少更新,也从不删除。(它可能会及时发生,但不会经常发生。)相同的情况永远不会id用不同的值重复。因此,在分区级别上唯一是安全的。这里的目标是将这些数据卸载到 Postgres 上,并仅将最近的数据保留在本地服务器的缓存中。assembly_idid

这看起来像是分区的自然候选者,我正在寻找一些有关合理策略的指导。您可以从简化的结构中看到,我们有一个唯一的 row id、一个parentassembly_id和一个时间戳。我查看了原始数据库中的现有查询,主要搜索字段是assembly_id父记录标识符。assembly和之间的基数assembly_item约为 1:200。

为了使分区最有用,似乎需要根据一个值来分割数据,该值使查询规划器能够智能地修剪分区。我已经想到了一些想法,但还没有 200M 行来再次测试。与此同时,我正在考虑的是:

  • RANGE使用或LISTYYYY-MM的进行按月分区done_dts。按日期范围重写所有查询。

  • HASH根据 的前两个字符进行分区assembly_id::text,得到 256 个大小相当相等的分区。我认为这可以让我们搜索assembly_id并删除许多不匹配的分区,但当我设置它时,它看起来很奇怪。 …

sql postgresql uuid database-design partitioning

3
推荐指数
1
解决办法
6454
查看次数

如果我使用TEXT数据类型来存储数字,则会产生任何不良影响

如果我使用TEXT数据类型在数据库中存储ID号,是否有任何不良影响?我做的事情如下:

CREATE TABLE GenData ( EmpName TEXT NOT NULL, ID TEXT PRIMARY KEY);
Run Code Online (Sandbox Code Playgroud)

实际上,如果我想存储日期值,我通常使用TEXT数据类型.如果这是一种错误的方式,它的缺点是什么?

我在用PostgreSQL.

sql database postgresql database-design

2
推荐指数
1
解决办法
694
查看次数

填充顺序索引为PK的因子

是的,再次填充因子.我花了很多时间阅读,我无法确定每个案例哪个是更好的填充因子.问题是我不明白何时以及如何进行碎片化.我正在将数据库从MS SQL Server迁移到PostgreSQL 9.2.

情况1)连续(连续)PK中10-50次插入/分钟,每小时20-50次读数.

CREATE TABLE dev_transactions
(
  transaction_id serial NOT NULL,
  transaction_type smallint NOT NULL,
  moment timestamp without time zone NOT NULL,
  gateway integer NOT NULL,
  device integer NOT NULL,
  controler smallint NOT NULL,
  token integer,
  et_mode character(1),
  status smallint NOT NULL,
  CONSTRAINT pk_dev_transactions PRIMARY KEY (transaction_id)
)
WITH (
  OIDS=FALSE
);
Run Code Online (Sandbox Code Playgroud)

情况2)PK顺序的类似结构索引将以每个2个月~50,000个寄存器的块(一次)写入,读数为10-50 /分钟.

50%的填充因子意味着在每个插入中将生成一个新页面并将50%的现有记录传输到新的生成页面?

50%的填充因子意味着在创建新页面时,复制的记录将被保留以避免插入之间?

只有在没有空间分配记录时才会生成新页面?

你可以看到我很困惑; 我会很感激它的一些帮助 - 也许是一个关于PostgreSQL和索引填充因子的好链接.

sql postgresql

2
推荐指数
1
解决办法
1917
查看次数

使用多个连接和分组优化 SQL 查询 (Postgres 9.3)

我浏览了一些其他帖子并设法使我的查询运行得更快。但是,我对如何进一步优化此查询感到茫然。我将在一个网站上使用它,它会在页面加载时执行查询,但是 5.5 秒对于等待应该更简单的东西来说太长了。最大的表大约有 4,000,000 行,其他的每行大约有 400,000。

表结构

比赛

id BIGINT PRIMARY KEY,
region TEXT,
matchType TEXT,
matchVersion TEXT
Run Code Online (Sandbox Code Playgroud)

团队

matchid BIGINT REFERENCES match(id),
id INTEGER,
PRIMARY KEY(matchid, id),
winner TEXT
Run Code Online (Sandbox Code Playgroud)

冠军

id INTEGER PRIMARY KEY,
version TEXT,
name TEXT
Run Code Online (Sandbox Code Playgroud)

物品

id INTEGER PRIMARY KEY,
name TEXT
Run Code Online (Sandbox Code Playgroud)

参与者

PRIMARY KEY(matchid, id),
id INTEGER NOT NULL,
matchid BIGINT REFERENCES match(id),
championid INTEGER REFERENCES champion(id),
teamid INTEGER,
FOREIGN KEY (matchid, teamid) REFERENCES team(matchid, id),
magicDamageDealtToChampions REAL,
damageDealtToChampions REAL,
item0 TEXT,
item1 TEXT,
item2 …
Run Code Online (Sandbox Code Playgroud)

postgresql join sql-optimization postgresql-performance postgresql-9.3

2
推荐指数
1
解决办法
2147
查看次数

postgres数据库中表的大小异常增长

我们的数据库大小之一是50gb。其中一张表有149444622条记录。该表的大小为14GB,其索引大小为16GB。该表及其索引的总大小为30GB。我已经在该表上执行了以下步骤。

reindex table table_name;

vacuum full verbose analyze on table_name;
Run Code Online (Sandbox Code Playgroud)

但是表的大小及其索引大小仍然没有减少。请引导我。如何进一步进行。

表的结构如下。

在此处输入图片说明

postgresql postgresql-9.2

0
推荐指数
1
解决办法
273
查看次数