On Tue, Feb 14, 2017 at 3:19 PM, Seki, Eiji <[email protected]> wrote:
> This change will be useful for features that only reads rows that are visible
> by all transactions and could not wait specific processes (VACUUM, ANALYZE,
> etc...) for performance. Our company (Fujitsu) is developing such an
> extension. In our benchmark, we found that waiting an ANALYZE process created
> by autovacuum daemon often has a significant impact to the performance
> although the waited process do only reading as to the table. So I hope to
> ignore it using GetOldestXminExtend as below. The second argument represents
> flags to ignore.
>
> GetOldestXminExtended(rel, PROC_IN_VACUUM | PROC_IN_LOGICAL_DECODING |
> PROC_IN_ANALYZE);
>
> Note: We can ignore VACUUM processes or VACUUM with ANALYZE processes using
> the second option of GetOldesXmin, "ignoreVacuum". However, we cannot ignore
> only ANALYZE processes because the "ignoreVacuum" = true is same to the
> following.
GetOldestXmin(Relation rel, bool ignoreVacuum)
{
+ uint8 ignoreFlags = PROC_IN_LOGICAL_DECODING;
+
+ if (ignoreVacuum)
+ ignoreFlags |= PROC_IN_VACUUM;
+
+ return GetOldestXminExtended(rel, ignoreFlags);
+}
It seems to me that it would be far less confusing to just replace the
boolean argument of GetOldestXmin by a uint8 and get those flags
declared in procarray.h, no? There are a couple of code path calling
GetOldestXmin() that do not include proc.h, so it would be better to
not add any extra header dependencies in those files.
--
Michael
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers