Hi Bar,

The purpose of this bit arithmetics (one could say CPU athletics) is to
reduce the size of the InnoDB data dictionary cache. If we look at dtype_t
and dict_col_t, these are not exactly at any byte boundary at the moment
(61 and 84 bits, respectively).

I would simply replace the mbminmaxlen field with two 3-bit fields
mbminlen, mbmaxlen. This would use up one more bit and would be faster to
extract (no multiplication or division, just simple bit-shifting and
masking). Also the code would be simpler, because a number of macros would
be removed. I think that a similar patch was done in MySQL, but apparently
it was never merged to the main trees.

Marko

On Thu, May 4, 2017 at 1:34 PM, Alexander Barkov <[email protected]> wrote:

> Hello Marko,
>
> InnoDB uses 5 bits to store the combination of mbminlen and mbmaxlen,
> and its calculated as:
>
>    mbmaxlen * 5 + mbminlen
>
>
> Note, combinations with mbminlen=0 and mbmaxlen=0 are not possible.
> Also, combinations with mbminlen>mbmaxlen are not possible.
>
>
> This is a summary:
>
>          mbminlen
> mbmaxlen 0    1    2    3     4
> 0       (0)  (1)  (2)  (3)   (4)
> 1       (5)   6   (7)  (8)   (9)
> 2       (10) 11   12   (13)  (14)
> 3       (15) 16   17   18    (19)
> 4       (20) 21   22   23    24
>
>
> I marked impossible numbers with parentheses.
>
> In the range 0..24:
> - 10 pairs are valid
> - 15 pairs are not valid
>
> It should be safe to use any impossible number to mean
> mbmaxlen=5 & mbminlen=1
>
> It seems there is no really a need to extend the header to use
> separate 3 bits for both mbminlen and mbmaxlen.
>
>


-- 
Marko Mäkelä, Lead Developer InnoDB
MariaDB Corporation
_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~maria-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to