diff --git a/lib/modules/platform/github/index.spec.ts b/lib/modules/platform/github/index.spec.ts
index 0c615eb6909d332920e1a7edf6b8afd2983b06d1..696919b49b42715645d41a5a2e7506b9733cccd5 100644
--- a/lib/modules/platform/github/index.spec.ts
+++ b/lib/modules/platform/github/index.spec.ts
@@ -22,6 +22,7 @@ const githubApiHost = 'https://api.github.com';
 jest.mock('delay');
 
 jest.mock('../../../util/host-rules');
+jest.mock('../../../util/http/queue');
 const hostRules: jest.Mocked<typeof _hostRules> = mocked(_hostRules);
 
 jest.mock('../../../util/git');
diff --git a/lib/util/http/queue.ts b/lib/util/http/queue.ts
index e24a588a6a7fa32a5b88068d958c9f47811a5f8d..71b387a93be0d819e27b0d195ce4874ab25a5ce2 100644
--- a/lib/util/http/queue.ts
+++ b/lib/util/http/queue.ts
@@ -1,12 +1,15 @@
 import PQueue from 'p-queue';
+import { logger } from '../../logger';
 import { parseUrl } from '../url';
 import { getRequestLimit } from './host-rules';
 
-const hostQueues = new Map<string | null, PQueue | null>();
+const hostQueues = new Map<string, PQueue | null>();
 
 export function getQueue(url: string): PQueue | null {
   const host = parseUrl(url)?.host;
   if (!host) {
+    // should never happen
+    logger.debug({ url }, 'No host');
     return null;
   }
 
@@ -15,7 +18,10 @@ export function getQueue(url: string): PQueue | null {
     queue = null; // null represents "no queue", as opposed to undefined
     const concurrency = getRequestLimit(url);
     if (concurrency) {
+      logger.debug({ concurrency, host }, 'Using queue');
       queue = new PQueue({ concurrency });
+    } else {
+      logger.debug({ host }, 'No concurency limits');
     }
   }
   hostQueues.set(host, queue);
diff --git a/lib/workers/global/index.ts b/lib/workers/global/index.ts
index 1ca3dfce70d694837f50ab322e75fbce44612fe0..75a0daf0728f8b8519f6be736151b0ef7283bc72 100644
--- a/lib/workers/global/index.ts
+++ b/lib/workers/global/index.ts
@@ -17,6 +17,7 @@ import { CONFIG_PRESETS_INVALID } from '../../constants/error-messages';
 import { pkg } from '../../expose.cjs';
 import { getProblems, logger, setMeta } from '../../logger';
 import * as hostRules from '../../util/host-rules';
+import * as queue from '../../util/http/queue';
 import * as repositoryWorker from '../repository';
 import { autodiscoverRepositories } from './autodiscover';
 import { parseConfigs } from './config/parse';
@@ -152,6 +153,10 @@ export async function start(): Promise<number> {
         repoConfig.hostRules.forEach((rule) => hostRules.add(rule));
         repoConfig.hostRules = [];
       }
+
+      // host rules can change concurrency
+      queue.clear();
+
       await repositoryWorker.renovateRepository(repoConfig);
       setMeta({});
     }
diff --git a/lib/workers/repository/init/merge.ts b/lib/workers/repository/init/merge.ts
index d7b3a52ab0a6ba7fe8743c1e88150428c3b99e63..2973e41c26de8d6cac1865cce61c7f9d9963e549 100644
--- a/lib/workers/repository/init/merge.ts
+++ b/lib/workers/repository/init/merge.ts
@@ -21,6 +21,7 @@ import { getCache } from '../../../util/cache/repository';
 import { readLocalFile } from '../../../util/fs';
 import { getFileList } from '../../../util/git';
 import * as hostRules from '../../../util/host-rules';
+import * as queue from '../../../util/http/queue';
 import type { RepoFileConfig } from './types';
 
 async function detectConfigFile(): Promise<string | null> {
@@ -255,6 +256,8 @@ export async function mergeRenovateConfig(
         );
       }
     }
+    // host rules can change concurrency
+    queue.clear();
     delete resolvedConfig.hostRules;
   }
   returnConfig = mergeChildConfig(returnConfig, resolvedConfig);