Bug #39554 | select statement with joins and group by seems to be an endless loop | ||
---|---|---|---|
Submitted: | 20 Sep 2008 9:08 | Modified: | 19 Nov 2009 19:16 |
Reporter: | Pawel Parys | Email Updates: | |
Status: | Can't repeat | Impact on me: | |
Category: | MySQL Server: Partitions | Severity: | S3 (Non-critical) |
Version: | 5.1.28-rc-community-log | OS: | Windows (2003 Server) |
Assigned to: | CPU Architecture: | Any | |
Tags: | endless loop, GROUP BY, join, long, partitions, SELECT |
[20 Sep 2008 9:08]
Pawel Parys
[20 Sep 2008 9:18]
Pawel Parys
Added Windows version.
[20 Sep 2008 9:24]
Pawel Parys
Now I tried to remove join and plain query (select linia, brygada, typ, opis, count(*) as ile from kasowanie join legenda_bilety on typ_biletu = typ where data_zdarzenia between '2008-08-01' and '2008-08-31' and linia in (81, 82, 83, 84, 87) and rodzaj_skasowania <> 'N' group by linia, brygada, typ;) executed in 39 seconds...
[20 Sep 2008 9:26]
Pawel Parys
Wrong copy & paste last comment, query should be: select linia, brygada, typ_biletu, count(*) as ile from kasowanie where data_zdarzenia between '2008-08-01' and '2008-08-31' and linia in (81, 82, 83, 84, 87) and rodzaj_skasowania <> 'N' group by linia, brygada, typ_biletu;
[20 Sep 2008 9:41]
Valeriy Kravchuk
Thank you for a problem report. Please, send the results of EXPLAIN results for your query from 5.0.x and 5.1.28. Send also EXPLAIN PARTITIONS results from 5.1.28 (see http://dev.mysql.com/doc/refman/5.1/en/partitioning-info.html).
[20 Sep 2008 10:01]
Pawel Parys
EXPLAIN PARTITIONS from 5.1.28: *************************** 1. row *************************** id: 1 select_type: SIMPLE table: legenda_bilety partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 106 Extra: Using temporary; Using filesort *************************** 2. row *************************** id: 1 select_type: SIMPLE table: kasowanie partitions: rok2008 type: ref possible_keys: i_typ,i_rodzaj_skasowania,i_data,i_linia key: i_typ key_len: 3 ref: bilety.legenda_bilety.typ rows: 1 Extra: Using where 2 rows in set (0.00 sec) EXPLAIN SELECT from 5.1.28: *************************** 1. row *************************** id: 1 select_type: SIMPLE table: legenda_bilety type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 106 Extra: Using temporary; Using filesort *************************** 2. row *************************** id: 1 select_type: SIMPLE table: kasowanie type: ref possible_keys: i_typ,i_rodzaj_skasowania,i_data,i_linia key: i_typ key_len: 3 ref: bilety.legenda_bilety.typ rows: 1 Extra: Using where 2 rows in set (0.00 sec) I cannot get EXPLAIN SELECT from 5.0.x as I no longer have access to that database. :(
[22 Sep 2008 5:39]
Sveta Smirnova
Thank you for the report. EXPLAIN PARTITIONS does not have "partitions" part. Did you paste EXPLAIN output? Please send corrected one. Please also send output of SHOW CREATE TABLE and SHOW TABLE STATUS for tables legenda_bilety and kasowanie
[22 Sep 2008 5:51]
Pawel Parys
I earlier pasted full EXPLAIN PARTITIONS result - it looks just like above. Only partition rok2008 is used. mysql> show create table kasowanie\G *************************** 1. row *************************** Table: kasowanie Create Table: CREATE TABLE `kasowanie` ( `rodzaj_urzadzenia` enum('ASCOM','MACRO-SYSTEM','AVISTA','MENNICA - TERMINAL','MENNICA - AUTOMAT') DEFAULT NULL, `rodzaj_skasowania` varchar(8) DEFAULT NULL, `taborowy` smallint(5) unsigned DEFAULT NULL, `linia` smallint(5) unsigned DEFAULT NULL, `brygada` smallint(5) unsigned DEFAULT NULL, `strefa` smallint(5) unsigned DEFAULT NULL, `data_zdarzenia` date DEFAULT NULL, `czas_zdarzenia` time DEFAULT NULL, `nosnik` enum('SC','MG') DEFAULT NULL, `typ_biletu` smallint(4) unsigned DEFAULT NULL, `data_aktywacji` date DEFAULT NULL, `wazny_do` date DEFAULT NULL, `przejazdow_pozostalo` smallint(5) unsigned DEFAULT NULL, `siec_sprzedazy` tinyint(3) unsigned DEFAULT NULL, `nr_sekwencyjny_operacji` smallint(5) unsigned DEFAULT NULL, `wykupiono_na_linie` smallint(5) unsigned DEFAULT NULL, `kod_odrzucenia` smallint(4) unsigned DEFAULT NULL, `seria` tinyint(3) unsigned zerofill DEFAULT NULL, `seryjny` mediumint(8) unsigned zerofill DEFAULT NULL, `plik_zrodlowy` varchar(100) DEFAULT NULL, `pozycja` mediumint(8) unsigned DEFAULT NULL, `hash` char(32) DEFAULT NULL, `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY `duplikaty` (`hash`,`data_zdarzenia`), KEY `i_sernum` (`seria`,`seryjny`), KEY `i_typ` (`typ_biletu`), KEY `i_strefa` (`strefa`), KEY `plik` (`plik_zrodlowy`,`pozycja`), KEY `czas_importu` (`timestamp`), KEY `i_rodzaj_skasowania` (`rodzaj_skasowania`), KEY `i_nosnik` (`nosnik`), KEY `i_data` (`data_zdarzenia`), KEY `i_czas` (`czas_zdarzenia`), KEY `i_taborowy` (`taborowy`), KEY `i_linia` (`linia`), KEY `i_brygada` (`brygada`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1250 /*!50100 PARTITION BY RANGE (YEAR(data_zdarzenia)) (PARTITION rok1999 VALUES LESS THAN (2000) ENGINE = MyISAM, PARTITION rok2000 VALUES LESS THAN (2001) ENGINE = MyISAM, PARTITION rok2001 VALUES LESS THAN (2002) ENGINE = MyISAM, PARTITION rok2002 VALUES LESS THAN (2003) ENGINE = MyISAM, PARTITION rok2003 VALUES LESS THAN (2004) ENGINE = MyISAM, PARTITION rok2004 VALUES LESS THAN (2005) ENGINE = MyISAM, PARTITION rok2005 VALUES LESS THAN (2006) ENGINE = MyIS AM, PARTITION rok2006 VALUES LESS THAN (2007) ENGINE = MyISAM, PARTITION rok2007 VALUES LESS THAN (2008) ENGINE = MyISAM, PARTITION rok2008 VALUES LESS THAN (2009) ENGINE = MyISAM, PARTITION rok2009 VALUES LESS THAN (2010) ENGINE = MyISAM, PARTITION rok2010 VALUES LESS THAN (2011) ENGINE = MyISAM, PARTITION rok2011 VALUES LESS THAN (2012) ENGINE = MyISAM, PARTITION rok2012 VALUES LESS THAN (2013) ENGINE = MyISAM, PARTITION rok2013 VALUES LESS THAN (2014) ENGINE = MyISAM, PARTITION rok2014 VALUES LESS THAN (2015) ENGINE = MyISAM, PARTITION rok2015 VALUES LESS THAN (2016) ENGINE = MyISAM, PARTITION rok2016 VALUES LESS THAN (2017) ENGINE = MyISAM, PARTITION rok2017 VALUES LESS THAN (2018) ENGINE = MyISAM, PARTITION rok2018 VALUES LESS THAN (2019) ENGINE = MyISAM, PARTITION rok2019 VALUES LESS THAN (2020) ENGINE = MyISAM, PARTITION nowsze VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */ 1 row in set (0.00 sec) mysql> show table status like 'kasowanie'\G *************************** 1. row *************************** Name: kasowanie Engine: MyISAM Version: 10 Row_format: Dynamic Rows: 481418708 Avg_row_length: 131 Data_length: 63105367824 Max_data_length: 0 Index_length: 120613948416 Data_free: 0 Auto_increment: NULL Create_time: 2008-05-08 14:09:43 Update_time: 2008-09-21 10:38:37 Check_time: 2008-05-08 16:37:21 Collation: cp1250_general_ci Checksum: NULL Create_options: partitioned Comment: 1 row in set (0.86 sec) mysql> show create table legenda_bilety\G *************************** 1. row *************************** Table: legenda_bilety Create Table: CREATE TABLE `legenda_bilety` ( `naglowek` varchar(256) DEFAULT NULL, `typ` smallint(4) unsigned DEFAULT NULL, `opis` varchar(512) DEFAULT NULL, `nosnik` varchar(16) DEFAULT NULL, `cena` decimal(6,2) DEFAULT '0.00' ) ENGINE=MyISAM DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> show table status like 'legenda_bilety'\G *************************** 1. row *************************** Name: legenda_bilety Engine: MyISAM Version: 10 Row_format: Dynamic Rows: 106 Avg_row_length: 76 Data_length: 8100 Max_data_length: 281474976710655 Index_length: 1024 Data_free: 0 Auto_increment: NULL Create_time: 2008-06-15 17:17:25 Update_time: 2008-08-17 18:36:31 Check_time: NULL Collation: utf8_general_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec)
[22 Sep 2008 11:22]
Pawel Parys
Rewriting the query using subqueries helped - I got my results in 5 minutes so this stopped to be critical for me.
[1 Nov 2009 10:40]
Valeriy Kravchuk
Is this problem repeatable for you with newer version, 5.1.40?
[19 Nov 2009 18:50]
Pawel Parys
I tried again with version 5.1.41 and problem is not showing. Everything seems to be OK. Thanks for your support. :)
[19 Nov 2009 19:16]
Valeriy Kravchuk
Not repeatable with 5.1.41.