2010-12-13 2 views
5

Я читал this post в блоге производительности MySQL.Оптимизация InnoDB - «использовать транзакции при выполнении обновлений» - почему?

При применении настройки он говорит:

Сначала убедитесь, что вы используете транзакции при выполнении обновления

я в настоящее время только с помощью операций в местах, где есть несколько вставок или обновления с в то же время. то есть более одной таблицы.

Должен ли я изменить каждый UPDATE, чтобы изменить его на транзакцию?

В чем разница между:

prepare sql 
bind params 
commit 

и:

begin transaction 
prepare sql 
bind params 
execute statement 
commit transaction 

с точки зрения того, что происходит на уровне базы данных, что делает один быстрее, чем другие?

ответ

6

По умолчанию InnoDB работает в автоматическом режиме. Это означает, что каждый запрос выполняется в собственной транзакции и сразу же совершается. В InnoDB это означает, что вы записываете данные в два места на диске (не спрашивайте меня о подробностях - я пишу из памяти то, что я читал в блоге производительности MySQL один раз;)).

Теперь, если вы выполняете одно обновление/вставку/удаление за раз, производительность невелика. Однако, если вы выполняете несколько последовательных обновлений/вставок/удалений, вы можете сэкономить время на жестком диске, связав их с транзакцией, а затем совершите все сразу.

+2

+1. Более технический анализ: есть буфер, который задерживает запись в журнал (innodb_log_buffer_size), который нужно очищать чаще, если вы совершаете все это время, что приводит к ухудшению производительности. Буфер также автоматически очищается каждые 1 секунду. –