Database size different on Primary and Standby?
I manage some PostgreSQL clusters on Linux. We have a Primary & two Standby servers & for Production, there is also a DR server. We use repmgr for our HA solution & the Standbys are cloned from the Primary using the repmgr standby clone command.
My manager asked for a report of all the user databases & their sizes for each server in the cluster.
I used the psql "\l+" command & then extracted the database name & the size from the output.
I expected the databases to be the same size on the Standbys as on the Primary, but I found that some of the databases were smaller on the Standby servers than on the Primary.
For example, the output on the Primary for one of the user databases showed as: 8997 kB, but on the Standbys, it was 8849 kB.
I even dropped the database on the Primary & then restored it from a backup. Then checked the sizes again & they still showed the difference.
I also found that the template1 database on the Primary was 7821 kB, but on the Standbys, it was 7673 kB.
Is this normal? Why would the sizes be different?
Thanks,
Karin Hilbert
Database Administration
Pennsylvania State University
On 19/01/2023 00:09 CET Hilbert, Karin <ioh1@psu.edu> wrote:
I manage some PostgreSQL clusters on Linux. We have a Primary & two Standby
servers & for Production, there is also a DR server. We use repmgr for our HA
solution & the Standbys are cloned from the Primary using the repmgr standby
clone command.My manager asked for a report of all the user databases & their sizes for each
server in the cluster. I used the psql "\l+" command & then extracted the
database name & the size from the output. I expected the databases to be the
same size on the Standbys as on the Primary, but I found that some of the
databases were smaller on the Standby servers than on the Primary.For example, the output on the Primary for one of the user databases showed
as: 8997 kB, but on the Standbys, it was 8849 kB.
The standbys could be missing some indexes because schema changes are not
replicated and must be applied manually.
I even dropped the database on the Primary & then restored it from a backup.
Then checked the sizes again & they still showed the difference.I also found that the template1 database on the Primary was 7821 kB, but on
the Standbys, it was 7673 kB. Is this normal? Why would the sizes be different?
Is template1 identical (schema and data) on primary and standby?
Could also be different page sizes. But that's a compilation option. What does
SHOW block_size say on those systems?
--
Erik
2023年1月19日(木) 8:50 Erik Wienhold <ewie@ewie.name>:
On 19/01/2023 00:09 CET Hilbert, Karin <ioh1@psu.edu> wrote:
I manage some PostgreSQL clusters on Linux. We have a Primary & two Standby
servers & for Production, there is also a DR server. We use repmgr for our HA
solution & the Standbys are cloned from the Primary using the repmgr standby
clone command.My manager asked for a report of all the user databases & their sizes for each
server in the cluster. I used the psql "\l+" command & then extracted the
database name & the size from the output. I expected the databases to be the
same size on the Standbys as on the Primary, but I found that some of the
databases were smaller on the Standby servers than on the Primary.For example, the output on the Primary for one of the user databases showed
as: 8997 kB, but on the Standbys, it was 8849 kB.The standbys could be missing some indexes because schema changes are not
replicated and must be applied manually.
This is incorrect; with streaming replication all changes applied on the primary
are applied on the standby.
(...)
Could also be different page sizes. But that's a compilation option. What does
SHOW block_size say on those systems?
It is impossible to start a standby using binaries built with a
different block size to
the primary.
Regards
Ian Barwick
On 19/01/2023 01:23 CET Ian Lawrence Barwick <barwick@gmail.com> wrote:
2023年1月19日(木) 8:50 Erik Wienhold <ewie@ewie.name>:
On 19/01/2023 00:09 CET Hilbert, Karin <ioh1@psu.edu> wrote:
I manage some PostgreSQL clusters on Linux. We have a Primary & two Standby
servers & for Production, there is also a DR server. We use repmgr for our HA
solution & the Standbys are cloned from the Primary using the repmgr standby
clone command.My manager asked for a report of all the user databases & their sizes for each
server in the cluster. I used the psql "\l+" command & then extracted the
database name & the size from the output. I expected the databases to be the
same size on the Standbys as on the Primary, but I found that some of the
databases were smaller on the Standby servers than on the Primary.For example, the output on the Primary for one of the user databases showed
as: 8997 kB, but on the Standbys, it was 8849 kB.The standbys could be missing some indexes because schema changes are not
replicated and must be applied manually.This is incorrect; with streaming replication all changes applied on the primary
are applied on the standby.
Thanks. I was thinking about logical replication.
(...)
Could also be different page sizes. But that's a compilation option. What does
SHOW block_size say on those systems?It is impossible to start a standby using binaries built with a
different block size to
the primary.
Makes sense for streaming replication.
--
Erik
Erik Wienhold <ewie@ewie.name> writes:
On 19/01/2023 01:23 CET Ian Lawrence Barwick <barwick@gmail.com> wrote:
This is incorrect; with streaming replication all changes applied on the primary
are applied on the standby.
Thanks. I was thinking about logical replication.
It's not entirely clear whether the OP is talking about physical or
logical replication --- the discrepancy would sure be a lot easier
to explain if it is logical rep. In physical rep the databases
*should* be pretty much physically identical. I think though that
the amount of WAL that's being kept around could be different.
regards, tom lane
On 1/18/23 17:09, Hilbert, Karin wrote:
I manage some PostgreSQL clusters on Linux. We have a Primary & two
Standby servers & for Production, there is also a DR server. We use
repmgr for our HA solution & the Standbys are cloned from the Primary
using the *repmgr standby clone* command.My manager asked for a report of all the user databases & their sizes for
each server in the cluster.
I used the psql *"\l+"* command & then extracted the database name & the
size from the output.
I expected the databases to be the same size on the Standbys as on the
Primary, but I found that some of the databases were smaller on the
Standby servers than on the Primary.For example, the output on the Primary for one of the user databases
showed as: *8997 kB*,but on the Standbys, it was *8849 kB*.I even dropped the database on the Primary & then restored it from a
backup. Then checked the sizes again & they still showed the difference.I also found that the template1 database on the Primary was *7821 kB*, but
on the Standbys, it was *7673 kB*.
*/Is this normal? Why would the sizes be different?/*
Maybe it is. 8997 - 8849 = 7821 - 7673 = 148. That's right: both primaries
are exatly 148KB larger.
This will tell you where the differences are: $ du -kc $PGDATA
--
Born in Arizona, moved to Babylonia.