Also, did you do any analysis while the code was running for that 1 hour? What if someone had a lock on a table and you simply waited for THAT to complete? What if your query did a bunch of physical IOs and your IO system took 10000 SECONDS to get the IO into RAM?
Use sp_whoisactive to find the first issue and differential file IO stall analysis for the other. I would add in differential wait stats analysis too. The latter two are where you take a snapshot of those two things, wait for a while (I often use 3 minutes), take another snapshot and diff the two and divide by time. That gives you "something that could be causing a problem right now"/millisecond.
Best,
Kevin G. Boles
SQL Server Consultant
SQL MVP 2007-2012
TheSQLGuru on googles mail service