Michael Gale wrote:
> I have finished reading something similer on the web, why is there a
> 2GB limit ?
I assume you are using Linux on an x86 compatible machine (Pentium,
Athlon, ...), so you have 32 bit addresses.
32 bit give you 4 G different values; as each address identifies a
single byte, you can address 4 GB on the machine.
The Linux kernel differs between user and system addresses, this is
essential to pass data around, for example in system calls.
Traditionally, this was done on the highest address bit (2 GB system
address space, 2 GB user). With the growing size of applications, this
has become configurable (with kernel generation) to a 1 / 3 ratio.
> If I can compile the kernel to say eys there is 4GB of memory why can
> mysql not use 3GB of it ?
But still these 3 GB (space of virtual addresses) must hold everything
the application (in your case: MySQL) can address, so it contains code,
stacks of all threads in the process, static data, all configurable
As a first step, you can use the "size" command on "mysqld" to get some
of these values, then calculate the total thread stack space and add it.
Subtract that from your user address space size (2 or 3 GB), and
distribute the result among all buffers, caches etc.
In any case, I see no way to use 3 GB just for the InnoDB buffer pool on
a 32 bit system.
Joerg Bruehe, Senior Production Engineer
MySQL AB, www.mysql.com