Проблемное выполнение с непрерывным UPDATE / INSERT в Mysql - PullRequest
0 голосов
/ 16 мая 2011

В настоящее время у нас есть база данных и скрипт, который имеет 2 обновления и 1 выбор, 1 вставка.

Проблема в том, что у нас есть 20 000 человек, которые запускают этот скрипт каждый час.Это приводит к тому, что mysql запускается со 100% процессором.

Для вставки, для ведения журнала, мы хотим записать все данные в наш mysql, но по мере увеличения таблицы приложение замедляется и замедляется. Мы работаем на InnoDB, но некоторые люди говорят, что это должен быть MyISAM .Что мы должны использовать?В этой таблице журнала мы иногда извлекаем журнал для статистических целей.40-> 50 раз в день.

Наше решение - использовать Gearman [http://gearman.org/] для отсрочки вставки в базу данных.Но как насчет обновления.

Нам нужно обновить 2 таблицы, 1 от клиента, чтобы обновить баланс (баланс = баланс -1), а другой - обновить счетчик из другой таблицы.

Как мы должны сделать это быстрее и эффективнее?

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 мая 2011

, но по мере увеличения таблицы приложение становится все медленнее и медленнее

Обычно это означает, что вы где-то упускаете индекс.

MyISAM не годится:в дополнение к несовместимости с ACID, он блокирует всю таблицу для выполнения вставки, что убивает параллелизм.

0 голосов
/ 16 мая 2011

Внимательно прочитайте документацию по MySQL:

http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

Особенно "innodb_flush_log_at_trx_commit" - http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html

Я бы держался подальше от MyISAM, поскольку у него есть проблемы с параллелизмом при смешивании операторов SELECT и INSERT. Если вы можете сохранить ваши таблицы вставок достаточно маленькими, чтобы они оставались в памяти, они будут работать намного быстрее. Пакетирование ваших обновлений в транзакции также поможет им работать быстрее. Настройка тестовой среды и настройка для вашей реальной работы очень важна.

Возможно, вы также захотите посмотреть на разделы, чтобы вращать ваши журналы. Вы бы удалили старый раздел и создали новый для текущих данных. Это намного быстрее, чем удаление старых строк.

...