[MDEV-6239] Partition pruning is not working as expected in an inner query Created: 2014-05-14 Updated: 2014-06-16 Resolved: 2014-05-29 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | None |
| Affects Version/s: | 5.5.37, 10.0.11 |
| Fix Version/s: | 5.5.38, 10.0.12 |
| Type: | Bug | Priority: | Major |
| Reporter: | Sivaram Dandibhotla | Assignee: | Sergei Petrunia |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Environment: |
Linux, MariaDB |
||
| Attachments: |
|
||||||||
| Issue Links: |
|
||||||||
| Description |
|
We noticed an issue with the partition pruning on Maria DB with Toku DB engine. Partition pruning doesn’t seem to work as expected for an inner query, this is illustrated with a simple example below. Let us consider two tables employee and dept with company_id being the column on which partition is defined. When we try to fetch the list of departments for a given company_id in an inner query then all the partitions are being accessed instead of narrowing down to the partition specified in the criteria. When we run the same query as an outer query it is working fine, it is working fine on MySQL 5.6.16. Please let us know if this is a defect. DDL and DML statements are attached in "Partition Pruning issue data setup.sql". This file also has an explain plan for a simple select statement. Please note that for the inner query all 3 partitions are being listed. Explain plan is attached in "Explain Plan for the query.csv". We are running into this issue with our complex queries, the one listed here is just for explaining the problem. This issue is causing a huge performance problems for our system and right now it is a blocker for us to pursue MaraDB further. Thanks for your time, please let us know if you need any more details. Updated the ticket with the "Explain Plan for query in MySQL5.6.16.csv". Please note that in MySQL inner query access only the relevant partition. |
| Comments |
| Comment by Elena Stepanova [ 2014-05-16 ] | |||||||||||||||
|
Hi, Could you please try to set Thanks. | |||||||||||||||
| Comment by Sivaram Dandibhotla [ 2014-05-22 ] | |||||||||||||||
|
Hi Elena, Thanks for your quick response. We tried the optimizer switch you mentioned, it seemed to work as expected. But we noticed a performance issue on MariaDB with TokuDB storage engine when compared against MySQL on MyISAM storage engine. In our query we have two tables in the outer query joining with a tuple condition with the inner query which is fetching data only from one table. Tables in outer query has very less data, 15 rows and 75 rows respectively. Inner table is quite big, it has 800K records. Find below the response time on different configurations. MySQL with MyISAM storage engine - response time is ~1 second. We are running into table level lock issues with MyISAM and hence would like to use MariaDB with TokuDB storage engine. Note that this is a single user test and we are yet to verify this on heavy load. Can you please comment on the performance degradation when the optimizer switch is turned off. Though we are seeing better performance when the optimizer switch is on we are concerned with it scanning across all partitions. Regards, | |||||||||||||||
| Comment by Elena Stepanova [ 2014-05-23 ] | |||||||||||||||
|
Hi Siva, Could you please do the following on each of MySQL with MyISAM, MariaDB with MyISAM optimizer switch ON, MariaDB with MyISAM optimizer_switch OFF instances, and paste the output (you can skip the result set of the SELECT query itself).
Thanks. | |||||||||||||||
| Comment by Sivaram Dandibhotla [ 2014-05-23 ] | |||||||||||||||
|
Captured the extended plan and the status variables after query execution. | |||||||||||||||
| Comment by Sivaram Dandibhotla [ 2014-05-23 ] | |||||||||||||||
|
Hi Elena, Please find attached "Extended Plan.rar" which has the extended plan and the status variables after query execution. Along with the configurations that you have asked for stats for Toku DB is also captured. Let me know if you need any further details. Regards, Siva | |||||||||||||||
| Comment by Elena Stepanova [ 2014-05-23 ] | |||||||||||||||
|
This is the issue we briefly discussed earlier. The problem seems to be twofold: 1) Partition pruning: with semijoin=on, partition pruning does not work as expected. It can be reproduced by running Partition Pruning issue data setup.sql from attachments. 2) Performance of the actual query:
| |||||||||||||||
| Comment by Sergei Petrunia [ 2014-05-28 ] | |||||||||||||||
|
== Investigation == I am debugging this query (the tables are InnoDB):
MariaDB 5.5 shows
MySQL 5.6 shows
table dept has this condition inside the subquery: COMPANY_ID=1000. Apparently mysql 5.6 was able to use it for partition pruning, while mariadb 5.5 was not. This should not affect the speed of this particular query (except for table opening). This is because table dept is accessed through eq_ref access through
Every time the executor is about to make an index lookup, it knows a specific value of company_id, and so it will access only one partition. This is called "partition selection" internally. It is not visible in EXPLAIN but it works. However, lack of partition pruning can cause problems in other kinds of queries, and also it will affect query optimization. | |||||||||||||||
| Comment by Sergei Petrunia [ 2014-05-28 ] | |||||||||||||||
|
Debugging... === MariaDB 5.5 ===
leaf_tables includes table `dept`, but dept has tbl->embedding!=NULL, so == MySQL 5.6 == But, 5.6 also has "partition lock pruning", which is called from JOIN::prepare, | |||||||||||||||
| Comment by Sergei Petrunia [ 2014-05-29 ] | |||||||||||||||
|
The fix for the partition pruning problem has been pushed into the 5.5 tree. | |||||||||||||||
| Comment by Sergei Petrunia [ 2014-05-29 ] | |||||||||||||||
|
As for possible semi-join optimization problems, lets discuss those in another MDEV. I've created | |||||||||||||||
| Comment by Sergei Petrunia [ 2014-05-29 ] | |||||||||||||||
|
Closing this issue (since there was a specific problem in partition pruning which was fixed and pushed). If that's not the only issue, let's discuss in | |||||||||||||||
| Comment by Sivaram Dandibhotla [ 2014-06-16 ] | |||||||||||||||
|
Can you please confirm that the fix for |