A big part of your problem seems to be that 32bit OS's can not allocate more than 2G memory to a single process, and with each client connection needing so much buffer space, you quickly exceed that limit. Short of moving to a 64bit OS, the only solution I have come across that allows mysql to utilize more than 2G total memory is to run multiple concurrent mysqld processes on the same machine. This can be done by configuring them to replicate from eachother (A->B and B->A), and then write your application so it connects to either A or B (or C, D, etc). It can also be done with the mysql cluster (this was talked about in the documentation and email list extensively some months ago when I was testing the cluster), but that may be beyond what you are trying to accomplish. Of course, either of these solutions may put too much stress on another part of your systems (disk, cpu), it all depends on what you are doing.

As per the InnoDB table extender, this is taken from the manual (section 15.8): "InnoDB increases the size of that file automatically in 8MB increments when it runs out of space. Starting with MySQL 4.0.24 and 4.1.5, the increment size can be configured with the option innodb_autoextend_increment, in megabytes. The default value is 8."

Regards,
Devananda



Kasthuri Ilankamban wrote:
Thank a lot for your quick reply. SInce we are not using myisam tables ( except for the system tables), I deallocated memory from myisam and allocated to innodb. When I allocated close to 1.7G to innodb buffer size, mysql used to crash more often. So I decreased innodb_buffer_size to 1G. What memory parameter do you suggest to increase and how do you alter innodb table extender?

This is the error that causes mysql to crash.

050704 18:19:21  InnoDB: Warning: could not allocate 100892621 +
1000000 bytes to retrieve
InnoDB: a big column. Table name `sessions/horde_sessionhandler`
050704 18:37:16  InnoDB: ERROR: the age of the last checkpoint is
483189148,
InnoDB: which exceeds the log group capacity 483180135.
InnoDB: If you are using big BLOB or TEXT rows, you must set the
InnoDB: combined size of log files at least 10 times bigger than the
InnoDB: largest such row.
050704 18:38:23 InnoDB: Fatal error: cannot allocate 100892688 bytes of
InnoDB: memory with malloc! Total allocated memory



The table that's it's complaining about is a session table which stores web session information. Basically the data in that table is a throw away data and gets deleted when the user logs out. The session data column in that table is defined as long blob. The average length of the row is not that big but once in a while application inserts a row for a user with session data that could exceed 200MG . Since we have lots of concurrent users and if application inserts few rows with > 200MG data simultaneously innodb runs out of memory and crashes. Eventhough we have 8 gig memory, I'm not able to start mysql if I allocate more than 2Gig to innodb_buffer_size. Do you know how I can allocate more than 2 Gig memory to innodb on 32 bit machine. That might solve our problem.

Thanks for your suggestions.

Kasthuri



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to