2013-06-26 5 views
1

Я действительно новичок в MySQL и только начал использовать движок таблицы InnoDB на своем VPS.Оптимизация innoDB, но мои вставки ждут друг друга

Информация о сервере: 4 x 2.4 ghz, 8 Gb ram, 120gb Raid10.

My.cfg:

[mysqld] 
innodb_file_per_table=1 
innodb_buffer_pool_size=4G 
innodb_log_file_size=512M 
innodb_flush_log_at_trx_commit=2 

Таблица для вставки имеет 6 Интс и 1 дату и 1 триггер для отображения -> вставляет 1 строку для каждой строки в таблице отображения.

Последняя строка помогает ускорить вставку (база данных составляет 80% вставки/обновления против 20% чтения).

Но когда я делаю некоторые тесты, я вызываю PHP-файл в веб-браузере, который будет делать 10 000 вставок, это занимает около 3 секунд (это быстро/медленно для этого оборудования?). Но когда я открываю несколько вкладок и одновременно открываю PHP-файл, у всех их есть время выполнения 3 секунды, но они ждут друг друга:/

Любые идеи, какие настройки я должен добавить? Или другие настройки, которые я должен добавить для более быстрых вставок, очень ценятся!

ответ

1

3,300 вставки второй довольно приличный, особенно с триггером. Трудно больше узнать об этом, не понимая таблицы.

Что вы делаете с фиксацией? Выполняете ли вы все 10K-вставки и затем совершаете один раз? Если это так, другие клиенты, выполняющие подобные задачи, вероятно, заблокированы до запуска каждого клиента. Это особенность!

С другой стороны, если вы используете autocommit, вы делаете сбои сервера MySQL.

Лучшая стратегия заключается в том, чтобы вставлять куски чего-то вроде 100 или 500 строк, а затем совершать.

Вы должны попытаться решить эту локауту не с настройками конфигурации, а путем настройки вашего приложения web php для тщательного управления транзакциями.

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

+0

Да, это так! Я использую транзакции, черт возьми, это было глупо с моей стороны, чтобы забыть! Но будет ли это быстрее, если я буду использовать autocommit? Когда пользователи войдут в веб-приложение, я сделаю около 200-300 вставок (только в первый раз они используют приложение). –

+0

Нет, не используйте autocommit. Вместо этого сделайте явное коммит после куска вставок. 200-300 вставок подходят для размера блока. –

+0

большое спасибо! что helpen, я делал вставки 10k для тестирования, но когда приложение выйдет вживую, у каждого нового пользователя будет 200-300 вставок. –

Смежные вопросы