[MDEV-5841] Mariadb very poor temporary performance Created: 2014-03-13 Updated: 2021-04-06 Resolved: 2018-01-18 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Storage Engine - Aria |
| Affects Version/s: | 5.5.36 |
| Fix Version/s: | 10.1.32, 10.2.14, 10.3.5 |
| Type: | Bug | Priority: | Major |
| Reporter: | Slawomir Pryczek | Assignee: | Michael Widenius |
| Resolution: | Duplicate | Votes: | 4 |
| Labels: | None | ||
| Environment: |
fc20, standard install |
||
| Attachments: |
|
||||||||||||
| Issue Links: |
|
||||||||||||
| Sprint: | 5.5.59, 10.0.34 | ||||||||||||
| Description |
|
Hello, I have done some quick test, creating temporary table with 200k rows copied, now the results are just SHOCKING. MEMORY engine <1s Now look at this: 20 seconds, repeatable. So 20 TIMES slower than myisam. Maybe i don't get something but this looks very bad. SSD disks, 32 CPU cores. Now prepare for another shock. Just changing row_format to dynamic makes the engine almost 20 times faster http://screencast.com/t/BYGWZnWMB Just removing engine=ARIA makes the query almost 5 TIMES slower, where ARIA engine is the default! This is repeatable, time differences are minimal (0.2-0.5s)... Now here's the magic: aria_used_for_temp_tables = ON http://screencast.com/t/efeTmteO7 CREATE TABLE `raw_stats_value_copy_copy1` ( To sum it up... because of some very weird configuration TEMP tables in mariadb are 5-20 times slower than in mysql. For some tables with only integers it takes 6s to create TMP table with 300k rows with ARIA/PAGE, 1.5s with ARIA/DYNAMIC and 1s with MYISAM, etc. So this isn't limited just to char fields. Solution: get rid of aria as default TMP engine ( i see no point as even innodb seem much faster ), or set row format to DYNAMIC... or im not getting something? Attaching the table that makes 1:5 difference (can't attach the better example with text data unfortunately) |
| Comments |
| Comment by Sergei Golubchik [ 2014-03-13 ] |
|
There's some confusion in here. The variable aria_used_for_temp_tables doesn't affect tables that you create, they use the default storage engine setting. That variable only affects temporary tables that were created internally (for example, to resolve GROUP BY). And for this, in my tests, Aria was up to three times faster than MyISAM, simply because MyISAM always writes data to disk, while Aria caches them in the page cache and a temporary table can be discarded before any of its pages is ever flushed to disk. In your tests it doesn't matter (almost) whether a table is temporary or not. May be your Aria engine is seriously mis-configured? |
| Comment by Slawomir Pryczek [ 2014-03-13 ] |
|
Im using stock (default) config, with aria page buffer set at 4G. No changes other than that. Have you did your tests on normal or SSD disks? Any explaination why when setting row_format to dynamic (or fixed) ARIA is 20 times faster than using default fow_format=PAGE? (i see in docs that it shouldn't write to disk, so that's counter-intuitive than storing data in buffer is so slow). Is that ARIA buffer split into parts like for myisam, so they can use several mutexes? Im running on 32 not too speedy cores, may that be a problem? Hyperthreading enabled. >In your tests it doesn't matter (almost) whether a table is temporary or not. May be your Aria engine is seriously mis-configured? |
| Comment by Slawomir Pryczek [ 2014-03-13 ] |
|
Another quick comment... im issuing same queries against some other tables, on not loaded (unused) server, and again there's the same behaviour... Myisam => 1.5s So when there's no traffic it seems that differences get smaller. I also tested reading from tables. It seems that aria with PAGE is about 10% faster than myisam... Do you have some estimate, how many temporary rows are created in your GROUP-BY temporary table. Maybe that table is just kept in-memory because it's smaller than TMP MEM table limit? |
| Comment by Dimitris Chatzis [ 2018-01-04 ] |
|
After three years MariaDB start checking an easy to reproduce problem and it seems that it will take 2 more years for a fix |
| Comment by Michael Widenius [ 2018-01-18 ] |
|
Sorry for the slow delay, I was just not got aware of this issue. I am now fixing |
| Comment by Michael Widenius [ 2018-01-18 ] |
|
Comments for fixing this will be in this issue |
| Comment by Michael Widenius [ 2018-02-17 ] |
|
Fixed performance problem with Aria by speeding up find_head(). The result of this patch is a up to 2x or more speed up for inserts without keys for |
| Comment by Michael Widenius [ 2021-04-06 ] |
|
A note about the original issue: If you are using Aria transactional tables (CREATE ... TRANSACTIONAL=1) for temporary tables those will be slow as there will be a sync for every insert an that can explain a 10x slowdown. The fix that was done for find_head should make Aria notable faster for internal temporary tables in most cases compared to MyISAM. |