【问题标题】:Mariadb 2 explains plan : with Using join buffer and withoutMariadb 2 解释计划:使用连接缓冲区和不使用连接缓冲区
【发布时间】:2018-07-17 14:02:00
【问题描述】:

我在 2 个具有巨大性能差异的环境中运行相同的查询:0.015 秒与 25 秒。

解释计划:

+------+-------------+---------------+--------+------------------------------------+---------+---------+---------------------------------------------------------------------------------------------------------------------------+------+----------+---------------------------------+
| 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                     |
+------+-------------+---------------+--------+------------------------------------+---------+---------+---------------------------------------------------------------------------------------------------------------------------+------+----------+---------------------------------+

下一个解释计划:

+------+-------------+---------------+--------+------------------------------------+---------+---------+---------------------------------------------------------------------------------------------------------------------------------------+------+----------+-------------------------------------------------+
| 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                                     |
+------+-------------+---------------+--------+------------------------------------+---------+---------+---------------------------------------------------------------------------------------------------------------------------------------+------+----------+-------------------------------------------------+

如何强制使用连接缓冲区(平面,BNL 连接)第一个环境是生产环境,具有更多内存和 CPU。

在第一个环境中:

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

在第二种环境中:

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

join_buffer_size 和 join_buffer_space_limit 之间是否有任何联系/比率? 我们在 join_buffer_size 上配置 16Mo,因为它是一个 mysqlTuner 提示。

【问题讨论】:

  • 有什么理由不在listvalue4_上添加索引吗?
  • 是的,它是一个 5000 行的小表,我尝试对其进行索引,但它并没有提高性能。
  • 我们可以看到查询和SHOW CREATE TABLEs吗?
  • 您的问题似乎是一个很好的例子,说明为什么“加入缓冲区”可以具有出色的性能优势。

标签: performance mariadb explain


【解决方案1】:

我将 join_buffer_space_limit 设置为 128Mo,它解决了性能问题。 所以 mysqlTuner 没有给出这个配置键的提示。

SET GLOBAL join_buffer_space_limit = 1024 * 1024 * 128; 

提高性能需要时间(小时)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-13
    • 2010-09-14
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    相关资源
    最近更新 更多