Repository navigation
Description
Is your feature request related to a problem? Please describe.
Large tenants run slowly and use a lot of memory. Each processing job parses the full resource set (the cause described in #407), per-resource REST calls run one after another, and several modules scan large lists for every resource. The PowerShell Gallery version is still 3.6.15, so none of the fixes since then (#409, #410) reach users who install from the Gallery.
Describe the solution you'd like
Review and merge the open performance PRs and bug fixes below, then bump ModuleVersion and publish to the PowerShell Gallery. Each PR is independent unless noted, and each one was checked for identical report output against the current code.
| PR | Change | Measured gain |
|---|---|---|
| #412 | One row per resource unless -IncludeTags (bug: duplicate rows per tag) |
50k synthetic: processing −34%, report −77%, cache 173 → 43 MB |
| #413 | Parallel REST calls with retry for API inventory, VM quotas, storage capacity and soft delete | Live tenant: total run 7:41 → 3:51 |
| #414 | Each job receives only its own resource types | Live tenant: pwsh memory 9.4 → 3.7 GB |
| #415 | Retirement lookup indexed in 78 modules | 10k synthetic: 23.2 → 7.0 s across modules |
| #416 | VM module lookups indexed (builds on #412) | 50k synthetic: VM module 874 → 10.5 s |
| #417 | No fixed sleeps; job waits return when jobs finish | Report phase −14%; up to 5 s less per wait |
Bug fixes found along the way (small, one PR each):
| PR | Bug | Effect today |
|---|---|---|
| #419 | Resource Graph batches hold 201 subscriptions and overlap by one | Tenants with more than 200 subscriptions: subscriptions #201, #401, … are queried twice, so their resources appear twice |
| #420 | Quota data removed before it is returned; -QuotaUsage unused |
The Quota Usage sheet is never produced (now behind the documented -QuotaUsage) |
| #421 | AutomationAccounts reads a leftover runbook ($1) instead of the account ($0) |
Wrong tags, retirements never shown, and accounts without runbooks show another account's runbook ID |
Merge order: #412 before #416 and #421 (both build on it); #415 touches lines next to #412 and #416, and I'll rebase it after either lands. #413, #414, #417, #419 and #420 can go in any order.
Additional context
Live numbers come from one tenant: 4 subscriptions, ~3,200 resources, 97 storage accounts. Synthetic numbers come from a generated 10k / 50k-resource tenant. #414 should also help with the OutOfMemoryException in #407, which comes from the same full-JSON-per-job pattern. I'm happy to adjust any of the PRs.
Activity
[-][Request] Release a new version with the open performance PRs (#412–#417)[/-][+][Request] Release a new version with the open performance PRs and fixes (#412–#421)[/+]