首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过频繁创建临时表耗尽pg_class OID

问题:通过频繁创建临时表耗尽pg_class OID

答案:在PostgreSQL数据库中,pg_class是系统目录表之一,用于存储数据库中的所有表的元数据信息。每当在数据库中创建一个新表时,都会在pg_class中生成一个新的OID(对象标识符)来唯一标识该表。

频繁创建临时表可能会导致pg_class中的OID耗尽。这可能会导致以下问题:

  1. 表创建失败:当pg_class中的OID耗尽时,无法再为新创建的表分配唯一的OID,因此表创建操作将失败。
  2. 性能下降:频繁创建临时表会导致pg_class表的频繁更新,这可能会对数据库的性能产生负面影响。

为了解决这个问题,可以考虑以下方法:

  1. 优化临时表的使用:尽量避免频繁创建临时表,可以通过合并临时表或者使用临时表的持久化版本来减少对pg_class的频繁操作。
  2. 增加pg_class的OID范围:可以通过修改PostgreSQL配置文件中的参数max_fsm_relations和max_fsm_pages来增加pg_class的OID范围。这样可以提高系统能够创建的临时表的数量。
  3. 定期清理无用的临时表:定期清理无用的临时表可以释放pg_class中的OID,避免OID耗尽的问题。可以使用VACUUM命令或者手动删除不再需要的临时表。

腾讯云相关产品和产品介绍链接地址:

腾讯云数据库 PostgreSQL:https://cloud.tencent.com/product/postgresql

腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm

腾讯云云原生应用引擎 TKE:https://cloud.tencent.com/product/tke

腾讯云对象存储 COS:https://cloud.tencent.com/product/cos

腾讯云区块链服务 TBC:https://cloud.tencent.com/product/tbc

请注意,以上链接仅供参考,具体产品选择应根据实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQL Server通过创建临时遍历更新数据

