It has been a little over a month since I joined 10gen and I want
to share some of my impressions now that some of the newness has
worn off and I am settling into my role. For context, in
March I left Oracle and my position as Director of Product
Management for the MySQL database to assume a similar role at
10gen working with MongoDB. I still have many good friends
and respected colleagues on the MySQL team and truly believe them
and the MySQL product to be in good hands under Oracle.
That said, here are my thoughts on my move and on the database
market as a whole (note the emphasis here is on use case vs
proprietary and open source):
10gen reminds me very much of MySQL AB prior to the Sun
acquisition.
I joined MySQL in 2005, a full 3 years before the Sun
acquisition. Back then, there was little distinction across the
titles and roles within the MySQL team. Basically, …
Back when the first version of the MariaDB Java Client was released, someone asked in the comments about the performance characteristics of the driver compared to ConnectorJ. I answered with hand-waving, saying that nobody does anything stupid, the performance of the drivers would be roughly the same, but I promised to measure it and tell the world one day. And now that day has come. The day where three MySQL JDBC drivers (ConnectorJ, MariaDB JDBC, and Drizzle JDBC) are compared against each other. Unlike the server, which gets benchmarking attention all the time, there is no standard benchmark for connectors, so I needed to improvise, while trying to keep the overhead of the server minimal. So I did something very primitive to start. I used my two favorite queries:
-
DO 1— this one does not retrieve a result set, and thus can be seen as a small “update”. -
SELECT 1— the minimal …
Mon, 2013-05-06 14:51 About the Author
Back when the first version of the MariaDB Java Client was released, someone asked in the comments about the performance characteristics of the driver compared to ConnectorJ. I answered with hand-waving, saying that nobody does anything stupid, the performance of the drivers would be roughly the same, but I promised to measure it and tell the world one day. And now that day has come. The day where three MySQL JDBC drivers (ConnectorJ, MariaDB JDBC, and Drizzle JDBC) are compared against each other. Unlike the server, which gets benchmarking attention all the time, there is no standard benchmark for connectors, so I needed to improvise, while trying to keep the overhead of the server minimal. So I did something very primitive to start. I used my two favorite queries:
-
DO 1-- this one does not retrieve a result set, and thus can be seen as a small "update". …
IntroductionMySQL replication slave features a powerful
capability of ignoring conflicts like duplicate key error, key
not found errors etc. while applying row events. This is
exceptionally useful while doing row based replication(RBR) from
the master when the slave already contains some data which may
conflict with the data coming from the master. In MySQL 5.7 we
extend this capability while applying row events from
mysql-binlog files using mysqlbinlog tool. This enhancement
will prevent such errors from aborting mysql client in case of
conflicts like the ones mentioned above.
RationalePrior to MySQL 5.7 we have been using the mysqlbinlog
tool as follows.
shell$> mysqlbinlog master.000001|mysql -uroot
-hexample.com -ps3cret
This allows us to pipe the output of mysqlbinlog to mysql, and
works as long as the row events from the mysqlbinlog do not
conflict with …
Whether you are a developer who wants to use MySQL and PHP to build and maintain websites or if you want to learn how MySQL and PHP can be used for the rapid prototyping and development of dynamic websites, the MySQL and PHP - Developing Dynamic Web Applications training course is for you.
This four day, live, instructor-led course is available as a:
- Live-virtual event: You can take this course from your desk -
no travel required. Choose from a selection of events already on
the schedule.
- In-class event: Travel to an education center to take this
course. Below is a selection of of the events already on the
schedule.
| Location | … |
In my previous post, I wrote about when data gets loaded in and out of cache. The goal of caching is to avoid having to perform disk IO, which if we are talking about hard drives, each operation is about 20 million times slower than CPUs or about 100 thousand times slower than memory.
So today I want to cover the subject of when are we required to do IO? But before I get there I first have to describe how IO works on all our modern operating systems.
An Introduction to Buffered IO
When you read or write to a file, by default you are speaking to a layer in between you and your disks called buffered IO. This layer is designed to increase performance and adds important features such as caching. Without going into this in detail, it’s important to note that:
-
When you …
dm-cache is (albeit still classified “experimental”) is in the just released Linux 3.9 kernel. It deals with generic block devices and uses the device mapper framework. While there have been a few other similar tools flying around, since this one has been adopted into the kernel it looks like this will be the one that you’ll be seeing the most in to the future. It saves sysadmins the hassle of compiling extra stuff for a system.
A typical use is for an SSD to cache a HDD. Similar to a battery backed RAID controller, the objective is to insulate the application from latency caused by the mechanical device, the most laggy part of which is seek time (measured in milliseconds). Giventhe relatively high storage capacity of an SSD (in the hundreds of GBs), this allows you to mostly disregard the mechanical latency for writes and that’s very useful for database systems such as MariaDB.
That covers writes (for the moment), but …
[Read more]This is the required post about things I observed during this years MySQL conference.
Things that are awesome:
- The tables in sessions. I think these were here last year. They are still awesome this year.
- The new style power plugs. They solved the problem of people tripping over daisy chained power strips and the strips being accidentally turned off.
- Massive quantities of coffee and real cream.
Things that can be improved:
- Lunch tickets. I overheard the same conversation a dozen times about people not being able to find their lunch tickets or not really knowing about them.
- Make badges reversible. A badge under observation will be facing the wrong way.
Things that just bumped me:
- The music is different this year. Now it makes me feel like a teenager struggling with a breakup.
- My secret clean bathroom has been …
MySQL Sandbox has been updated again. The latest version is 3.0.38, which was just released. There were four releases in the space of one week, and this last one is just a polished edition.
Cherry-picking from the Change log:
- Added option
--bind_addressto complement the effects of--remote_access; - The script 'enable_gtid' (for MySQL 5.6 +) now is durable. Previously the changes did not survive a restart.
- Now you can install MariaDB with its bizarre version '10.0'
- It also works well with MySQL 5.7. A bug prevented the creation of 'enable_gtid', but it …
In my ongoing quest to completely understand InnoDB’s data storage, I came across a quite small and inconsequential waste, which is nevertheless fun to write about. I noticed the following block of pages which were allocated very early in the ibdata1 system tablespace but apparently unused (unnecessary lines removed from output):
$ innodb_space -f ibdata1 space-page-type-regions start end count type 13 44 32 ALLOCATED
Background on the doublewrite buffer
Most people using InnoDB have heard of the “doublewrite buffer”—part of InnoDB’s page flushing strategy. The doublewrite buffer is used as a “scratch area” to write (by default) 128 pages contiguously before flushing them out to their final destinations (which may be up to 128 different writes). The MySQL …
[Read more]