Удаление больших данных в SQL-таблице Azure увеличит объем хранилища данных базы данных. - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь удалить большие данные из таблицы SQL Azure с помощью команды delete, но при удалении данных хранилище данных базы данных будет увеличено. Как я могу это остановить или в Azure есть возможность минимизировать журналы транзакций?

Я не хочу использовать усечение, потому что мне не нужно удалять все данные в таблице.

 delete top(10000)
 from Crumbs
 where CrumbId <= @maxId and 
       TenantId =@tenantId

Ответы [ 3 ]

0 голосов
/ 08 апреля 2019

Пожалуйста, укажите этот блог: Как удалить большие данные таблицы в SQL без журнала? .

Если вы не хотите использовать усечение, М.Али предлагает вам еще одну опцию:

  1. изменить режим восстановления базы данных на ПРОСТОЙ.
  2. удалить строки меньшими партиями, используя цикл while.

Пример:

DECLARE @Deleted_Rows INT;
SET @Deleted_Rows = 1;


WHILE (@Deleted_Rows > 0)
  BEGIN
   -- Delete some small number of rows at a time
     DELETE TOP (10000)  Crumbs
     WHERE CrumbId < <= @maxId and
           TenantId =@tenantId
  SET @Deleted_Rows = @@ROWCOUNT;
END

Может быть, вы можете попробовать эту опцию.

Надеюсь, это поможет.

0 голосов
/ 09 апреля 2019

У вас есть несколько вариантов в зависимости от вашей таблицы и записей, которые вы хотите удалить:

  • Какую долю ваших данных вы хотите сохранить и удалить? Если вы намереваетесь удалить гораздо больше данных, чем хотите сохранить, подумайте о сохранении данных в новую таблицу и удалите старую.
  • Если ваша таблица разбита на разделы, то вы можете применить вышеописанный подход к разделам и при необходимости включать / выводить разделы.
  • Ваш размер базы данных состоит из журнала и файлов данных. Если вы удалите несмежные фрагменты данных, ваши индексы будут фрагментированы, поэтому между ними будет потеряно много места (разбиение страниц и т. Д.) .). Когда вы закончите удаление, запустите перестройку или реорганизацию индексов, чтобы очистить это пространство.
  • После того как вы перестроили / реорганизовали, принудительно очистите журнал и предварительно выделенное пространство данных, используя DBCC SHRINKDATABASE . Обратите внимание, что при перезапуске нагрузки вы можете испытать незначительное влияние перфорации, поскольку файлы db и log должны снова увеличиваться.
0 голосов
/ 07 апреля 2019

Обычно вы меняете режим восстановления базы данных на ПРОСТОЙ.

Это немного по-другому для баз данных Azure Sql: В этом случае SQL Database Engine выполняет резервное копирование журнала транзакций каждые 5-10 минут - оно также автоматически сокращается.

Если вы хотите получить полный контроль над экземпляром базы данных, можно запустить управляемый экземпляр SQL Server или виртуальную машину с установленным SQL Server.

...