前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL创建临时表性能下降分析

PostgreSQL创建临时表性能下降分析

原创
作者头像
忽而呀嘿
修改2020-06-09 10:20:17
2.4K0
修改2020-06-09 10:20:17
举报
文章被收录于专栏:PGerPGer

环境信息

代码语言:txt
复制
PostgreSQL 11.5

问题

代码语言:txt
复制
客户反馈临时表创建耗时较长,平均耗时在5ms以上,相对于之前测试阶段的创建时间有明显变慢。

根本原因

代码语言:txt
复制
postgresql在创建表时,会预估当前表是否存在超长记录的可能,如果使用了text,varchar(555)等超大字端,会在创建表同时创建toast表及toast索引表,同时多字段会写入系统表记录,这将增大创建表的开销。

诊断步骤

代码语言:txt
复制
psql

postgres=# select count(*) from pg_class;
 count 
-------
   403
(1 row)

postgres=# create temp table t1(id int);
CREATE TABLE
postgres=# select count(*) from pg_class;
 count 
-------
   404
(1 row)

postgres=# create temp table t2(id text);  
CREATE TABLE
postgres=# select count(*) from pg_class;
 count 
-------
   407
(1 row)

postgres=# select oid from pg_class where relname='t2'; 
  oid  
-------
 16515
(1 row)

postgres=# select relname from pg_class where relname like '%16515%';
       relname        
----------------------
 pg_toast_16515
 pg_toast_16515_index
(2 rows)

postgres=# 
同时,pg_index,pg_constraint,pg_type,pg_attribute等系统表也会随着表字段数增加而写入更多的数据,而客户环境上还部署有逻辑复制槽,这会进一步加剧系统表的膨胀问题,导致插入速度的降低,影响创建临时表的创建

解决方法

代码语言:txt
复制
建议尽量减少字端数量,尽可能精确描述字段最大长度,减少使用varchar超长字段,以及text字端。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境信息
  • 问题
  • 根本原因
  • 诊断步骤
  • 解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档