When I developed partitioning for MySQL the main goal was
to make it easier for MySQL users to manage large tables
by enabling them to easily add and drop partitions.
It turns out that partitioning can also be used as a manner
to make MySQL more scalable. The reason is that in some
cases the storage engine have internal locks per table or
per index (one such example is the btr_search_latch in
InnoDB).
So in this case adding a
PARTITION BY KEY (key_part)
PARTITIONS 4
to the table definition makes a very hot table into 4
tables
from the storage engine point of view.
This would mostly be beneficial in cases where the main
operation is primary key lookups on the table. Dividing the
indexes in cases of scans can be both positive and
negative.
So this solution is definitely not a winner for all
situations.
I haven't tried this out yet myself in my benchmark suites,
but I plan to make some experiments in this area. It is
usable
in sysbench, it's possible to use for DBT2 (have used
partitioning
for DBT2 in MySQL Cluster benchmarks a lot already) and
it's
possible to use in Dimitri's dbStress benchmark.
Nov
20
2009