• 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