Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
rternier
Starting Member
44 Posts |
Posted - 2009-07-07 : 11:24:41
|
| I'm running this query on SQL 2005 (The actual query will be ran on SQL 2008)INSERT INTO tblGPSData(numLatitude, numLongitude, datTimeStamp, intUserID, intSpeed, datClientTime)SELECT numLatitude, numLongitude, GETDATE(), intUSerID, intSpeed, datClientTimeFROM tblGPSDataRight now there are 23,120,390 rows in that one table. I'm trying to increase the amount of rows to just under 500,000,000 to do some testing.However, I keep getting this error:Msg 9002, Level 17, State 4, Line 1The transaction log for database 'db**' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases.Is there any way I can write this to it doesn't fill the transaction log?----Killer ASP.NET ninja coding monkeys do exist![url]http://weblogs.asp.net/rternier[/url] |
|
|
mfemenel
Professor Frink
1421 Posts |
Posted - 2009-07-07 : 11:56:28
|
| Try breaking it up into smaller batches.Mike"oh, that monkey is going to pay" |
 |
|
|
TheFuzz4
Starting Member
6 Posts |
Posted - 2009-07-07 : 12:48:38
|
| Also if your transaction log is taking up the entire hard drive that can also cause you problems. One thing we do here where I work at is we have a job that runs every Sunday that shrinks all of our transaction logsThis procedure works great. Also if your running this query on a database in a non production environment consider changing the log type from full to simple. GO/****** Object: StoredProcedure [dbo].[sp_force_shrink_log] Script Date: 07/07/2009 10:46:41 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER proc [dbo].[sp_force_shrink_log]---------------------------------------------------------------------------------- Purpose: Shrink transaction log of the current database in SQL Server 7.0.-- Author: Andrew Zanevsky, AZ Databases, Inc., 12/25/1999, v5 - 08/18/2000-- zanevsky@azdatabases.com-------------------------------------------------------------------------------- @target_percent tinyint = 0, @target_size_MB int = 10, @max_iterations int = 1000, @backup_log_opt nvarchar(1000) = 'with truncate_only'asset nocount ondeclare @db sysname, @last_row int, @log_size decimal(15,2), @unused1 decimal(15,2), @unused decimal(15,2), @shrinkable decimal(15,2), @iteration int, @file_max int, @file int, @fileid varchar(5)select @db = db_name(), @iteration = 0create table #loginfo ( id int identity, FileId int, FileSize numeric(22,0), StartOffset numeric(22,0), FSeqNo int, Status int, Parity smallint, CreateTime varchar(50))create unique clustered index loginfo_FSeqNo on #loginfo ( FSeqNo, StartOffset )create table #logfiles ( id int identity(1,1), fileid varchar(5) not null )insert #logfiles ( fileid ) select convert( varchar, fileid ) from sysfiles where status & 0x40 = 0x40 select @file_max = @@rowcountif object_id( 'table_to_force_shrink_log' ) is null exec( 'create table table_to_force_shrink_log ( x nchar(3000) not null )' )insert #loginfo ( FileId, FileSize, StartOffset, FSeqNo, Status, Parity, CreateTime ) exec ( 'dbcc loginfo' )select @last_row = @@rowcountselect @log_size = sum( FileSize ) / 1048576.00, @unused = sum( case when Status = 0 then FileSize else 0 end ) / 1048576.00, @shrinkable = sum( case when id < @last_row - 1 and Status = 0 then FileSize else 0 end ) / 1048576.00from #loginfoselect @unused1 = @unused -- save for laterselect 'iteration' = @iteration, 'log size, MB' = @log_size, 'unused log, MB' = @unused, 'shrinkable log, MB' = @shrinkable, 'shrinkable %' = convert( decimal(6,2), @shrinkable * 100 / @log_size )while @shrinkable * 100 / @log_size > @target_percent and @shrinkable > @target_size_MB and @iteration < @max_iterations begin select @iteration = @iteration + 1 -- this is just a precaution exec( 'insert table_to_force_shrink_log select name from sysobjects delete table_to_force_shrink_log') select @file = 0 while @file < @file_max begin select @file = @file + 1 select @fileid = fileid from #logfiles where id = @file exec( 'dbcc shrinkfile( ' + @fileid + ' )' ) end exec( 'backup log [' + @db + '] ' + @backup_log_opt ) truncate table #loginfo insert #loginfo ( FileId, FileSize, StartOffset, FSeqNo, Status, Parity, CreateTime ) exec ( 'dbcc loginfo' ) select @last_row = @@rowcount select @log_size = sum( FileSize ) / 1048576.00, @unused = sum( case when Status = 0 then FileSize else 0 end ) / 1048576.00, @shrinkable = sum( case when id < @last_row - 1 and Status = 0 then FileSize else 0 end ) / 1048576.00 from #loginfo select 'iteration' = @iteration, 'log size, MB' = @log_size, 'unused log, MB' = @unused, 'shrinkable log, MB' = @shrinkable, 'shrinkable %' = convert( decimal(6,2), @shrinkable * 100 / @log_size )endif @unused1 < @unused select 'After ' + convert( varchar, @iteration ) + ' iterations the unused portion of the log has grown from ' + convert( varchar, @unused1 ) + ' MB to ' + convert( varchar, @unused ) + ' MB.'union allselect 'Since the remaining unused portion is larger than 10 MB,' where @unused > 10union allselect 'you may try running this procedure again with a higher number of iterations.' where @unused > 10union allselect 'Sometimes the log would not shrink to a size smaller than several Megabytes.' where @unused <= 10elseselect 'It took ' + convert( varchar, @iteration ) + ' iterations to shrink the unused portion of the log from ' + convert( varchar, @unused1 ) + ' MB to ' + convert( varchar, @unused ) + ' MB'exec( 'drop table table_to_force_shrink_log' )JasonHandel IT |
 |
|
|
|
|
|
|
|