好像并没有for和foreach这种类型的功能呀,不过关于数据库遍历最常见的方法当然是大家经常会想到的游标啦,但是这次我并没有使用游标,而是通过创建临时的方式来更新遍历数据的。...为什么不使用游标,而使用创建临时?   ...通过临时while遍历数据,更符合我们日常的编程思想操作集合原则,性能上虽不敢保证使用游标要好多少,但是在把临时使用恰当的前提是能减少大量的性能消耗,并且使用起来非常简单易懂。...通过创建临时遍历更新数据: 注意:这里只是一个简单的临时更新实例。 我的目的是把TalkingSkillType中的Sort值更新成为与Id一样的值! 未更新前的数据如下图所示: ?...临时遍历更新SQL语句: ----SQL SERVER通过临时遍历数据 -- 判断是否存在(object(‘objectname’,‘type’)) IF OBJECT_ID('tempdb.dbo

2.2K20
  • PostgreSQL创建临时性能下降分析

    环境信息 PostgreSQL 11.5 问题 客户反馈临时创建耗时较长,平均耗时在5ms以上,相对于之前测试阶段的创建时间有明显变慢。...根本原因 postgresql在创建时,会预估当前是否存在超长记录的可能,如果使用了text,varchar(555)等超大字端,会在创建同时创建toast及toast索引,同时多字段会写入系统表记录...,这将增大创建的开销。...; count ------- 407 (1 row) postgres=# select oid from pg_class where relname='t2'; oid --...,而客户环境上还部署有逻辑复制槽,这会进一步加剧系统的膨胀问题,导致插入速度的降低,影响创建临时创建 解决方法 建议尽量减少字端数量,尽可能精确描述字段最大长度,减少使用varchar超长字段,以及

    2.5K00

    Postgresql存储结构

    系统初始化后,没有创建任何但是base/13158/下已经生成了很多表文件,这些文件就是当前数据库系统,例如pg_class,注意系统的relfilenode为0,可以使用隐藏列oid 或者 pg_relation_filepath...postgres=# select oid,relname, relfilenode from pg_class where relname='pg_class'; oid | relname |...空间提供了存储的灵活控制方式: 例如在当前磁盘快满时,可以在任意新挂载的文件系统上创建空间,把存储在新的目录中;一个频繁使用的可以放在IO性能更好的磁盘上,比如SSD。...使用空间有两种方式: 创建时指定空间 创建数据库时指定空间 创建空间 CREATE TABLESPACE tablespace_name [ OWNER { new_owner |...postgres=# select oid,relfilenode from pg_class where relname='foo'; oid | relfilenode -------+

    1.2K42

    PostgreSql 怎么获取数据库中关键系统信息(一)

    如何通过SQL 的方式获得数据库中的一些关键信息,是一个DB最正常的工作,如何通过一些SQL来获得PG的一些关键的参数和信息或者是数据库中的一些信息是需要知道的一件事情。...以下是部分 1 一般来说每种数据库中都有一个或几个系统的数据库,在PG中schemaname 以 pg_catalog开头都是系统通过系统我们就可以了解的大部分数据库系统所做的事情 1 查看当前所有的...(用户) SELECT relname FROM pg_class WHERE relname !...= t.oid 5 查询的索引 SELECT relname, indkey FROM pg_class, pg_index WHERE pg_class.oid = pg_index.indexrelid...t ON c.conrelid = t.oid LEFT JOIN pg_class t2 ON c.confrelid = t2.oid WHERE t.relname = '名' AND

    1.2K50

    Postgresql源码(48)namespace计算逻辑分析(不显示指定namespace)

    按"$user", public场景来说,搜索顺序: 1、临时 2、系统 3、普通 (原因见下面recomputeNamespacePath函数分析) postgres=# show search_path...; search_path ----------------- "$user", public -- 优先级1:临时 -- create temp table pg_class(i...int); pg_temp_3.pg_class -- 优先级2:pg_catalog pg_catalog.pg_class -- 优先级3:普通 -- create table pg_class...但是一般我们只创建用户,不会默认带一个同名namespace的,所以这里经常查出来oid=0,不会记录到结果集中当前【public】在pg_namespace中查询到OID2200记录到oidlist中...RangeVarGetCreationNamespace 例如我创建的时候没有指定namespace,那么创建时就会有这样的参数进入RangeVarGetCreationNamespace: (gdb

    91230

    PostgreSQL创建分析

    创建过程概述 服务进程接受SQL语句,解析SQL语句 取出其中定义的名称、列名称 检查表的名称和列名、列的数据结构 打开pg_class,返回一个未被使用的oid作为创建oid 基于oid...来创建的磁盘文件 针对新创建创造对应的对象类型 在pg_class中注册新的信息 在pg_attribute中注册新的colume信息 关闭的对应relation,同时返回oid 物理文件的创建函数执行路径...9.DefineRelation:返回一个的ObjectAddr,其中包括pg_class中的oid,这个对象的oid,这个中column中的sub oid 10.heap_create_with_catalog...:实际的执行标创建的函数 14.RelationCreateStorage:构建磁盘的文件 // 如果是根据tablespace oid,database oid,table oid创建一个数据库...); // 从pg_class中针对当前返回一个可用oid relid = GetNewRelFileNode(reltablespace, pg_class_desc,

    1.7K30

    PostgreSQL可拔插存储引擎定义机制

    2、如果创建时没有指定使用访问方法,那么会使用默认的访问方法,即heap 3、调用get_table_am_oid根据访问方法名获取对应的oid,即pg_am的oid字段: 1)先从SysCache...、向pg_class系统插入一条元数据tuple: 5、需要先判断创建是否已存在:从SysCache[RELNAMESP]hash检索,缓存pg_class_relname_nsp_index;...或者从pg_class顺序扫描:relname和relnamespace 6、调用heap_create函数进行初始化访问方法和创建磁盘物理文件 7、调用AddNewRelationTuple向pg_class...1)申请Relation结构体空间并初始化 2)rel->rd_rel即pg_class的一个tuple信息申请空间并初始化 3)将pg_am的oid字段值保存到rel->rd_rel...打开smgr信息,即控制IO层 11、rel->rd_tableam->relation_set_new_filenode创建物理文件,通过rel->rd_tableam得到访问方法api。

    1.3K10

    史上最全:PostgreSQL DBA常用SQL查询语句(建议收藏学习)

    .oid; 按占空间大小,顺序查看所有的大小 select relname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_tables...;对于Schema来说,允许查找该Schema下的对象;对于序列来说,允许使用currval和nextval函数;对于外部封装器来说,允许使用外部封装器来创建外部服务器;对于外部服务器来说,允许创建外部...查看表上存在哪些索引以及大小 select relname,n.amname as index_type from pg_class m,pg_am n where m.relam = n.oid and...m.oid in (select b.indexrelid from pg_class a,pg_index b where a.oid = b.indrelid and a.relname = '...b.indexrelid from pg_class a,pg_index b where a.oid = b.indrelid and a.relname = 'cc'; select pg_get_indexdef

    10K12

    【赵渝强老师】史上最详细的PostgreSQL体系架构介绍

    oid分别存放在pg_database,pg_class中。...可以通过下面的方式来查看当前数据库的Schema\dn段-segment一个段是分配给一个逻辑结构(一个、一个索引或其他对象)的一组区,是数据库对象使用的空间的集合;段可以有段、索引段、回滚段、临时段和高速缓存段等...例如,数据库的OID存储在pg_database系统中,可以通过下面的语句进行查询。...select oid,datname from pg_database;而数据库中的、索引、序列等数据库对象的OID则存在了pg_class系统中,例如可以通过下面的语句查询前面创建的testtable1...文件名以OID命名,对于超出1G的数据文件,PostgreSQL会自动将其拆分为多个文件来存储,而拆分的文件名将由pg_class中的relfilenode字段来决定。

    17710

    Postgresql INDEX HOT 原理与更好的 “玩转” INDEX

    下面是经典的两个图 ,1 如果没有 HOT 的情况下 2 使用HOT 的情况 所以结论是POSTGRESQL 在频繁的UPDATE 当中,如果更新的字段是索引的情况下,将引发大量的索引更新,引起...= 'btree' and s.leaf_fragmentation > 0 and s.leaf_fragmentation 'NaN'; 通过上面的语句去查询你索引的碎片率,通过这个来决定你的是否要进行索引的重建的工作...除此以外,我们还可以针对索引做如下的一些工作 1 在Postgresql 中创建针对索引的空间,数据和索引进行分离,而不要将索引和数据创建在一个数据文件内。...pg_index x ON c.oid = x.indrelid INNER JOIN pg_class i ON i.oid = x.indexrelid LEFT JOIN pg_namespace...2 通过 pg_stat_user_tables 中的 seq_scan 和 idx_scan 两个字段的数值的对比来发现问题,如 seq_scan 疯狂的增加数字,而idx_scan 里面不增长或增长很慢

    1.1K40

    Greenplum数据库巡检报告

    31 5.1.4.1 分布键说明 31 5.1.4.2 修改分布键 31 5.1.4.3 对表进行重新创建 31 5.2 检查膨胀率过高的 32 5.2.1 查看schema下的AO 32 5.2.2...此索引的OID indexrelid oid 该指数的OID schemaname name 此索引所在的架构的名称 relname name 此索引的的名称 indexrelname name...此索引的OID indexrelid oid 该指数的OID schemaname name 此索引所在的架构的名称 relname name 此索引的的名称 indexrelname name...,数据库会按照此参数指定大小进行分片排序,将中间结果存放在临时文件中,这些中间结果的临时文件最终会再次合并排序,所以增加此参数可以减少临时文件个数进而提升排序效率。...在默认情况下,一个SQL查询最多可以创建 100000 个溢出文件,这足以满足大多数查询。 该参数决定了一个查询最多可以创建多少个溢出文件。0 意味着没有限制。

    2.5K102

    PG中的WAL:1 buffer cache

    缓存中的哈希用于快速找到您需要的页面。 在cache中查询一个页 当一个进程需要读取一个页面时,它首先试图通过哈希在缓冲区缓存中找到它。文件OID和文件中的页号用作哈希键。...我们可以看到哪些在我们的数据库中被缓存了,这些数据被使用得多频繁(通过频繁使用”,在这个查询中使用计数大于3的缓冲区是指): => SELECT c.relname, count(*) blocks...(*) FILTER (WHERE b.usagecount > 3) / pg_table_size(c.oid) ) "% hot" FROM pg_buffercache b JOIN pg_class...临时 临时是普通规则的例外。因为临时数据只对一个进程可见,所以在共享缓冲区缓存中不需要它们。此外,临时数据只存在于一个会话中,因此不需要针对故障的保护。...与共享缓冲区缓存不同,本地缓存的内存是根据需要分配的,因为临时在许多会话中很少使用。单个会话中临时的最大内存大小受temp_buffers参数。

    91030

    PostgreSQL技术大讲堂 - 第24讲:TOAST技术

    时自动创建Toast --创建 create table toast_t(id int,vname varchar(48),remark text); --其中remak数据类型是text,列值长度超过...--查看tostoid testdb=# select relname,relfilenode,reltoastrelid from pg_class where relname='toast_t1...属性:存储TOAST的实际数据 --查看tostoid testdb=# select relname,oid,rreltoastrelid from pg_class where relname...Toast,两者的关联是通过pg_class里的OID去关联的 · Toast的计算案例(一) testdb=# create table toast_t(id int,vname varchar(...数据没有被更新时,不用去更新Toast Toast的缺点 1.对大字段的索引创建是一个问题,有可能会失败,通常不建议在大字段上创建,全文检索是一个解决方案 2.大字段的更新会有点慢,其它DB也存在相同问题

    30520
    领券