MySQL partitioning makes data distribution of individual tables (typically we recommend partition for large & complex I/O table for performance, scalability and manageability) across multiple files based on partition strategy / rules. In very simple terms, different portions of table are stored as separate tables in different location to distribute I/O optimally. The user defined division of data by some rule is known as partition function, In MySQL we partition data by RANGE of values / LIST of values / internal hashing function / linear hashing function. By restricting the query examination on the selected partitions by matching rows increases the query performance by multiple times compared to the same query on a non partitioned table, This methodology is also called partition pruning (trimming of unwanted partitions), Please find below example of partition pruning:
…[Read more]There are cases where we need to implement MySQL partitioning, or at least test if it is an option to solve an issue. However, how are we able to test it when the table on our production environment has hundreds of millions of rows, several composite indexes and/or the size on disk is hundreds of gigabytes?
Testing environments usually don’t have all the data that production has and if they have, probably you are not testing all the use-cases at a database level. Therefore, is it possible to test MySQL Partitioning on production impacting as less as possible?
When we execute pt-online-schema-change, it creates a table, triggers, and then copies the data. As we are going to test partitioning we are going to need both tables – with and without partitioning – and we are going to use triggers to keep both tables consistent. A good thing about changing a table to use partitioning is that, usually, …
[Read more]In MySQL, partitioning is a way to separate the data in one table into smaller “sub-tables” for better query performance and data management.
For example, let’s say that you have a database containing numerous accounting transactions. You could just store all of these transactions in one table, but you only need to keep seven year’s worth of data for tax purposes. Instead of placing all of the data in one table, and then deleting the old data from that table, you could split the table into partitions with each partition representing one year’s worth of data.
Then, after seven years, you could delete/drop the old partition. Partitions are flexible, as you can add, drop, redefine, merge, or split existing partitions (there are other options on what you could do with this data as well). Also, if you have a table that is going to contain a lot of rows, partitioning your data would …
[Read more]
I have worked as an architect in the MySQL/NDB world for more
than 20 years and I am still working at Oracle and I like it
here. Given all the FUD spread about MySQL I thought it might be
a good idea to spread the word about all the great things we're
doing to MySQL at Oracle.
#1 We are working on improving modularity in MySQL code
base
In the early days of MySQL the MySQL development had serious
issues with its development model. It was a model designed for a
small code base. I used to work at Ericsson which is developing
telecom switches that have systems with tens of millions lines of
code. Such large systems require modularity. The Ericsson
switches was developed with modularity built into the programming
language already since the 70's. Even with this modularity a
second level of modularity was required. The learnings from this
reengineering project that span over more than a decade has given
me valuable insights …
Giuseppe Maxia’s new article at the MySQL DevZone rightly points out that using partitions doesn’t work by magic; as with any other enhancement, it requires a bit of know-how to realise its value. MySQL 5.1 Partitions in Practice reviews some of the basics and points out a few gotchas (if you want to partition on a DATE or DATETIME column, pay close attention here). He then provides some realistic examples showing how you actually get partition pruning working for your queries and backs it up with some interesting performance figures.
On a related note, I recently reorganised the MySQL Manual’s discussion of functions in …
[Read more]We’ve been getting lots of questions about how MySQL 5.1 optimises queries on partitioned tables. Recently, we added some new information about this to our Internals Manual provided by one of our developers, Sergey Petrunia. (I hope that my edits and formatting haven’t messed up anything — if there are any problems with what’s been published in the Internals Manual, then the fault’s probably mine and not his.)
The new section can be accessed here, and includes coverage of the following topics:
- An overview of how MySQL performs partition pruning
- What partitioning and subpartitioning intervals are, and why they’re important
- Converting
WHERE
andON
clauses into intervals - Partition selection
- Where to find partition pruning and selection code in …
I recently discovered that I’d made a huge blunder in the Partitioning Limitations section of the MySQL 5.1 Manual. I’d had the idea that unique keys don’t effect your choice of partitioning columns unless there’s no primary key.
My latest revision of the documentation for this limitation isn’t much better.
Then, as I was sitting here just now trying to persuade my daughter that she really ought to have something for lunch besides marshmallows, it came to me.
It’s very simple, really.
For any user-partitioned table in MySQL 5.1:
- If a table has any unique keys, then all columns used in the partitioning expression must also be part of any and all of these keys.
- By definition, a primary key is a unique key.
- If the table has no unique keys, then you don’t have to worry …
The article that Peter Gulutzan and I wrote a couple of weeks ago is now online:
MySQL 5.1 New Features: MySQL Partitions
Here’s a brief outline:
- A Grammar Description That’s Expressed Differently From The
Manual
- Partitioning Types
- Creating Partitioned Tables
- Partitioning Keys, Primary Keys, and Unique Keys
- Altering Partitioning Tables
- Performance Considerations
- Advantages of Partitioning
- Partition Pruning
- Maintenance of Big Tables
- Doing It With Dates And Times
- Some Simple Speed Tests
- Comparison With Other Database Systems
- Examples:
- Creating a Table With …
Someone at work pointed out to me this blog post about what to do when disk partitions housing MySQL databases fill up, with the caption, “An idea for [the MySQL 5.1 Partitioning] Docs?”
My reply was, “Nope”.
Well, I was wrong. In a way. This guy’s talking about disk partititions, not partitioned tables. And using symlinks to point to data or database directories is not particularly new or exciting. However, partitioning in MySQL 5.1 provides a kind of cool new way to move table data and index files pretty easily.
The DATA DIRECTORY
and INDEX DIRECTORY
options have been around for CREATE TABLE
for quite
some time, but they’re not supported for ALTER TABLE
- if you try, this is what happens:
mysql> …[Read more]