Search code examples
performancemariadbexplain

Mariadb 2 explains plan : with Using join buffer and without


I run same query in 2 environnements with huge performance différence : 0.015 sec vs 25sec.

Exlain plan :

+------+-------------+---------------+--------+------------------------------------+---------+---------+---------------------------------------------------------------------------------------------------------------------------+------+----------+---------------------------------+
| id   | select_type | table         | type   | possible_keys                      | key     | key_len | ref                                                                                                                       | rows | filtered | Extra                           |
+------+-------------+---------------+--------+------------------------------------+---------+---------+---------------------------------------------------------------------------------------------------------------------------+------+----------+---------------------------------+
|    1 | SIMPLE      | company1_     | const  | PRIMARY                            | PRIMARY | 152     | const                                                                                                                     |    1 |   100.00 | Using temporary; Using filesort |
|    1 | SIMPLE      | user2_        | ref    | PRIMARY                            | PRIMARY | 152     | const                                                                                                                     | 1032 |   100.00 | Using where                     |
|    1 | SIMPLE      | vacationpr5_  | eq_ref | PRIMARY                            | PRIMARY | 304     | user2_.ID_COMPANY_VACATION_PROFILE,.user2_.ID_VACATION_PROFILE                                                            |    1 |   100.00 | Using index                     |
|    1 | SIMPLE      | vacationac0_  | ref    | PRIMARY,I_VACATION_ACCUMULATION_EA | PRIMARY | 304     | const,.user2_.ID_USER                                                                                                     |    4 |   100.00 | Using where                     |
|    1 | SIMPLE      | vacationty3_  | eq_ref | PRIMARY                            | PRIMARY | 304     | const,.vacationac0_.ID_VACATION_TYPE                                                                                      |    1 |   100.00 | Using where                     |
|    1 | SIMPLE      | vacationst6_  | eq_ref | PRIMARY                            | PRIMARY | 608     | user2_.ID_COMPANY_VACATION_PROFILE,.user2_.ID_VACATION_PROFILE,const,.vacationac0_.ID_VACATION_TYPE                       |    1 |   100.00 | Using where                     |
|    1 | SIMPLE      | translatio9_  | eq_ref | PRIMARY                            | PRIMARY | 919     | vacationty3_.ID_COMPANY_TRANSLATION,.vacationty3_.ID_TRANSLATION                                                          |    1 |   100.00 | Using index                     |
|    1 | SIMPLE      | descriptio10_ | eq_ref | PRIMARY,                           | PRIMARY | 951     | vacationty3_.ID_COMPANY_TRANSLATION,.vacationty3_.ID_TRANSLATION,const                                                    |    1 |   100.00 | Using where                     |
|    1 | SIMPLE      | listvalue4_   | ALL    | NULL                               | NULL    | NULL    | NULL                                                                                                                      | 5284 |   100.00 | Using where                     |
|    1 | SIMPLE      | translatio7_  | eq_ref | PRIMARY                            | PRIMARY | 919     | listvalue4_.ID_COMPANY_TRANSLATION,.listvalue4_.ID_TRANSLATION                                                            |    1 |   100.00 | Using index                     |
|    1 | SIMPLE      | descriptio8_  | eq_ref | PRIMARY                            | PRIMARY | 951     | listvalue4_.ID_COMPANY_TRANSLATION,.listvalue4_.ID_TRANSLATION,const                                                      |    1 |   100.00 | Using where                     |
+------+-------------+---------------+--------+------------------------------------+---------+---------+---------------------------------------------------------------------------------------------------------------------------+------+----------+---------------------------------+

next explain plan :

