What kind of recovery mode do you have (Full, Simple) ?
Main Topics
Browse All TopicsHi experts,
I have a multithreaded application which writes from one thread to a SQL Server Express database. The application is stable (collects data 24h/day without interruption, however, after a maintenance stop it automatically recovers the data it lost (1-2 Mio calls to a stored procedure within a short time.
After a certain size (ca. 3 GB) of the database, my application stops after some 200'000 records and the database crashes (at the beginning I did not even realize that since SQL Server is in recovering mode in the database and comes back online after recovering automatically.
I suppose SQL Server Express is not that stable, but I guess it could be solved with some form of throttle mechanism, which must be based on a measureable quantity/indicator e.g. from the DMO.
Anybody has an idea how to solve this?
Thanks
0pl0
This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.
Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.
If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.
Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.
Access the answers to your technology questions today.
30-day free trial. Register in 60 seconds.
Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Try it out and discover for yourself.
30-day free trial. Register in 60 seconds.
Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.
My recovery mode is Full. In any case, the database comes back online automatically after a certain period. The data quantity is heavy I am using at the moment. I use a stored procedure which updates state information in an other table, uses a small lookup table for a key starting from a string and finally inserts the data (not that much, 4 numeric fields), but potentially 3 millions of times.
I suspect SQL Server writes all the updates first in the transaction log, and afterwards it writes it in the database tables. I saw that I could easily insert 400'000 records in less than 2-3 seconds, but afterwards the database goes in recovery mode and is not available anymore for some 30 minutes.
Any idea how to throttle the insertion, e.g. insert 100 records, check a certain state information from SLQ Server and continue when it is fully available again?
Thanks
0pl0
>> My recovery mode is Full.
And do you need full? Full is only useful when you do log backups. I think it's not your case. Use simple mode.
>> I suspect SQL Server writes all the updates first in the transaction log, and afterwards it writes
>> it in the database tables.
Don't suspect. That _is_ how it works.
>>Any idea how to throttle the insertion, e.g. insert 100 records
You can always insert a sort of delay either in your SQL script or in your program.
In SQL the instruction is, for example:
Waitfor delay '00:00:00.050'
It will stop for 50 miliseconds. I'm assuming your have a sort of loop when you can put this line.
>>the database goes in recovery mode
I don't get this part. Recovery mode is just after a failure or an unexpected shutdown in the middle of a big transaction. May be is it running out of memory for your transaction?
I'm almost sure all will be fixed by switching to simple mode.
The size of 3GB comes from weeks of 24h/7d of data collection...
Indeed, the data quantity is not that much, but the update number lets the transaction log size increase very quickly (in one database I have just state information updates - there I have about 1GB/week of transaction log with just 5MB of database). I need the full recovery model since I'll upgrade to SLQ Server 2005 Standard or Enterprise for high availability reasons. I guess, however, that this problem will remain like this even with the Enterprise version.
I was looking around in the meantime in the SQL Server Help Online. I strongly suspect that after the 200'000 records the log is automatically flushed to the database (-> because SQL Server is issuing a CHECKPOINT command after a certain data quantity, before the changes are just written to the log, which is very lean).
I guess a possible solution could be to make a Log Backup after a maintenance stop in order to flush the transaction log, set the recovery interval to e.g. 2 hours and after succeeding in this phase put it back to 0 (automatic). Alternatively, I could issue a CHECKPOINT command after each 100'000 records in order to flush the data to the database.
Any idea?
Thanks
0pl0
>> Indeed, the data quantity is not that much, but the update number lets the transaction log size
>> increase very quickly (in one database I have just state information updates - there I have
>> about 1GB/week of transaction log with just 5MB of database).
But you didn't make any full backup or transaction log in that time, right? That's why.
>>I guess a possible solution could be to make a Log Backup after a maintenance stop in order
>>to flush the transaction log
Yes, to keep the transaction log under control, if you're using Full recovery mode, you have-to do either Log Backups or Full backups which both truncates the transaction log. BTW, you don't need to stop the services to do this.
>>set the recovery interval to e.g. 2 hours and after succeeding in this phase put it back to 0 (automatic)
The automatic recovery interval which is zero, means 1 minutes approximately. I don't understand why you want to make it larger, i.e. 2 hours. That will worsen the situation.
>> Alternatively, I could issue a CHECKPOINT command after each 100'000 records in order to flush
>>the data to the database.
If you have a programmatic way to do this in your application, yes, this will alleviate the bloated transaction log problem.
Business Accounts
Answer for Membership
by: fischermxPosted on 2007-03-15 at 09:33:23ID: 18728313
I'm about to switch from MySQL to SQL Server Express because corruption in MyISAM tables.
I administer a few SQL Server instalations and I've never seen a case of corruption there.
Well, respecting your case, what's in your event log ? What's the exact message your getting on this crashes ?
How many records are you inserting by second?