Re: Delay the variable initialization in get_rel_sync_entry
От | Euler Taveira |
---|---|
Тема | Re: Delay the variable initialization in get_rel_sync_entry |
Дата | |
Msg-id | 9bd1820b-1624-4112-93e2-e33f6e96dd81@www.fastmail.com обсуждение исходный текст |
Ответы |
Re: Delay the variable initialization in get_rel_sync_entry
|
Список | pgsql-hackers |
On Wed, Dec 22, 2021, at 10:11 AM, houzj.fnst@fujitsu.com wrote:
When reviewing some logical replication patches. I noticed that infunction get_rel_sync_entry() we always invoke get_rel_relispartition()and get_rel_relkind() at the beginning which could cause unnecessarycache access.---get_rel_sync_entry(PGOutputData *data, Oid relid){RelationSyncEntry *entry;bool am_partition = get_rel_relispartition(relid);char relkind = get_rel_relkind(relid);---The extra cost could sometimes be noticeable because get_rel_sync_entry is ahot function which is executed for each change. And the 'am_partition' and'relkind' are necessary only when we need to rebuild the RelationSyncEntry.Here is the perf result for the case when inserted large amounts of data into aun-published table in which case the cost is noticeable.--12.83%--pgoutput_change|--11.84%--get_rel_sync_entry|--4.76%--get_rel_relispartition|--4.70%--get_rel_relkind
Good catch. WFM. Deferring variable initialization close to its first use is
good practice.
В списке pgsql-hackers по дате отправления: