PostgreSQL 有一个包含不同高可用性选项的矩阵,这些选项代表了将复制构建到 RDBMS 中的许多不同方式。
问题
给定一个 PostgreSQL 数据库,可以使用什么命令来确定数据库是否需要抽真空?
更新我正在与正在评估 postgres 的客户合作,但我不是 DBA,我碰巧对 postgres 比他们更有经验。他们在一个表中有 50 万行的测试中获得了几个小时的更新时间。他们没有对共享缓冲区的 GUCS、work_mem 等进行任何更改,我只是和他们一起完成并让他们这样做。在他们的一些测试中,postgres 报告更新需要 3674 秒,而在 oracle 中需要 2.66 秒,在 MySQL 中需要 33.8 秒。我希望能够回答真空会对他们的测试产生影响的问题,但能够向他们返回有关真空对其测试的影响的真实数据。
CentOS 6 Intel 双处理四核 Xeon K5570 8GB RAM 上的 Postgres 9.2
表中的每一行都需要保护 一个应用程序特定角色的列表让我们说一些看起来像下面这个例子的东西
Desired Table Structure
pkey | data | roles
---------------------
1 | ... | {1,2,5}
2 | ... | {1,4,3}
3 | ... | {7,11,67,101}
Run Code Online (Sandbox Code Playgroud)
在此示例中,具有主键 1 的行应该只对具有角色 1、2 或 5 的任何用户可见,第 2 行应该对具有角色 1、4 或 3 的任何用户可见......等等。
当用户登录应用程序时,应用程序会计算用户拥有的所有角色,例如我知道用户 1 具有角色 {1,11,7},用户 2 具有角色 {1,3,5}
我当前的实现使用两个这样的表。
Actual Table Structure
foo table
pkey | data
------------
1 | ...
2 | ...
3 | ...
roles table
foo_fk | role_id
------------------
1 | 1
1 | 2
1 | 5 …
Run Code Online (Sandbox Code Playgroud)