Bug #93023 Simplify writeset configuration and documentation
Submitted: 31 Oct 2018 9:56 Modified: 19 Dec 2018 13:41
Reporter: Simon Mudd (OCA) Email Updates:
Status: No Feedback Impact on me:
None 
Category:MySQL Server: Replication Severity:S4 (Feature request)
Version:8.0.13 OS:Any
Assigned to: CPU Architecture:Any
Tags: configuration, replication, simplify, writeset

[31 Oct 2018 9:56] Simon Mudd
Description:
When setting up 8.0 to use write sets (not the default configuration but it is recommended by Oracle for better replication performance) I misconfigured the server and got this error:

2018-10-31T09:39:40.727641Z 0 [ERROR] The transaction_write_set_extraction must be set to XXHASH64 or MURMUR32 when binlog_transaction_dependency_tracking is WRITESET or WRITESET_SESSION.

Checking the documentation I see in https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_...

There's no explicit reference here that if any value other than COMMIT_ORDER that you MUST set  transaction_write_set_extraction.

Also the binlog_transaction_dependency_tracking seems to be a SLAVE related configuration. I may not have binlogs enabled on the server (and in this specific case I did not) so I wonder why I need to set  transaction_write_set_extraction which I understood to be a master only related setting.

How to repeat:
See description above.

Suggested fix:
1. Make documentation clearer as to which settings (maybe both) are needed on a master and also a slave (with and without binlogs).

2. If binlog_transaction_dependency_tracking is set to anything other than COMMIT_ORDER and transaction_write_set_extraction is not set explicitly or OFF (the default) then set it to XXHASH64 (Group replication requires this and it's possible to override it explicitly if needed).  Doing so would reduce the number of settings to configure at once, so simplifies configuration.
[9 Nov 2018 12:34] MySQL Verification Team
Hello Simon,

Thank you for the feature request!

regards,
Umesh
[9 Nov 2018 17:16] Sven Sandberg
Posted by developer:
 
Thank you for the bug report, Simon!

Regarding
"There's no explicit reference here that if any value other than COMMIT_ORDER
that you MUST set transaction_write_set_extraction."

Actually it says:
"The value of this variable cannot be set to anything other than COMMIT_ORDER
if transaction_write_set_extraction is OFF."

So I think this is indeed documented.

Both binlog_transaction_dependency_tracking and transaction_write_set_extraction are *master* options. transaction_write_set_extraction=XXHASH64 tells the master server to compute writesets, and binlog_transaction_dependency_tracking tells the server to use this information when computing logical timestamps (writesets may additionally be used by group replication, hence the different options).

None of these settings is needed on slaves. On slave, you only need to enable slave_parallel_type=LOGICAL_CLOCK and slave_parallel_workers=<NUMBER>.

So, I think the current documentation is correct, but I do see that it would be useful to have one place that lists options to set on each server in order to enable writeset parallelization. Hence, I'm marking this as a documentation bug.

Regarding your other request, to make one option implicitly set another, would you mind filing a separate bug for that, to keep server and doc issues separate?

Thanks for your time.
[20 Dec 2018 1:00] Bugs System
No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".