+------+-------------+---------------+--------+------------------------------------+---------+---------+---------------------------------------------------------------------------------------------------------------------------------------+------+----------+-------------------------------------------------+
| id   | select_type | table         | type   | possible_keys                      | key     | key_len | ref                                                                                                                                   | rows | filtered | Extra                                           |
+------+-------------+---------------+--------+------------------------------------+---------+---------+---------------------------------------------------------------------------------------------------------------------------------------+------+----------+-------------------------------------------------+
|    1 | SIMPLE      | company1_     | const  | PRIMARY                            | PRIMARY | 152     | const                                                                                                                                 |    1 |   100.00 | Using temporary; Using filesort                 |
|    1 | SIMPLE      | user2_        | ref    | PRIMARY,                           | PRIMARY | 152     | const                                                                                                                                 | 1050 |   100.00 | Using where                                     |
|    1 | SIMPLE      | vacationpr5_  | eq_ref | PRIMARY                            | PRIMARY | 304     | validation2.user2_.ID_COMPANY_VACATION_PROFILE,validation2.user2_.ID_VACATION_PROFILE                                                 |    1 |   100.00 | Using index                                     |
|    1 | SIMPLE      | vacationac0_  | ref    | PRIMARY,I_VACATION_ACCUMULATION_EA | PRIMARY | 304     | const,validation2.user2_.ID_USER                                                                                                      |    5 |   100.00 | Using where                                     |
|    1 | SIMPLE      | vacationty3_  | eq_ref | PRIMARY                            | PRIMARY | 304     | const,validation2.vacationac0_.ID_VACATION_TYPE                                                                                       |    1 |   100.00 | Using where                                     |
|    1 | SIMPLE      | vacationst6_  | eq_ref | PRIMARY                            | PRIMARY | 608     | validation2.user2_.ID_COMPANY_VACATION_PROFILE,validation2.user2_.ID_VACATION_PROFILE,const,validation2.vacationac0_.ID_VACATION_TYPE |    1 |   100.00 | Using where                                     |
|    1 | SIMPLE      | translatio9_  | eq_ref | PRIMARY                            | PRIMARY | 919     | validation2.vacationty3_.ID_COMPANY_TRANSLATION,validation2.vacationty3_.ID_TRANSLATION                                               |    1 |   100.00 | Using index                                     |
|    1 | SIMPLE      | descriptio10_ | eq_ref | PRIMARY,                           | PRIMARY | 951     | validation2.vacationty3_.ID_COMPANY_TRANSLATION,validation2.vacationty3_.ID_TRANSLATION,const                                         |    1 |   100.00 | Using where                                     |
|    1 | SIMPLE      | listvalue4_   | ALL    | NULL                               | NULL    | NULL    | NULL                                                                                                                                  | 5282 |   100.00 | Using where; Using join buffer (flat, BNL join) |
|    1 | SIMPLE      | translatio7_  | eq_ref | PRIMARY                            | PRIMARY | 919     | validation2.listvalue4_.ID_COMPANY_TRANSLATION,validation2.listvalue4_.ID_TRANSLATION                                                 |    1 |   100.00 | Using index                                     |
|    1 | SIMPLE      | descriptio8_  | eq_ref | PRIMARY,                           | PRIMARY | 951     | validation2.listvalue4_.ID_COMPANY_TRANSLATION,validation2.listvalue4_.ID_TRANSLATION,const                                           |    1 |   100.00 | Using where                                     |
+------+-------------+---------------+--------+------------------------------------+---------+---------+---------------------------------------------------------------------------------------------------------------------------------------+------+----------+-------------------------------------------------+

How I can force to use join buffer (flat, BNL join) the first environment is the production one and has more memory and CPU.

In first environment :

join_buffer_size............ 16777216
join_buffer_space_limit..... 2097152

In second environment :

join_buffer_size............ 262144
join_buffer_space_limit..... 2097152

Is there any link/ratio between join_buffer_size and join_buffer_space_limit? We configure 16Mo on join_buffer_size because it is a mysqlTuner hint.


Solution

  • I set join_buffer_space_limit at 128Mo and it resolves performance issue. So mysqlTuner doesn't give hint for this configuration key.

    SET GLOBAL join_buffer_space_limit = 1024 * 1024 * 128; 
    

    It takes time (hour) to improve performances.

    https://mariadb.com/kb/en/library/multi-range-read-optimization/