|
117 | 117 | /*
|
118 | 118 | * The situation for members is a bit more complex: we store one byte of
|
119 | 119 | * additional flag bits for each TransactionId. To do this without getting
|
120 |
| - * into alignment issues, we store four bytes of flags, and then the |
121 |
| - * corresponding 4 Xids. Each such 5-word (20-byte) set we call a "group", and |
| 120 | + * into alignment issues, we store eight bytes of flags, and then the |
| 121 | + * corresponding 8 Xids. Each such 9-word (20-byte) set we call a "group", and |
122 | 122 | * are stored as a whole in pages. Thus, with 8kB BLCKSZ, we keep 409 groups
|
123 | 123 | * per page. This wastes 12 bytes per page, but that's OK -- simplicity (and
|
124 | 124 | * performance) trumps space efficiency here.
|
|
132 | 132 | #define MXACT_MEMBER_XACT_BITMASK ((1 << MXACT_MEMBER_BITS_PER_XACT) - 1)
|
133 | 133 |
|
134 | 134 | /* how many full bytes of flags are there in a group? */
|
135 |
| -#define MULTIXACT_FLAGBYTES_PER_GROUP 4 |
| 135 | +#define MULTIXACT_FLAGBYTES_PER_GROUP 8 |
136 | 136 | #define MULTIXACT_MEMBERS_PER_MEMBERGROUP \
|
137 | 137 | (MULTIXACT_FLAGBYTES_PER_GROUP * MXACT_MEMBER_FLAGS_PER_BYTE)
|
138 | 138 | /* size in bytes of a complete group */
|
@@ -900,6 +900,7 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset,
|
900 | 900 | memberptr = (TransactionId *)
|
901 | 901 | (MultiXactMemberCtl->shared->page_buffer[slotno] + memberoff);
|
902 | 902 |
|
| 903 | + |
903 | 904 | *memberptr = members[i].xid;
|
904 | 905 |
|
905 | 906 | flagsptr = (uint32 *)
|
|
0 commit comments