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 документы заявить явно что это должно быть намного быстрее.
Какие-нибудь мысли?