With multi-threaded replication (MTR), a replica can commit
transactions in the same order as the source, or not. This is
determined by sysvar replica_preserve_commit_order
(RPCO). As of MySQL v8.0.27 (released October 2021) it’s ON by
default, but it was OFF by default for several years prior. In
either case, it’s relatively new compared to 20+ years of
single-threaded replication for which commit order was not an
issue or option. But with MTR, it’s important to understand the
affects of RPCO, especially with respect to the focus of this
three-part series: replication lag.
I recently became aware of WeSQL. A MySQL-compatible database that separates compute and storage, using S3 as the storage layer. The product uses a columnar format by default which is significantly more space-efficient than InnoDB.
WeSQL introduces a new storage engine called SmartEngine using a LSM-tree-based structure that is ideal for a storage bucket implementation, and documentation shows the implementation of raft replication to combat latency concerns. There is a lot more information to review, the serverless architecture and WeScale, a database proxy and resource manager.
It was very easy to take it for an initial spin using a docker container and an AWS S3 bucket. I would really like to try CloudFlare R2 which implements the S3 API.
Under the covers there …
[Read more]After installing & configuring Dolphie, let’s take a look into how we can “re-record not fadeaway” and avoid using a VHS tape.
One of the coolest features is being able to go back in time with Dolphie and analyze what was happening at a specific moment.
This feature requires recording so we can replay.
Setting Dolphie up for recording mode.
I’m really just going to share the links to the the github site and organize my steps so someone else might want to rinse’n’repeat or “replay”. I’m just a mere messenger.
It works via the Daemon mode. …
[Read more]I have been looking into “dolphie” lately, and have to say, “thanks Charles!”. I actually first saw dolphie via Lefred’s MySQL Belgian Days and installed it just after looking into the slidedeck. But never got around to looking further… until now.
We can use so many different observability (o11y?) tools to get notifications, alerts, react, generate reports, etc. from so many different companies, using agents, proxies, repositories, and so on and so forth. And after exchanging experiences with dolphie’s author himself, Charles, the idea here is to go that little bit further in …
[Read more]Recently I was asked a question: Why am I getting utf8mb4_0900_ai_ci as the default collation in MySQL 8, despite setting the server to use utf8mb4_general_ci? With the upgrade to MySQL…
The post MySQL 8 utf8mb4_0900_ai_ci collation confusion first appeared on Change Is Inevitable.
This was principally written for my SQL students but I thought it might be useful to others. SQL calculation are performed row-by-row in the SELECT-list. In its simplest form without even touching a table, you can add two literal numbers like this:
SELECT 2 + 2 AS result;
It will display the result of the addition to the column alias result as a derived table, or the following result:
+--------+ | result | +--------+ | 4 | +--------+ 1 row in set (0.00 sec)
Unfortunately, the use of literal values as shown above doesn’t really let you see how the calculation is made row-by-row because it only returns one row. You can rewrite the two literal values into one variable by using a Common Table Expressions (CTEs). The CTE creates an struct tuple with only one x element. Another way to describe what the CTE does would say, it creates a derived table named struct with a single …
[Read more]Even though I used a dedicated Kubernetes cluster to host my test database, I had this belief that by not explicitly allocating (or requesting, in Kubernetes vocabulary) CPU resources to my Percona XtraDB Cluster (PXC) pods or yet making just a small request, Kubernetes could be delaying access to the free CPU cycles available on […]
Different ways to get the status:
mysqlsh --login-path=icadmin -h$MYROUTER1 -- cluster status
mysqlsh --login-path=icadmin -h${HOSTNAME} --redirect-primary -- cluster status
mysqlsh icadmin:'P4ssw0rD'@db01:3306 -- cluster status --extended=0
mysqlsh icadmin@$MYROUTER1:3306 -- cluster status --extended=1
watch -n 5 “mysqlsh --login-path=icadmin -h$MYROUTER1 -- cluster status”
Set the Primary Instance (switching):
mysqlsh --login-path=icadmin -h${HOSTNAME} --redirect-primary -- cluster set_primary_instance "db01"
Obtaining MySQL InnoDB Cluster basics:
select cluster_id, cluster_name, description, cluster_type, primary_mode, clusterset_id from mysql_innodb_cluster_metadata.clusters;
Members of our cluster:
select * from performance_schema.replication_group_members order by MEMBER_ROLE;
Local & Remote Trans Q’s:
…[Read more]
So, we’ve heard that jemalloc is better than malloc for MySQL usage, and in fact, certain versions / forks of mysql already include this, eg. Percona Server (https://github.com/percona/jemalloc).
But, how can I install and configure my system to use it?
Here’s a quick push in the, hopefully, right direction.
First things first, what is “jemalloc” and how does it affect my system? I think it’s quite well explained here: https://www.percona.com/blog/impact-of-memory-allocators-on-mysql-performance/ albeit an old article.
The right place to get the latest …
[Read more]I love my job. One of the best feelings is when I find an interesting paper and use it to solve a real problem. It feels like I found a cheat code. Instead of having to do a lot of hard thinking, I can just stand on the shoulders of really big people and take a shortcut. Here, I want to share a recent project that I could solve using a public paper.