Sergey Glukhov (Gluh) recently wrote an interesting blog about
InnoDB secondary key improvements in MySQL 5.6. His blog isn't
aggregated to planet.mysql.com but certainly deserves some
attention.
Here it is: InnoDB, extended secondary keys.
There are so many exciting new features in MySQL 5.6 that I almost don't know where to start. To mention a few, MySQL's multi-core scalability has been significantly improved to meet modern hardware, InnoDB has better index statistics, much better performance, and online ALTER, replication has multi-threaded slaves and …
[Read more]
While the index merge access types certainly are useful
for a number of queries, there has been some frustration
expressed both from customers and the community about how
it...
- is not used when it should have been
- is used when ref access is obviously better
- merges suboptimal indexes
- is too restricted in which conditions can be used
I could come up with numerous examples of related bugs and feature requests dating back more than six years. To list a few: 17673, 30151, 23322, 65274, …
[Read more]
A few customers with rather extreme needs have contacted us about
a performance issue with the range optimizer. Our solution to the
problem is to introduce a new variable in MySQL 5.6,
eq_range_index_dive_limit, which can be used to control whether
or not the range optimizer will a) do index dives, or b) use
index statistics when estimating the number of rows in the ranges
of the query. The former method gives a far more accurate
estimate while the latter costs a lot less to compute.
This is what the help text has to tell about the variable:
The optimizer will use existing index statistics instead of doing
index dives for equality ranges if the number of equality ranges
for the index is larger than or equal to [the value of variable].
If set to 0, index dives are always used."Equality range" means
predicates using operators IN() or =, and it's important to
notice that the number of such ranges is counted on a per index …
A while ago, I explained how range access in a multiple-part
index works and why MySQL can't utilize key parts beyond the
first occurrence of some often used comparison operators.
Luckily, there is a great improvement underway in MySQL 5.6 that
will remedy much of this limitation. Meet Index Condition
Pushdown.
How does ICP work?
Index Condition Pushdown is a new way for MySQL to evaluate
conditions. Instead of evaluating conditions on rows read from a
table, ICP makes it possible to evaluate conditions in the index
and thereby avoid looking at the table if the condition is
false.
Let's assume that we have a multiple-part index covering columns
(keypart_1, ..., keypart_n). Further assume that we have a
condition with a comparison operator on keypart_1 that does not
allow …
In this blog post, my colleague Jørgen Løland
described a new feature of MySQL 5.6: Optimizer Tracing. I
recommend reading his article, as it presents this new feature in
a simple, easy-to-read manner.
The Optimizer Tracing feature can help understanding what the
Optimizer is doing; it is available since milestone 5.6.3,
announced October 3rd at Oracle Open World (here is the changelog). It's good to see it mature now; I
remember that Sergey Petrunia did the first prototype back in
March 2009!
Today I will be giving some must-have tips related to
handling big traces.
First thing to know, a trace lives in main memory (internally it
is allocated on the heap or free store of …
Understanding why MySQL chooses a particular join order or why
table scan is chosen instead of range scan is often very hard
even for experienced MySQL users. Two almost identical queries,
differing only in constant values, may produce completely
different plans. That's why we're introducing a great new feature
in 5.6: Optimizer Tracing. The target users of
this feature are developers and MySQL users experienced enough to
understand the ins and outs of EXPLAIN.
What Optimizer Tracing is
You may already have guessed this, but optimizer tracing is a
printout of important decisions the MySQL optimizer has
done during the process of making the Query Execution Plan.
The trace is presented in JSON format which is easy to read both
for humans and others.
Currently, the optimizer trace includes …
Larry Ellison is announcing a major new feature this Wednesday at Open World. For the first time in a while, his keynote is dedicated to the “database” as opposed to the usual high level ERP/Apps/Fusion. Even the title of his keynote is catchy — “Extreme Performance”.
Oracle has been keeping the new feature a secret. Even the 11gR2 beta program had very few participants to prevent information leaking out. It’s, “Something’s coming, but I am not telling what.”
Okay, it worked on me, I’m excited about it. Let’s think what it could be. What single database feature is so major, that Larry himself will announce it during OpenWorld?
What do we …
[Read more]