One of the important optimisations we did in MySQL Cluster 7.4
was to
use more of direct function calls as part of SCAN processing
instead of
relying on asynchronous messages.
We want each message execution to be short, up to around 10
microseconds of execution per message we should strive to
keep it below. However if we decrease the time spent
executing
a message to down to a microsecond or smaller than we spend
too
much time in the message scheduler. So it is important to strike
a
balance here.
For primary key lookups we do most of the work in one
message
execution, so here we already were doing the optimal
behaviour
in our model of execution.
For scans however we often scan hundreds or even thousands
and
in some cases even millions of rows, so here there is a lot
of
opportunity to decide how to execute the scan.
…
DZone recently released the Guide to Database and Persistence Management. The Guide includes articles by thought leaders around the industry, including our CEO Baron Schwartz. It is a privilege to be included in such a publication with other luminary acolytes.
Download the full copy here, and check out page 14.
The State of the Storage Engine provides insight into the rapidly shifting landscape of data storage. It addresses why the standard textbook architecture is now being questioned and analyzes alternatives to the venerable B-tree Index, including the growing trend of log-structured merge trees.
Of course, no matter the underlying storage, there lies the classic iron triangle trade-off:
“You can have sequential reads without amplification, sequential …
[Read more]A much requested feature has made it to MySQL 5.7.6: Global Transaction Identifiers (GTIDs) can now be enabled online, without stopping writes, synchronizing servers, or restarting servers.
We introduced GTIDs in MySQL 5.6.6. GTIDs allow, among other things, seamless fail-over after a master has crashed. This enables highly available applications, since service can continue without interruption even if the master crashes. For new deployments, you could easily enable GTIDs right away – just set gtid-mode=ON in the configuration files. For deployments that accept a certain amount of downtime, you could switch from off to on too. However, for big deployments with strict limitations on downtime, this was more problematic, since you had to stop updates, sync all servers, and restart all servers simultaneously with GTIDs enabled, and this would lead to several minutes of downtime.
In MySQL 5.7.6, we have now made it possible to enable …
[Read more]More Awesome Replication Features in 5.7.6
It is time to celebrate again. The latest MySQL server development milestone (MySQL 5.7.6) was just released, and let me tell you, it is full of great replication enhancements. These new improvements cover many areas, ranging from performance to flexibility and easier deployment. Let me highlight some of them, and give you a brief summary of what they are.
Multi-source Replication
A MySQL 5.7.6 slave/server can now connect to multiple MySQL masters.
After a long development period, two labs releases, handling feedback from community, and a lot of internal (and external testing as well – thank you!), the multi-source replication feature was finally pushed into MySQL 5.7. This is a major milestone for replication itself. The feature allows a single MySQL server to aggregate …
[Read more]
MySQL 5.7 DMR6 was been released today! By my crude measurement,
it is a big release with a number of new features and bug
fixes:
morgo@Rbook:~$ for V in 1 2 3 4 5 6; do curl --silent
http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-$V.html |
wc -l; done;
2543
4914 <-- DMR2
2282
2940
4118
4121 <-- DMR6
The release notes have one important known bug to note:
We are very happy to introduce a new MySQL utility named
"mysqlslavetrx", which allows users to easily skip
multiple transactions on multiple servers in a single step. This
utility is one of three new utilities included in MySQL Utilities
release-1.6.1 Alpha. The other utilities are
"mysqlbinlogpurge" and "mysqlbinlogrotate", which
can be used to purge and rotate binary logs.
The mysqlslavetrx utility allows you to skip multiple
transactions on several slaves. More precisely, it injects empty
transactions for the specified Global Transaction Identifier
(GTID) set and list of target slaves. Skipping transactions can
be useful to quickly recover from erroneous situations that can
occur during the replication process, or to handle errant
transactions. Check out the following blog posts for more details
about concrete situations where you might need to inject empty
transactions:
- …
We are very happy to introduce a new MySQL utility named “mysqlslavetrx“, which allows users to easily skip multiple transactions on multiple servers in a single step. This utility is one of three new utilities included in MySQL Utilities release-1.6.1 Alpha. The other utilities are “mysqlbinlogpurge” and “mysqlbinlogrotate“, which can be used to purge and rotate binary logs.
The mysqlslavetrx utility allows you to skip multiple transactions on several slaves. More precisely, it injects empty transactions for the specified Global Transaction Identifier (GTID) set and list of target slaves. Skipping transactions can be useful to quickly recover from erroneous situations that can occur during the replication process, or to handle errant transactions. Check out the following blog posts for more details about concrete situations where you might need to inject empty transactions: …
[Read more]What is JSON
JSON is an text based, human readable format for transmitting data between systems, for serializing objects and for storing document store data for documents that have different attributes/schema for each document. Popular document store databases use JSON (and the related BSON) for storing and transmitting data.
Problems with JSON in MySQL
It is difficult to inter-operate between MySQL and MongoDB (or other document databases) because JSON has traditionally been very difficult to work with. Up until recently, JSON is just a TEXT document. I said up until recently, so what has changed? The biggest thing is that there are new JSON UDF by Sveta Smirnova, which are part of the MySQL 5.7 Labs releases. Currently the JSON UDF are up to version 0.0.4. While these new UDF are a welcome edition to the MySQL database, they don’t solve the really tough …
[Read more]
A new feature that assists in making node restart much faster
is
the new PAUSE LCP protocol. This is an excerpt from the
MySQL
Cluster 7.4 source code. There is also a fair amount of new
comments in the 7.4 source code which are only valid in the
code
context.
This module contains code that executes for the purpose of
pausing
LCP reporting to our meta data for a short time while we are
copying the
meta data to a new starting node.
In order to better understand the handling of the LCP protocol we
will
describe the LCP protocol, this includes both the old and the new
protocol.
The LCP protocol is controlled by the DIH in the master
node.
When an LCP has been completed we will immediately start checking
for
the need for a new LCP to be started.
The first step here is to ensure that we have had sufficient
activity in
…
performance_schema.setup_actors is a table in MySQL Performance
schema which could be used to specify what users/hosts one wants
to have instrumentation on for. By default connection from all
users and hosts are enabled to be instrumented for. Here is the
default configuration :
mysql> select * from performance_schema.setup_actors;
+------+------+------+
| HOST | USER | ROLE |
+------+------+------+
| % | % | %
|
+------+------+------+
1 row in set (0.00 sec)
It is easy to see that one can set for what user/host he/she
wants to have instrumentation ON.
BUT, how about if one wants to say except. i.e. how about if one
wants to say except 'mayank' turn ON instrumentation for every
other user. Thats what is implemented in 5.7.6 DMR.
In latest MySQL-5.7.6 DMR, a new column added to …