diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c
index 327f43bb352925e78bd49b3830973b7f487870e7..1fd8f9bf9a40de763c5d8cb2b154850252531e33 100644
--- a/src/backend/storage/lmgr/proc.c
+++ b/src/backend/storage/lmgr/proc.c
@@ -1100,12 +1100,29 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable)
 				!(autovac_pgxact->vacuumFlags & PROC_VACUUM_FOR_WRAPAROUND))
 			{
 				int			pid = autovac->pid;
+				StringInfoData locktagbuf;
+				StringInfoData logbuf;		/* errdetail for server log */
+
+				initStringInfo(&locktagbuf);
+				initStringInfo(&logbuf);
+				DescribeLockTag(&locktagbuf, &lock->tag);
+				appendStringInfo(&logbuf,
+					  _("Process %d waits for %s on %s"),
+						 MyProcPid,
+						 GetLockmodeName(lock->tag.locktag_lockmethodid,
+										 lockmode),
+						 locktagbuf.data);
+
+				/* release lock as quickly as possible */
+				LWLockRelease(ProcArrayLock);
 
-				elog(DEBUG2, "sending cancel to blocking autovacuum PID %d",
-					 pid);
+				ereport(LOG,
+						(errmsg("sending cancel to blocking autovacuum PID %d",
+							pid),
+						 errdetail_log("%s", logbuf.data)));
 
-				/* don't hold the lock across the kill() syscall */
-				LWLockRelease(ProcArrayLock);
+				pfree(logbuf.data);
+				pfree(locktagbuf.data);
 
 				/* send the autovacuum worker Back to Old Kent Road */
 				if (kill(pid, SIGINT) < 0)