| Bug #69350 | performance regression between 5.5 and 5.6 for simple statement in routine loop | ||
|---|---|---|---|
| Submitted: | 30 May 2013 5:44 | ||
| Reporter: | Shane Bester (Platinum Quality Contributor) | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: Optimizer | Severity: | S5 (Performance) |
| Version: | 5.6 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
[30 May 2013 6:07]
MySQL Verification Team
server was run with options: --no-defaults --skip-grant-tables --skip-name-resolve --console \ --loose-performance-schema=0 --skip-symbolic-links --query-cache-size=0 \ --query-cache-type=0
[30 May 2013 8:41]
MySQL Verification Team
hard to compare when code is in different functions in different versions.
Attachment: profile_comparison.csv (application/octet-stream, text), 47.72 KiB.

Description: The testcase shows a sharp performance degradation between 5.5 and 5.6. 5.7 improves a bit, but I feel there is some further investigation needed here. Version, call1, call2, call3, call4, call5 ---------------------------------------------- 5.7.2, 33.20, 33.25, 33.25, 33.29, 33.22 5.6.13, 36.83, 36.46, 36.62, 36.50, 36.42 5.5.33, 25.73, 25.22, 25.32, 25.35, 25.38 5.1.71, 24.37, 24.31, 24.13, 24.29, 24.28 5.0.96, 28.86, 28.87, 28.94, 28.70, 28.88 How to repeat: set names latin1; drop procedure if exists `p1`; delimiter $ create procedure `p1`(`n` bigint unsigned) begin declare `i` bigint unsigned default 0; declare `j` bigint unsigned default 0; repeat select 1 into `j`; set `i`:=`i`+1; until `i`>=`n` end repeat; end $ delimiter ; call `p1`(10000000); call `p1`(10000000); call `p1`(10000000); call `p1`(10000000); call `p1`(10000000); select version(); Suggested fix: Will upload the callgrind files.