MySQL tuning
Take this documentation as is, not as a definitive guide to tuning MySQL. There is a lot of information and knowledge that should be read before changing MySQL configuration. The documentation has been created based on experience shared by OpenKM server administrator users.
Useful links should read:
- MySQL: InnoDB Performance Tuning Tips
- MySQL: The MySQL Query Cache
- InnoDB - High disk write I/O on ibdata1 file and ib_logfile0
Sample one
Section titled “Sample one”Server information
- Virtualized Windows Server 2008
- CPU: Intel Xeon X3470 @2,93GHz
- RAM: 7GB
- JVM settings for Tomcat: -Xms 3072 -Xmx 3072 -XX:PermSize=256m -XX:MaxPermSize=512m
- Repository is 1GB
MySQL my.cnf changes
- innodb_buffer_pool_size=1792M
- innodb_additional_mem_pool_size=16M
- innodb_log_file_size=256M
- innodb_log_buffer_size=8M
Using MySQL server InnoDB engine with the default configuration parameters in my.cnf file can cause a serious performance bottleneck in applications with high database read write activity. MySQL should have enough RAM to be able to cache the repository and avoid the high Disk I/O activity.
The most important parameters are:
- innodb_buffer_pool_size
- innodb_additional_mem_pool_size
- innodb_log_file_size
- innodb_log_buffer_size
Considerations Repository is 1GB so 1792M is enough RAM for innodb_buffer_pool_size. The larger the repository the more memory you need to allocate to innodb_buffer_pool_size. If you are using x86 MySQL server you cannot allocate RAM larger than 2GB.
Information collected from OpenKM forum post.
Sample two
Section titled “Sample two”Server information
- CPU: Intel Xeon E5606 @2.13GHz
- RAM: 4GB
- System: Windows server 2008, 64bit
- JAVA_OPTS=-Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.awt.headless=true -Dfile.encoding=utf-8
- Database size:2.5G
- Repository size:40GB
- 100,000 nodes(folders + documents)
MySQL my.cnf changes
- query_cache_size=0
- table_open_cache=2000
- tmp_table_size=16M
- thread_cache_size=9
- myisam_max_sort_file_size=100G
- myisam_sort_buffer_size=32M
- key_buffer_size=8M
- read_buffer_size=64K
- read_rnd_buffer_size=256K
- sort_buffer_size=256K
- innodb_additional_mem_pool_size=16M
- innodb_log_buffer_size=8M
- innodb_buffer_pool_size=1042M
Results
Before optimization the login time was about 45-55 seconds with a lot of hard-disk I/O usage. After the MySQL optimization login takes about 10 seconds.
Information collected OpenKM Forum post.