This is a pretty vague question and getting it answered seems like a long shot, but I don’t know what else to do.
Ever since I made my website live every now and then it will just freeze. You click on a link and the browser will just site there looking like its trying to connect. It seems the freezing can last up to 2 minutes or so, then everything is just fine. Then a little while later, it will do the same thing.
I track all the exceptions that occur on my website in a log file.
I get these quite a bit ..
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding
And the stack trace shows it leading to some method that’s connecting to the database.
I’m assuming the freezing has to do with this timeout problem. My website is hosted on a shared server, and my database is on some other server with about a billion other databases as well.
But even being on a shared server, this freezing problem happens all the time. Its extremely annoying. And I can see this being a pretty catastrophic problem considering my site is ecommerce based and people are doing transactions on it. The last thing I want is the site freezing when my users hit the ‘Submit payment’ button, then it results in them hitting the submit payment button over and over again because the site froze, then there credit card gets charged about 10 extra times.
Does anyone have any suggestions on the best way to handle this?
That’s a Sql command timeout exception – it can be somewhat common if your database is under load. Make sure you’re disposing of SqlConnections and SqlCommands – though that’d usually result in a pool timeout exception (can’t retrieve a connection from the connection pool).
Odds are, someone is running queries that are badly tuned or otherwise sucking resources. It may be your site, but since you’re on a shared db server, it could just as easily be someone else’s. It could also be blocking, or open transactions – since those would be on your database, that’d be a coding issue. You’ll probably need to get your hosting provider involved to track it down or move to a dedicated db server.
You can decrease the CommandTimeout of your SqlCommands – I know that sounds somewhat counter-intuitive, but I often find that it’s better to fail early than try for 60 seconds throwing additional load on the server. If your .5 second query isn’t done in 5 seconds, odds are it won’t be done in 60 either.
Alternatively, if you’re the patient type, you can increase the CommandTimeout – but there’s also a IIS timeout of 90 seconds that you’ll need to modify if you bump it up too much.