[MDEV-16511] Server tries to create and use GROUP BY handler where it doesn't Created: 2018-06-18  Updated: 2018-06-21  Resolved: 2018-06-21

Status: Closed
Project: MariaDB Server
Component/s: Optimizer
Affects Version/s: 10.2.15
Fix Version/s: 10.2.15

Type: Bug Priority: Minor
Reporter: Roman Assignee: Igor Babaev
Resolution: Not a Bug Votes: 0
Labels: None

Issue Links:
PartOf
is part of MCOL-1456 Query doesn't try REDO_PHASE1 Closed

 Description   

Greetings,

Here is the query that caused the server to use GROUP BY handler despite the mentioned handler type isn't used according to an execution plan:

SELECT SUM(L_EXTENDEDPRICE * (1 - L_DISCOUNT)) AS REVENUE FROM LINEITEM, PART WHERE ( P_PARTKEY = L_PARTKEY AND P_BRAND = 'Brand#41' AND P_CONTAINER IN ( 'SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') AND L_QUANTITY >= 3 AND L_QUANTITY <= 3 + 1 AND P_SIZE BETWEEN 1 AND 5 AND L_SHIPMODE IN ('AIR', 'AIR REG') AND L_SHIPINSTRUCT = 'DELIVER IN PERSON' ) OR ( P_PARTKEY = L_PARTKEY AND P_BRAND = 'Brand#33' AND P_CONTAINER IN ( 'MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') AND L_QUANTITY >= 14 AND L_QUANTITY <= 14 + 1 AND P_SIZE BETWEEN 1 AND 10 AND L_SHIPMODE IN ('AIR', 'AIR REG') AND L_SHIPINSTRUCT = 'DELIVER IN PERSON' ) OR ( P_PARTKEY = L_PARTKEY AND P_BRAND = 'Brand#45' AND P_CONTAINER IN ( 'LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') AND L_QUANTITY >= 25 AND L_QUANTITY <= 25 + 1 AND P_SIZE BETWEEN 1 AND 15 AND L_SHIPMODE IN ('AIR', 'AIR REG') AND L_SHIPINSTRUCT = 'DELIVER IN PERSON' );

Here is the execution plan:

MariaDB [tpch1c]> explain extended SELECT SUM(L_EXTENDEDPRICE * (1 - L_DISCOUNT)) AS REVENUE FROM LINEITEM, PART WHERE ( P_PARTKEY = L_PARTKEY AND P_BRAND = 'Brand#41' AND P_CONTAINER IN ( 'SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') AND L_QUANTITY >= 3 AND L_QUANTITY <= 3 + 1 AND P_SIZE BETWEEN 1 AND 5 AND L_SHIPMODE IN ('AIR', 'AIR REG') AND L_SHIPINSTRUCT = 'DELIVER IN PERSON' ) OR ( P_PARTKEY = L_PARTKEY AND P_BRAND = 'Brand#33' AND P_CONTAINER IN ( 'MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') AND L_QUANTITY >= 14 AND L_QUANTITY <= 14 + 1 AND P_SIZE BETWEEN 1 AND 10 AND L_SHIPMODE IN ('AIR', 'AIR REG') AND L_SHIPINSTRUCT = 'DELIVER IN PERSON' ) OR ( P_PARTKEY = L_PARTKEY AND P_BRAND = 'Brand#45' AND P_CONTAINER IN ( 'LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') AND L_QUANTITY >= 25 AND L_QUANTITY <= 25 + 1 AND P_SIZE BETWEEN 1 AND 15 AND L_SHIPMODE IN ('AIR', 'AIR REG') AND L_SHIPINSTRUCT = 'DELIVER IN PERSON' );
+------+-------------+----------+------+---------------+------+---------+------+------+----------+-----------------------------------------------------------------------+
| id   | select_type | table    | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                                                                 |
+------+-------------+----------+------+---------------+------+---------+------+------+----------+-----------------------------------------------------------------------+
|    1 | SIMPLE      | LINEITEM | ALL  | NULL          | NULL | NULL    | NULL | 2000 |   100.00 | Using where with pushed condition                                     |
|    1 | SIMPLE      | PART     | ALL  | NULL          | NULL | NULL    | NULL | 2000 |   100.00 | Using where with pushed condition; Using join buffer (flat, BNL join) |
+------+-------------+----------+------+---------------+------+---------+------+------+----------+-----------------------------------------------------------------------+
2 rows in set, 2 warnings (0.90 sec)

The issue could be reproduced only with server/columnstore engine built of:

develop branch columnstore fork of the server's code
develop branch columnstore engine



 Comments   
Comment by Igor Babaev [ 2018-06-21 ]

Roman,
I really don't understand what you are complaining of.
What exactly is wrong with the EXPLAIN output?

Regards,
Igor.

Comment by Roman [ 2018-06-21 ]

Thanks for looking into the issue, it should be closed, since I found a workaround for the issue at the engine side.
The engine doesn't support particular JOIN types ATM, so we have to use server side JOIN for the purpose.
From my perspective the server had produced the mentioned plan and later used GROUP BY handler anyway. That was a misunderstanding.

Comment by Roman [ 2018-06-21 ]

Additional investigation shows that this is not a server bug.

Generated at Thu Feb 08 08:29:27 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.