Производительность записи SQLite примерно в 10 раз ниже в CentOS 6.3, чем в MacOSX 10.8.2
Резюме: транзакции вставки / удаления / обновления занимают в 10-15 раз больше времени в CentOS 6.3 по сравнению с MacOSX 10.8.2
Я использую SQLite (3.7.12) из Perl (DBD::SQLite 1.37). У моего приложения есть несколько мест, где оно выполняет несколько записей (удаляет, обновляет и вставляет) в рамках транзакции.
Я сравнивал время между тремя машинами:
- MBP: 2010 MacBook Pro с обычным диском
- MBA: MacBook Air 2011 года с SSD
- Сервер CentOS 6.3 (AMD Opteron 3250 с программным RAID-массивом 1 ТБ, 4 ядрами, 8 ГБ ОЗУ)
Транзакция на сервере CentOS занимает в 10–15 раз больше времени, чем MBP и MBA. Как и ожидалось, MBA немного быстрее, так как у него SSD. Если я отключу прагму синхронно, все будет хорошо и быстро, как и ожидалось.
Мы каждый раз выполняем одну и ту же последовательность тестов и получаем одинаковые базы данных. В то время, когда выполняется тест, на коробке CentOS еще мало что работает.
Тестируя производительность записи на диск на низком уровне, машина CentOS превосходит другие. Где мне искать дальше?
2 ответа
Проблема оказалась в том, что файловая система ext3 была сконфигурирована в / etc / fstab.
Я закончил тем, что провел много экспериментов и тестов производительности, чтобы лучше понять это, которое я написал по вине сервера:
https://serverfault.com/questions/486677/should-we-mount-with-data-writeback-and-barrier-0-on-ext3
Таким образом, файловая система была смонтирована с барьером = 1; изменение его на барьер =0 в сочетании с упорядоченными данными вернуло производительность, которую мы "пропустили".
Я бы начал сокращать зависимости.
Попробуйте запустить тест для базы данных в памяти.
Попробуйте запустить его в прямом C, чтобы убедиться, что это не так, как perl. Я в чем-то сомневаюсь, но издеваться должно быть легко.