The most common reason this happens because a user has left a session open which created a lock on data End of Day is trying to access, causing the job to wait until the lock is released. The solution to this is to make sure all users are out of the system overnight and make sure that processes scheduled in the same time frame are not locking tables used by End of Day Processing.  Tables where locks are most likely to occur are the query_retrieved table and the schedule_operations table.  The End of Day job needs a lock on those tables so that it can delete old data.

Sometimes End of Day Processing can run long because it's attempting to delete an unusually large set of records from query retrieved. If this appears to be the case, consider running the Delete Query Retrieved Records procedure on a regular basis in addition to End of Day Processing. Delete Query Retrieved Records can be set to run for a limited amount of time each night and if it does need to be killed, due to incremental commits after a chunk of records, the rollback is quicker and not all progress is lost . Delete Query Retrieved Records is available in Team Approach version 5.0.17 and later.

In another case, Support found that there were 2 other Query/Output jobs running concurrently with the EOD job (in separate queues).  Both were scheduled to start before EOD.  When these jobs were killed, the EOD job finished quickly.
It was recommended that the scheduling of these jobs could be more efficient if the EOD job was scheduled first, and the others set to run afterwards in the same queue, thereby avoiding such a performance/delay problem.

If you End of Day is taking much longer than normal, please create a support request at providing the date and details of the issue and referencing this solution.