Only first XLogRecData is visible to rm_desc with WAL_DEBUG

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема Only first XLogRecData is visible to rm_desc with WAL_DEBUG
Дата
Msg-id 532FFAFE.3010109@vmware.com
обсуждение исходный текст
Ответы Re: Only first XLogRecData is visible to rm_desc with WAL_DEBUG  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
As we all know, when you compile with WAL_DEBUG, and enable wal_debug 
GUC, you get output like this in the log for every inserted WAL record:

LOG:  INSERT @ 0/5407E578: prev 0/5407E4D0; xid 0; len 32: Standby - 
running xacts: nextXid 774 latestCompletedXid 771 oldestRunningXid 772; 
2 xacts: 7877929 0

What I did *not* realize before is that the redo routine only gets 
passed the first XLogRecData struct in the chain. Because of that, the 
"xacts: 7877929 0" information above is garbage. That's probably not the 
only rm_desc routine that didn't get the memo.

There are a few alternatives on how to fix that:

1. Do nothing. Add a comment somewhere explaining that rm_redo cannot 
safely look at data beyond what's inserted in the first XLogRecData.

2. Reconstruct the WAL data from the XLogRecData entries in a palloc'd 
buffer, and pass that to rm_redo. That would be fairly expensive, but 
you probably don't care about that if you've enabled wal_debug.

3. Remove the feature altogether, so that enabling wal_debug doesn't 
cause all insertions to be logged anymore (no changes to the logging 
during replay). It's a lot less interesting now that we have pg_xlogdump.

Thoughts?

- Heikki



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Magnus Hagander
Дата:
Сообщение: Dynamic background workers & docs question
Следующее
От: Swapnil Bhoite
Дата:
Сообщение: Global flag