首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >slony中表id的限制是什么?

slony中表id的限制是什么?
EN

Stack Overflow用户
提问于 2015-05-29 17:30:23
回答 1查看 134关注 0票数 0

我正在使用slony设置postgres复制。我有许多包含相同(或非常相似)表集的模式,因此我为每个模式创建单独的复制集。每个模式都有特定的唯一编号,因此这个编号成为集合的id。

然后,我将表添加到复制。据我所知,每个表在所有表中都必须有唯一的id。因为表是每月创建的,所以表的id由年、月和集合id串联而成。一切正常,但是当集合id有四位数时(例如,表id将是:2015051162),在将表添加到复制之后,它会给我一个错误:

代码语言:javascript
复制
 2015-05-29 10:09:20 CEST INFO   remoteWorkerThread_1: syncing set 101162 with 1 table(s) from provider 1
 2015-05-29 10:09:22 CEST CONFIG slon: child terminated signal: 11; pid: 18738, current worker pid: 18738
 2015-05-29 10:09:22 CEST CONFIG slon: restart of worker in 10 seconds

在我看来,这个表id太大了,因为对于具有个位数id的集合,所有内容都可以正确复制。除了在复制集群中必须是唯一的之外,表id是否有任何限制?

EN

回答 1

Stack Overflow用户

发布于 2015-05-29 19:19:46

有限制吗?

除了必须是int之外,没有硬性限制。

但是为什么它会失败?

看起来,由于这些it的存储方式,使用高it确实会占用一些内存。根据fine documentation

请注意,Slony-I会生成一个内存中的数组,表示所有完全限定的表名称;如果使用较大的表ID号,则很少使用的数组可能会导致大量内存浪费。每个潜在的表ID消耗一个指向字符的指针,在32位架构上,每个表ID通常占用4个字节,在64位架构上,每个表ID占用8个字节。

这意味着,如果您为100个表生成一组最大ID为5000的ID,slony将(尝试)创建一个能够容纳5000个表条目的数组。只有这4900个条目才不会被使用。

对于2015051162的ID,您必须为此数组保留4字节( 32位)* 2015051162 =大约8 8GB的空间,因此段错误可能只是针对该内存向操作系统发出的未填满的请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30525993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档