воскресенье, 18 октября 2009 г.

MySQL при малом объеме озу

взято отсюда

Всем привет!
Сегодня я решил написать статью про оптимизацию MySQL 5.x для запуска и работы в условиях малого объёма ОЗУ

Проблема стоит особенно остро на VDS/VPSсерверах, так как там ОЗУ очень немного.
Конкретно в моём случае я довольствуюсь лишь 64Мб и без дополнительного тюнинга MySQL отказался запускаться вообще.

Почитав некоторое количество форумов, блогов и мануалов я вывел самый минимальный конфиг, при котором MySQL может работать.

Вот он:

  1. # Main MySQL server options
  2. [mysqld]
  3. port = 3306
  4. socket = /var/run/mysqld/mysqld.sock
  5. # No locking at all!
  6. skip-locking
  7. # Set internal buffers, caches and stacks very low
  8. key_buffer = 16K
  9. max_allowed_packet = 16K
  10. table_cache = 1
  11. sort_buffer_size = 16K
  12. read_buffer_size = 16K
  13. read_rnd_buffer_size = 1K
  14. net_buffer_length = 1K
  15. thread_stack = 16K
  16. # Don’t listen on a TCP/IP port at all.
  17. # Will still work provided all access is done via localhost
  18. skip-networking
  19. server-id = 1
  20. # Skip Berkley and Inno DB types
  21. skip-bdb
  22. skip-innodb
  23. # Set the query cache low
  24. query_cache_limit = 1048576
  25. query_cache_size = 1048576
  26. query_cache_type = 1
  27. # Set various memory limits very low, disable memory-hogging extras
  28. [mysqldump]
  29. quick
  30. max_allowed_packet = 16K
  31. [mysql]
  32. no-auto-rehash
  33. [isamchk]
  34. key_buffer = 16K
  35. sort_buffer_size = 16K
  36. [myisamchk]
  37. key_buffer = 16K
  38. sort_buffer_size = 16K
  39. [mysqlhotcopy]
  40. interactive-timeout

Именно с ним мне получилось первый раз удачно стартовать MySQL.
Посмотрев результат и оценив расход ОЗУ я решил расщедриться и увеличить кэш, заодно и пометь некоторые параметры.

Вот что у меня получилось в итоге:

  1. [mysqld]
  2. datadir=/var/lib/mysql
  3. socket=/tmp/mysql/mysql.sock
  4. user=mysql
  5. port = 3306
  6. bind-address = 127.0.0.1
  7. # No locking at all!
  8. skip-locking
  9. # Set internal buffers, caches and stacks very low
  10. key_buffer = 16K
  11. max_allowed_packet = 16K
  12. table_cache = 1
  13. sort_buffer_size = 16K
  14. read_buffer_size = 16K
  15. read_rnd_buffer_size = 1K
  16. net_buffer_length = 1K
  17. thread_stack = 16K
  18. # Don’t listen on a TCP/IP port at all.
  19. # Will still work provided all access is done via localhost
  20. skip-networking
  21. server-id = 1
  22. # Skip Berkley and Inno DB types
  23. skip-bdb
  24. skip-innodb
  25. # Set the query cache low
  26. query_cache_limit = 500K
  27. query_cache_size = 3M
  28. query_cache_type = 1
  29. # Set various memory limits very low, disable memory-hogging extras
  30. [mysqldump]
  31. quick
  32. max_allowed_packet = 16K
  33. [mysql]
  34. no-auto-rehash
  35. [isamchk]
  36. key_buffer = 16K
  37. sort_buffer_size = 16K
  38. [myisamchk]
  39. key_buffer = 16K
  40. sort_buffer_size = 16K
  41. [mysqlhotcopy]
  42. interactive-timeout
Пока что пользуюсь без проблем этим конфигом, при моих ресурсах ОЗУ он вполне меня устраивает.
Все опции прокомментированы прямо в конфиге и очень понятны.