On Fri, Aug 25, 2023 at 10:16 AM Kristian Nielsen via commits
<commits@lists.mariadb.org> wrote:
>
> Compute binlog checksums (when enabled) already when writing events
> into the statement or transaction caches, where before it was done
> when the caches are copied to the real binlog file. This moves the
> checksum computation outside of holding LOCK_log, improving
> scalabitily.
>
> At stmt/trx cache write time, the final end_log_pos values are not
> known, so with this patch these will be set to 0.
[...]
> Checksums cannot be pre-computed when binlog encryption is enabled, as
> encryption relies on correct end_log_pos to provide part of the
> nonce/IV. Checksum pre-computation is also disabled for WSREP/Galera.

Have you thought about a format change that would address these issues?

In MDEV-14425 
https://github.com/MariaDB/server/commit/685d958e38b825ad9829be311f26729cccf37c46
I redesigned the InnoDB log file format in a way that allows checksums
to be computed before the final position of the records (the log
sequence number of LSN) is known. For encryption, an additional 64-bit
nonce will be written; this currently is the LSN at the time the
encryption was scheduled. Tablespace identifiers, page numbers and
file names are not encrypted, because these were never fully encrypted
in innodb_encrypt_tables=ON either. This allows the metadata to be
used as initialization vectors, and also avoids the need for backup
tools to know any encryption keys.

Thanks to MDEV-27774, not only InnoDB computes checksums while not
holding any mutex, but multiple threads can copy their
mini-transactions to the shared log_sys.buf while holding a shared
lock_sys.latch. An exclusive latch will only be needed during a log
checkpoint when we need to guarantee that all changes up to a
particular LSN have been written to the log buffer. This would not be
possible without the format change that was implemented in MDEV-14425.

> +/* Convenience macros since ulong is 32 or 64 bit depending on platform. */
> +#if SIZEOF_LONG == 4
> +#define my_atomic_storeul(P, D) my_atomic_store32((int32 volatile *)(P), (D))

In all currently supported MariaDB Server versions, C++11 is
available. Is there a particular reason why you would not use
std::atomic<size_t> here?

Marko
-- 
Marko Mäkelä, Lead Developer InnoDB
MariaDB plc
_______________________________________________
commits mailing list -- commits@lists.mariadb.org
To unsubscribe send an email to commits-le...@lists.mariadb.org

Reply via email to