Bug #89122 | Severe performance regression in server bootstrap | ||
---|---|---|---|
Submitted: | 5 Jan 2018 16:47 | Modified: | 16 Jan 2018 16:19 |
Reporter: | Georgi Kodinov | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: GIS | Severity: | S3 (Non-critical) |
Version: | 8.0.5 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[5 Jan 2018 16:47]
Georgi Kodinov
[9 Jan 2018 11:03]
Georgi Kodinov
Posted by developer: The regression I see is from 67.7 secs for 8.0.3 to 311.9 secs for 8.0.5. This is about 5 times slower ! I've taken 8.0.3 from the website and have compiled it with debug, similarly to my 8.0 git repo: cmake -G "Visual Studio 15 2017 Win64" -DWITH_DEBUG=1 -DWITH_EMBEDDED_SERVER=0 -DWITH_SSL=c:/openssl/64bit -DWITH_UNIT_TESTS=0 I've then tested running the main.1st test case that doesn't do a whole lot. Here's what I get on my computer: d:\ade\git\8.0.3\mysql-8.0.3-rc\bld\mysql-test>timeit perl mysql-test-run.pl 1st --timer Logging: D:/ade/git/8.0.3/mysql-8.0.3-rc/mysql-test/mysql-test-run.pl 1st --timer MySQL Version 8.0.3 Checking supported features... - SSL connections supported - binaries are debug compiled Collecting tests... Checking leftover processes... Removing old var directory... Creating var directory 'D:/ade/git/8.0.3/mysql-8.0.3-rc/bld/mysql-test/var'... Installing system database... Using parallel: 1 ============================================================================== TEST RESULT TIME (ms) or COMMENT -------------------------------------------------------------------------- worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009 main.1st [ pass ] 32 -------------------------------------------------------------------------- The servers were restarted 0 times Spent 0.032 of 68 seconds executing testcases Completed: All 1 tests were successful. Days : 0 Hours : 0 Minutes : 1 Seconds : 7 Milliseconds : 667 Ticks : 676673711 TotalDays : 0.000783187165509259 TotalHours : 0.0187964919722222 TotalMinutes : 1.12778951833333 TotalSeconds : 67.6673711 TotalMilliseconds : 67667.3711 d:\ade\git\mysql-8.0\bld\mysql-test>timeit perl mysql-test-run.pl 1st --timer Logging: D:/ade/git/mysql-8.0/mysql-test/mysql-test-run.pl 1st --timer 2018-01-09T10:55:18.078444Z 0 [System] [MY-010116] D:/ade/git/mysql-8.0/bld/runtime_output_directory/Debug/mysqld.exe (mysqld 8.0.5-debug-log) starting as process 10920 ... MySQL Version 8.0.5 Checking supported features... - SSL connections supported - binaries are debug compiled Collecting tests... Removing old var directory... Creating var directory 'D:/ade/git/mysql-8.0/bld/mysql-test/var'... Installing system database... Using parallel: 1 ============================================================================== TEST RESULT TIME (ms) or COMMENT -------------------------------------------------------------------------- worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009 main.1st [ pass ] 27 -------------------------------------------------------------------------- The servers were restarted 0 times Spent 0.027 of 312 seconds executing testcases Completed: All 1 tests were successful. Days : 0 Hours : 0 Minutes : 5 Seconds : 11 Milliseconds : 904 Ticks : 3119049123 TotalDays : 0.00361001055902778 TotalHours : 0.0866402534166667 TotalMinutes : 5.198415205 TotalSeconds : 311.9049123 TotalMilliseconds : 311904.9123 FYI, the timeit macro is defined as follows: timeit=powershell -Command "Measure-Command { $* | out-default}"
[9 Jan 2018 11:07]
Georgi Kodinov
Posted by developer: This is the same test, but as run against a ramdrive (r: is a ramdisk on my pc). Still it's 38 secs for 8.0.3 vs 50 secs on latest mysql-8.0 d:\ade\git\8.0.3\mysql-8.0.3-rc\bld\mysql-test>timeit perl mysql-test-run.pl --vardir=r:/ade/mtr 1st --timer Logging: D:/ade/git/8.0.3/mysql-8.0.3-rc/mysql-test/mysql-test-run.pl --vardir=r:/ade/mtr 1st --timer MySQL Version 8.0.3 Checking supported features... - SSL connections supported - binaries are debug compiled Collecting tests... Checking leftover processes... Removing old var directory... Creating var directory 'r:/ade/mtr'... Installing system database... Using parallel: 1 ============================================================================== TEST RESULT TIME (ms) or COMMENT -------------------------------------------------------------------------- worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009 main.1st [ pass ] 35 -------------------------------------------------------------------------- The servers were restarted 0 times Spent 0.035 of 38 seconds executing testcases Completed: All 1 tests were successful. Days : 0 Hours : 0 Minutes : 0 Seconds : 38 Milliseconds : 219 Ticks : 382199049 TotalDays : 0.000442360010416667 TotalHours : 0.01061664025 TotalMinutes : 0.636998415 TotalSeconds : 38.2199049 TotalMilliseconds : 38219.9049 d:\ade\git\mysql-8.0\bld\mysql-test>timeit perl mysql-test-run.pl --vardir=r:/ade/mtr 1st --timer Logging: D:/ade/git/mysql-8.0/mysql-test/mysql-test-run.pl --vardir=r:/ade/mtr 1st --timer 2018-01-09T11:04:56.508521Z 0 [System] [MY-010116] D:/ade/git/mysql-8.0/bld/runtime_output_directory/Debug/mysqld.exe (mysqld 8.0.5-debug-log) starting as process 19652 ... MySQL Version 8.0.5 Checking supported features... - SSL connections supported - binaries are debug compiled Collecting tests... Checking leftover processes... Removing old var directory... Creating var directory 'r:/ade/mtr'... Installing system database... Using parallel: 1 ============================================================================== TEST RESULT TIME (ms) or COMMENT -------------------------------------------------------------------------- worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009 main.1st [ pass ] 28 -------------------------------------------------------------------------- The servers were restarted 0 times Spent 0.028 of 50 seconds executing testcases Completed: All 1 tests were successful. Days : 0 Hours : 0 Minutes : 0 Seconds : 50 Milliseconds : 750 Ticks : 507507543 TotalDays : 0.000587392989583333 TotalHours : 0.01409743175 TotalMinutes : 0.845845905 TotalSeconds : 50.7507543 TotalMilliseconds : 50750.7543
[9 Jan 2018 12:18]
Georgi Kodinov
Posted by developer: For the record the box is a lenovo desktop with the following hardware: Processor Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz, 3401 Mhz, 4 Core(s), 8 Logical Processor(s) Installed Physical Memory (RAM) 16.0 GB OS Name Microsoft Windows 10 Pro Version 10.0.15063 Build 15063 Disk Model ST1000DM003-1ER162
[16 Jan 2018 12:02]
Norvald Ryeng
Posted by developer: Terje and I have looked at this, and the cause seems to be transaction performance on specific file systems. We've tested: 1. CREATE statements 2. INSERT statements in one transaction 3. INSERT statements in auto-commit mode (5000+ transactions) We see a slowdown in cases 1 and 3 compared to case 2. The conclusion is that we can rule out slowdown caused by writing through the DD interface. It's the number of transactions that is the problem. We've also discovered that this depends on the file system. We can reproduce this problem on Linux when using the xfs file system. The reason why I haven't been able to reproduce it, is that I'm using ext4, which is not impacted. Since Windows performance is affected, I assume transactions on NTFS are also slow. Performance regression in --initialize is just a symptom. The root cause is that transactions are slow on various file systems. Users will experience poor performance also after initialization. We can replace CREATE SPATIAL REFERENCE SYSTEM statements with INSERT statements to fix the symptom, but the root cause requires a different fix.
[2 Mar 2018 3:25]
Erlend Dahl
Bug#89444 8.0.4rc --initialize-insecure is prohibitively slow was marked as a duplicate.
[19 Mar 2018 17:49]
Paul DuBois
Posted by developer: Fixed in 8.0.11. On some systems, mysqld --initialize to initialize the data directory was very slow.