maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #05203
Re: implementing multi range read at the storage engine in MariaDB 5.5
Hi Zardosht,
On Fri, Feb 15, 2013 at 06:00:52PM -0500, Zardosht Kasheff wrote:
> On implementing this. Looking at MariaDB-5.5.28a, I see MyISAM,
> InnoDB, and Aria all have the code below in their engine.
>
> Is that all that is required? Do we need to copy and paste that code
> into our engine?
Generally, the answer depends on how you intend to implement MRR. As a
counter-example, NDB storage engine has its own MRR implementation that shares
no code with the Dsik-Sweep implementation of MRR that MyISAM/InnoDB/Aria are
using (careful: NDB code in MariaDB is not maintained and is likely very out of
date).
I don't know how MRR should be implemented for TokuDB (my exposure to TokuDB
has been limited to watching videos/slides). I guess, DS-MRR could be used as
a first approach. But perhaps, a more advanced, specialized MRR implementation
is posisble.
> In fact, the only difference I see is that INnoDB
> has:
> if (prebuilt->select_lock_type != LOCK_NONE)
> *flags |= HA_MRR_USE_DEFAULT_IMPL;
> in multi_range_read_info_const.
>
In case you decide to use DS-MRR: there are also ds_mrr.dsmrr_close() calls in
several places. Your engine needs to make them, too.
It is also a good idea to set stats.mrr_length_per_rec, just like the other
engines doo.
> Thanks
> -Zardosht
>
> The code:
>
> int ha_maria::multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param,
> uint n_ranges, uint mode,
> HANDLER_BUFFER *buf)
> {
> return ds_mrr.dsmrr_init(this, seq, seq_init_param, n_ranges, mode, buf);
> }
>
> int ha_maria::multi_range_read_next(range_id_t *range_info)
> {
> return ds_mrr.dsmrr_next(range_info);
> }
>
> ha_rows ha_maria::multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq,
> void *seq_init_param,
> uint n_ranges, uint *bufsz,
> uint *flags, COST_VECT *cost)
> {
> /*
> This call is here because there is no location where this->table would
> already be known.
> TODO: consider moving it into some per-query initialization call.
> */
> ds_mrr.init(this, table);
> return ds_mrr.dsmrr_info_const(keyno, seq, seq_init_param, n_ranges, bufsz,
> flags, cost);
> }
>
> ha_rows ha_maria::multi_range_read_info(uint keyno, uint n_ranges, uint keys,
> uint key_parts, uint *bufsz,
> uint *flags, COST_VECT *cost)
> {
> ds_mrr.init(this, table);
> return ds_mrr.dsmrr_info(keyno, n_ranges, keys, key_parts, bufsz,
> flags, cost);
> }
>
> int ha_maria::multi_range_read_explain_info(uint mrr_mode, char *str,
> size_t size)
> {
> return ds_mrr.dsmrr_explain_info(mrr_mode, str, size);
> }
>
> On Fri, Feb 15, 2013 at 5:17 PM, Igor Babaev <igor@xxxxxxxxxxxx> wrote:
> > On 02/15/2013 04:17 AM, Zardosht Kasheff wrote:
> >> Hello all,
> >>
> >> Is there anything to implementing multi range read for storage
> >> engines? Or is there a default implementation that is likely good
> >> enough.
> >>
> >> Also, is there anything one can read to understand how the feature
> >> works and its benefits?
> >>
> >> Thanks
> >> -Zardosht
> >
> > Hi Zardosht,
> >
> > I googled "MySQL Multi Range Read" and got
> > among other references:
> >
> > 1. https://kb.askmonty.org/en/multi-range-read-optimization/
> >
> > 2. http://dev.mysql.com/doc/refman/5.6/en/mrr-optimization.html
> >
> > The first article was written by Sergey Petrunia, the guy who wrote
> > disk-sweep MRR.
> > I find it the most comprehensive.
> >
> > The second article was written also by him but when he worked at Sun.
> > Later this article was slightly changed by MySQL/Oracle people.
> >
> > Regards,
> > Igor.
> >
> >>
> >> _______________________________________________
> >> Mailing list: https://launchpad.net/~maria-developers
> >> Post to : maria-developers@xxxxxxxxxxxxxxxxxxx
> >> Unsubscribe : https://launchpad.net/~maria-developers
> >> More help : https://help.launchpad.net/ListHelp
> >
>
> _______________________________________________
> Mailing list: https://launchpad.net/~maria-developers
> Post to : maria-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~maria-developers
> More help : https://help.launchpad.net/ListHelp
--
BR
Sergei
--
Sergei Petrunia, Software Developer
Monty Program AB, http://askmonty.org
Blog: http://s.petrunia.net/blog
References