Postgresql Скорость усечения

Мы используемPostgresql 9.1.4 как наш сервер БД. Я пытался ускорить мой набор тестов, поэтому я немного посмотрел на профилирование базы данных, чтобы точно увидеть, что происходит. Мы используемdatabase_cleaner усекать таблицы в конце тестов. Да, я знаю, что транзакции выполняются быстрее, я не могу использовать их при определенных обстоятельствах, поэтому меня это не касается.

Что меня беспокоит, так это то, почему TRUNCATION занимает так много времени (дольше, чем использование DELETE) и почему на моем CI-сервере ДАЖЕ Дольше.

Прямо сейчас, локально (на Macbook Air) полный набор тестов занимает 28 минут. Хвостовые логи, каждый раз, когда мы усекаем таблицы ... то есть:

TRUNCATE TABLE table1, table2  -- ... etc

для выполнения усечения требуется более 1 секунды. Хвост логов на нашем CI-сервере (Ubuntu 10.04 LTS) занимает урезать целые 8 секунд, а сборка занимает 84 минуты.

Когда я переключился на:deletion Стратегия, моя локальная сборка заняла 20 минут, а CI-сервер отключился до 44 минут. Этоsignificant Разница, и я действительно потрясен, почему это может быть. Я & APOS; венастроенный  БД на сервере CI имеет 16 ГБ оперативной памяти, 4 ГБ shared_buffers ... и SSD. Все хорошие вещи. Как это возможно:

a. что он намного медленнее, чем мой Macbook Air с 2 ГБ ОЗУ
b. что TRUNCATION намного медленнее, чем DELETE, когдаpostgresql документы заявить явно что это должно быть намного быстрее.

Какие-нибудь мысли?

Ответы на вопрос(4)

Ваш ответ на вопрос