Symptoms
- Indexer execution history shows errors like "Index quota has been exceeded" or storage/vector quota messages.
- Push API uploads return 4xx errors for new documents.
- Newest documents are missing from search; older ones still work.
Step 1: which limit?
curl -s "https://srch-prod.search.windows.net/servicestats?api-version=2024-07-01" -H "api-key: $ADMIN_KEY" | jq
The response shows usage and quota for counters such as storageSize, vectorIndexSize, documentCount and indexesCount.
Per index:
curl -s "https://srch-prod.search.windows.net/indexes/kb-v12/stats?api-version=2024-07-01" -H "api-key: $ADMIN_KEY"
# documentCount, storageSize, vectorIndexSize
| Limit reached | Typical cause |
|---|---|
vectorIndexSize | Many chunks × large dimensions; vector quota is a fraction of total storage per partition |
storageSize | Big text fields stored/retrievable, many duplicate chunks, old index versions kept |
indexesCount | Blue/green indexes never deleted |
Step 2: buy time (minutes)
- Delete old index versions you no longer need (after confirming nothing points to them):
curl -X DELETE "https://srch-prod.search.windows.net/indexes/kb-v09?api-version=2024-07-01" -H "api-key: $ADMIN_KEY"
- Pause ingestion of low-value sources.
- Remove duplicate or obsolete documents (old versions of the same file).
Step 3: add capacity
Add partitions (storage scales with partitions; billing too):
az search service update -g rg-ai -n srch-prod --partition-count 2
Adding partitions takes time (from minutes to hours depending on data size) and the service stays online. Check the replica × partition limits for your tier.
Higher tier: if partitions are maxed out, move to a tier with more storage per partition. Depending on your service and region, an in-place tier change may be supported; otherwise create a new service and re-index. Check current docs.
Step 4: reduce the footprint
| Technique | Effect |
|---|---|
| Vector compression (scalar or binary quantization) in the vector profile | Large reduction in vector index size; small recall loss, rescoring helps |
Narrower vector types (Edm.Half, Collection(Edm.SByte)) | Halves or quarters raw vector storage |
stored: false on vector fields you never return | Saves storage of the original vectors |
| Smaller embedding dimensions (models that support truncation) | Fewer bytes per vector; requires re-embedding |
| Larger chunks / less overlap | Fewer vectors; check retrieval quality |
| Don't store unneeded text fields as retrievable | Less storage |
Most of these need a new index (field definitions can't change in place). Build it alongside, validate retrieval, then switch.
Step 5: confirm
servicestatsshows headroom (< 70% for the limiting counter).- Re-run failed indexers:
POST /indexers/{name}/run. - Check the newest documents are searchable.
Warning
Blue/green index rebuilds temporarily need storage for two copies. Plan capacity for that, or the next rebuild hits the same wall.
Prevent it next time
- Alert when storage or vector index usage passes 70% (Azure Monitor metrics or a scheduled
servicestatscheck). - Forecast growth: documents per month × chunks per document × bytes per vector.
- Compression and narrow vector types from day one.
- Clean-up policy for old index versions.