diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c
index c3949106a444744d528dd71a95698e8367f8441d..266fffda87b4124beafc23bfdc9342a4cd883dd8 100644
--- a/src/slurmctld/job_scheduler.c
+++ b/src/slurmctld/job_scheduler.c
@@ -294,6 +294,7 @@ static int _delta_tv(struct timeval *tv)
  */
 extern List build_job_queue(bool clear_start, bool backfill)
 {
+	static time_t last_log_time = 0;
 	List job_queue;
 	ListIterator job_iterator, part_iterator;
 	struct job_record *job_ptr = NULL;
@@ -308,10 +309,15 @@ extern List build_job_queue(bool clear_start, bool backfill)
 	while ((job_ptr = (struct job_record *) list_next(job_iterator))) {
 		if (((tested_jobs % 100) == 0) &&
 		    (_delta_tv(&start_tv) >= build_queue_timeout)) {
-			info("build_job_queue has been running for %d usec, "
-			     "exiting with %d of %d jobs tested, %d job-partition pairs added",
-			     build_queue_timeout, tested_jobs,
-			     list_count(job_list), job_part_pairs);
+			time_t now = time(NULL);
+			if (difftime(now, last_log_time) > 600) {
+				/* Log at most once every 10 minutes */
+				info(
+"%s has run for %d usec, exiting with %d of %d jobs tested, %d job-partition pairs added",
+				     __func__, build_queue_timeout, tested_jobs,
+				     list_count(job_list), job_part_pairs);
+				last_log_time = now;
+			}
 			break;
 		}
 		tested_jobs++;