Мы используем Postgresql 9.1.4
в качестве нашего сервера db. Я пытался ускорить работу своего тестового набора, поэтому я смотрел, как профилировать бит db, чтобы увидеть, что именно происходит. Мы используем database_cleaner для обрезания таблиц в конце тестов. ДА Я знаю, что транзакции быстрее, я не могу использовать их в определенных обстоятельствах, поэтому я не заинтересован в этом.
То, с чем я связан, - это то, почему TRUNCATION занимает так много времени (дольше, чем использование DELETE), и почему для моего CI-сервера требуется EVEN LONGER.
Прямо сейчас, локально (на Macbook Air) полный комплект тестов занимает 28 минут. Приведение журналов каждый раз, когда мы обрезаем таблицы... т.е.:
TRUNCATE TABLE table1, table2 -- ... etc
для выполнения усечения требуется более 1 секунды. Приведение журналов на нашем CI-сервере (Ubuntu 10.04 LTS) займет всего 8 секунд, чтобы обрезать таблицы, а сборка занимает 84 минуты.
Когда я переключился на стратегию :deletion
, моя локальная сборка заняла 20 минут, а сервер CI - до 44 минут. Это существенная разница, и я действительно сдулся, почему это может быть. Я настроен на сервере CI, он имеет 16-гигабайтный системный баран, 4gb shared_buffers... и SSD. Все хорошее. Как это возможно:
a., что он намного медленнее, чем мой Macbook Air с 2gb баранов b., что TRUNCATION намного медленнее DELETE, если postgresql docs явно указать что он должен быть намного быстрее.
Любые мысли?