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

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

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

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

TRUNCATE TABLE table1, table2  --... etc

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

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

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

есть идеи?

62
задан Brian Tompsett - 汤莱恩 23 August 2015 в 10:54
поделиться