Я написал код на C#, который удаляет записи из базы данных. Это ваш простой код удаления SQL, заключенный в транзакцию.Удаление строк из SQL Server увеличило размер базы данных
using (SqlTransaction trans = conn.BeginTransaction()) {
//some delete code
trans.Commit();
}
Я удалил около 4 миллионов строк по 4 таблицам в моей базе данных. Когда я проверил размер резервной копии базы данных обоих блоков данных с помощью Windows Explorer, размер резко увеличился примерно три раза
- Перед удалением: 7GB
- После удаления: 28GB
Я подтвердил что и размеры MDF, так и файлы LDF увеличены. Я также заметил, что некоторые таблицы, которые не подвержены удалению, имеют размер индекса.
После удаления:
Перед удалением:
Моя цель состоит в том, чтобы удалить записи, чтобы уменьшить размер базы данных, но он увеличился вместо этого. Можете ли вы сказать мне, почему размер увеличивается?
EDIT:
После удаления:
- database_size: 61050,69 MB
- нераспределенного пространства: 9592,60 MB
- защищены: 303512 KB
- данные: 207040 KB
- index_size: 53024 KB
- неиспользованными: 43448 KB
Перед удалением:
- database_size: 100 67.88 MB
- нераспределенное пространство: 16.69 MB
- защищены: 7290176 KB
- данные: 2937656 KB
- index_size: 4324848 KB
- неиспользованными: 27672 KB
Это больше подходит для dba.se, так как причина этого (и ответ) не имеет ничего общего с C#. Любой 'DELETE', который удаляет много строк в одной транзакции, продемонстрирует эту проблему. –
Я бы ожидал, что LDF определенно увеличится, и MDF, по крайней мере, останется того же размера, но, вероятно, увеличится. Поэтому дайте нам несколько цифр. И используйте 'sp_spaceused', чтобы определить, сколько места используется и сколько места зарезервировано. Обычно удаление освобождает пространство в MDF, но не уменьшает фактический файл (так как ему, вероятно, просто нужно будет его снова увеличить) –
Возможный дубликат [Размер базы данных больше после удаления из таблицы] (http: // stackoverflow. com/questions/10865201/database-size-more-after-delete-from-table) – pmcilreavy