Jam*_*aly 6 postgresql storage update
想象一下,我在 Postgres 13 中有一个像这样的表:
CREATE TABLE public.people (
id integer PRIMARY KEY,
full_name character varying(255),
bio text
);
Run Code Online (Sandbox Code Playgroud)
然后,我插入一行包含足够字符的行,以便将简介写入 TOAST 表:
# insert into people values (1, 'joe user', (SELECT array_to_string(ARRAY(SELECT chr((65 + round(random() * 25)) :: integer) FROM generate_series(1,4000)), '')));
INSERT 0 1
Run Code Online (Sandbox Code Playgroud)
最后,我更新该行而不更改 TOAST 列:
# update people set full_name='jane user' where id=1;
UPDATE 1
Run Code Online (Sandbox Code Playgroud)
是否UPDATE
更改关联 TOAST 表中的任何行(或根本需要任何写入)?
上下文:我正在处理一些每秒有数千个事务的数据库表,并且观察到服务器上的写入负载非常高。我想知道UPDATE
TOAST 中具有较大值但 TOAST 值本身大部分不变的元组是否会增加写入负载并且值得优化。
说明书上有明确的答案:
在操作期间
UPDATE
,未更改字段的值通常按原样保留;因此,UPDATE
如果任何异常值都没有发生变化,则具有异常值的行不会产生 TOAST 成本。
UPDATE
这是over DELETE
+的主要好处之一INSERT
(同时写入新的行版本)。
但有一些细则“不变”。看: