Change your database’s Recovery Mode to SIMPLE and then delete rows in smaller batches using a while loop something like this: 
 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)  LargeTable 
      WHERE readTime < dateadd(MONTH,-7,GETDATE())
   SET @Deleted_Rows = @@ROWCOUNT;
 ENDKeep in mind that logs could grow a lot if you don’t commit the transaction after each chunk and perform a checkpoint. This is how I would do it and take this article http://sqlperformance.com/2013/03/io-subsystem/chunk-deletes as reference, with performance tests and graphs:
DECLARE @Deleted_Rows INT;
SET @Deleted_Rows = 1;
WHILE (@Deleted_Rows > 0)
  BEGIN
   BEGIN TRANSACTION
   -- Delete some small number of rows at a time
     DELETE TOP (10000)  LargeTable 
     WHERE readTime < dateadd(MONTH,-7,GETDATE())
     SET @Deleted_Rows = @@ROWCOUNT;
   COMMIT TRANSACTION
   CHECKPOINT -- for simple recovery model
ENDSources:
https://stackoverflow.com/questions/24213299/how-to-delete-large-data-of-table-in-sql-without-log
Comments