Назад | Перейти на главную страницу

Как настроить производительность MySQL

Я столкнулся с реальной проблемой с экземпляром MySQL для онлайн-сервиса. Мы используем пул hibernate и c3p0 со следующими настройками:

c3p0.max_size=200
c3p0.min_size=5
c3p0.timeout=60000
c3p0.max_statements=20
c3p0.idle_test_period=300
c3p0.acquire_increment=3
c3p0.unreturnedConnectionTimeout=70000

Я заметил, что сервис (веб-сайт) не работает, поскольку он отказывает в соединении. Я вхожу в консоль MySQL и show processlist показаны в списке 30 спящих (командных) соединений с соответствующей базой данных. И это меня беспокоит. Мы ожидали 200 подключений каждый раз и включили максимальное количество подключений MySQL 300. Вот файл my. Cnf

key_buffer        = 16M
max_allowed_packet    = 16M
thread_stack        = 128K
thread_cache_size    = 8
max_connections        = 300
#table_cache            = 64
#thread_concurrency     = 10

Полный my.cnf

Я провел небольшое исследование и увидел, что размер table_cache должен быть соответственно обновлен. Машина представляет собой четырехъядерный компьютер, на котором запущен сервер Ubuntu 9.10 4 ГБ оперативной памяти

cat / proc / cpuinfo

** Вопрос 1: ** Как заставить c3p0 освободить незанятые соединения.

** Вопрос 2: ** Какие tache_cache и все другие параметры мне нужно исправить, чтобы сервер мог использовать весь свой потенциал и не отказываться от соединений

** Вопрос 3: ** После перезапуска Tomcat количество подключений MySQL упало до 4. Мне нужно исправить это как можно скорее, и для этого мне нужен ваш опыт. Но я бы тоже хотел получить этот опыт на время. Какую возможную книгу вы должны порекомендовать от настройки производительности MySQL до кластеризации.

Настройку MySQL можно выполнить с помощью нескольких скриптов.

Mysqltuner, mytop, mysqlreport, tuning-primer ... Эти скрипты предоставят вам подробную информацию о вашем сервере ...

Примеры смотрите по следующей ссылке

http://www.serveradminblog.com/2011/03/tuning-mysql-performance-howto-part-1/

Оптимизация - это бесконечный квест, но вот несколько вещей, которые могут помочь:

  1. Увеличение max_connect_errors (Я использую 10, но вы можете попробовать больше)
  2. Увеличение table_open_cache: 2048 - это то, что я использую, но это зависит от количества таблиц в вашем приложении.
  3. Используйте все IP-адреса в операторах предоставления и отключите DNS: [mysqld] skip-name-reslove = 1
  4. Определенно увеличить query_cache_size (т.е. 64 МБ)