I have a stored procedure currently executing a complicated fetch that is frequently timing out when used. The proposed solution in my department has been to simply increase the timeout time length; which I don’t really want to do. I’d like to refactor this sproc, but because it’s so complicated and undocumented (yay legacy systems) I’m concerned my refactoring my not result in the same functionality executing more efficiently. Are there any strategies to use when refactoring a stored procedure to ensure the same functions are being performed in less time?
This is a Microsoft SQL Server 2005 stored procedure.
I have been faced with this situation in the past. The best thing to do is create a simple C# or VB .Net application. When you refactor the sp, give it a new name. Use the application to call both the old and new sp’s. Then compare the output of the two sp’s to ensure they return the exact same values in the same order.
You would want to test as wide a variety of input parameters as you can to ensure your refactoring hasn’t modified the business logic.
Also, using NUnit can help simplify this task.
When I started my current position, I was given a database that had to be modified for a new schema. It required changing over 100 sp’s. Using the application I’ve described, I was able to be reasonably sure that one of my modifications did not break the business rules.
You’re right, just increasing the timeout is the wrong first answer. Improve the sp as best you can, then increase the timeout if necessary.