微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TOAST在MVCC Postgres中的表现

如何解决TOAST在MVCC Postgres中的表现

美好的一天,我在阅读有关TOAST的Postgres文档,但没有发现关于TOAST在MVCC方面如何工作的任何信息。 根据postgres的documentation

仅当将行值设为 存储在表中的宽度大于TOAST_TUPLE_THRESHOLD个字节(通常 2 kB)。

据我了解,如果字段足够大且具有可变长度,则postgres不会直接在tuple块中存储此字段,但会存储对包含该字段的不同表(文件)的引用,该表具有chunk_id和sequence_id。 但是,MVCC呢?假设我有一个user(data jsonb,id int PK,name varchar(255))。通常,当更新行时,将使用等于当前事务的xmin创建新行。假设jsonb字段在TOAST表中,并且此字段未更新,postgres将为更新的行创建新的TOAST实例,还是新行将对现有的TOAST值进行新引用?

解决方法

请参见here

在UPDATE操作期间,未更改字段的值通常按原样保留;因此,如果行值没有变化,则使用行值更新的行不会产生TOAST费用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。