How does it the refresh appear within Tableau Server? Is it success or failure? Maybe it's similar to our situation. Within our DW, a 1 or 2 hour limit is imposed on the query( dependent on which resource svc id we are running with). And if this limit is exceeded, then there is a DW bodyguard that terminates on the DW side, but never sends an error back to Tableau Server so the refresh extract is partial (didn't finish importing all the rows), and there is a lot of confusion because the extract appears as success. We have avoided this issue by running incrementals or running with the 2 hour queue limit.
It’s actually Tableau killing the job due to Maximum allowed threshold time and yes it does show as Failed job with error “job timeout” in Backgrounder report – but no failure email.