[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