[debian-mysql] Bug#430684: "/etc/init.d/mysql start" timeout with large innodb_buffer_pool_size on X86-64 systems.
Paul Veldema
paul at realworks.nl
Tue Jun 26 15:29:12 UTC 2007
Package: mysql-server-5.0
Version: 5.0.32-7etch1
When using an innodb_buffer_pool_size of 24GByte (or more) I get
a "failed!" message starting mysql with '/etc/init.d/mysql'.
Mysql starts anyway, however /etc/mysql/debian-start is not started.
This happens because of a 14 second timeout in the /etc/init.d/mysql script.
To reproduce:
Use an x86_64 machine with the 64 bit version of etch and 32GB or more.
We use an Dell PE6800, quad quad-core Xeon with 64GByte RAM.
Transcript with our own settings:
mysqlmachine-etch64:~# /etc/init.d/mysql stop
mysqlmachine-etch64:~# vim /etc/mysql/my.cnf
# add <any other innodb settings>
# Add/Set the innodb_buffer_pool_size to more than 24GB:
# in this case 80% of the 64GByte of the memory our (Dell PE6800)
server has.
innodb_buffer_pool_size = 51000M
mysqlmachine-etch64:~# /etc/init.d/mysql start
Starting MySQL database server: mysqld . . . . . . . . . . . . . . failed!
mysqlmachine-etch64:~#
Some extra system info:
mysqlmachine-etch64:~# mysql -u root -p
Enter password:
mysql> show variables like '%version%';
+-------------------------+--------------------------+
| Variable_name | Value |
+-------------------------+--------------------------+
| protocol_version | 10 |
| version | 5.0.32-Debian_7etch1-log |
| version_comment | Debian etch distribution |
| version_compile_machine | x86_64 |
| version_compile_os | pc-linux-gnu |
+-------------------------+--------------------------+
mysqlmachine-etch64:~# uname --all
Linux mysqlmachine-etch64 2.6.18-4-amd64 #1 SMP Fri May 4 00:37:33 UTC
2007 x86_64 GNU/Linux
Proposed fix:
mysqlmachine-etch64:/etc/init.d:~# diff adjusted-mysql mysql
< # 14s was reported in #? to be too few when using x86_64
with large innodb_buffer_pool_size
< for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28; do
---
> for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
mysqlmachine-etch64:/etc/init.d# /etc/init.d/adjusted-mysql restart
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld . . . . . . . . . . . . . . . .
. . . . . . . . . . ..
Checking for corrupt, not cleanly closed and upgrade needing tables..
28 seconds was enough for mysql to allocate a 51 GByte
innodb_buffer_pool, that should be enough for most.
With 14 seconds the maximum innodb_buffer_pool_size where the table
checker would start was about 23GByte.
More information about the pkg-mysql-maint
mailing list