Skip to content

feat: Optimize the collection loading process during startup#8053

Merged
generall merged 10 commits intoqdrant:devfrom
1995chen:feat/collection_load
Feb 4, 2026
Merged

feat: Optimize the collection loading process during startup#8053
generall merged 10 commits intoqdrant:devfrom
1995chen:feat/collection_load

Conversation

@1995chen
Copy link
Contributor

@1995chen 1995chen commented Feb 4, 2026

Fixes #7975

We have added some configurations to support concurrency settings for collection, shard, and segment loading, while maintaining the original default values, enabling Qdrant to achieve faster loading speeds on AWS EBS network volumes.

@1995chen 1995chen force-pushed the feat/collection_load branch from 91b63b4 to 6db00bc Compare February 4, 2026 03:32
coderabbitai[bot]

This comment was marked as resolved.

@1995chen 1995chen force-pushed the feat/collection_load branch 3 times, most recently from b33a06b to cace13d Compare February 4, 2026 04:30
@qdrant qdrant deleted a comment from coderabbitai bot Feb 4, 2026
@timvisee timvisee self-requested a review February 4, 2026 12:47
@qdrant qdrant deleted a comment from coderabbitai bot Feb 4, 2026
Copy link
Member

@timvisee timvisee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @1995chen! I like this one with configuration and keeping defaults much better. We can change defaults in the future if we have some solid benchmarks across a wide variety of deployments.

I do have some review remarks, most notably that I don't like the use of global state. I'll take care of this and will add the necessary commits to your branch. 👍

coderabbitai[bot]

This comment was marked as resolved.

@qdrant qdrant deleted a comment from coderabbitai bot Feb 4, 2026
@qdrant qdrant deleted a comment from coderabbitai bot Feb 4, 2026
@timvisee
Copy link
Member

timvisee commented Feb 4, 2026

I tested the following setup locally:

  • 1 peer
  • 20 collections
  • 12 shards each
  • 32 segments each
  • local NVMe disk

The default case (1/1/8) loads in 75 seconds.

With a (4/4/8) configuration loading took longer, taking 105 seconds.

QDRANT__STORAGE__PERFORMANCE__MAX_CONCURRENT_COLLECTION_LOADS=4 QDRANT__STORAGE__PERFORMANCE__MAX_CONCURRENT_SHARD_LOAD=4 QDRANT__STORAGE__PERFORMANCE__MAX_CONCURRENT_SEGMENT_LOAD=8 ./target/perf/qdrant

My best guess is that the high amount of context switching makes load performance worse on a setup like this. I can imagine it being effective on a networked disk with higher latency though. And so I don't have an objection to merge this.

@generall generall merged commit bc3f9a1 into qdrant:dev Feb 4, 2026
15 checks passed
@1995chen
Copy link
Contributor Author

1995chen commented Feb 5, 2026

I tested the following setup locally:

  • 1 peer
  • 20 collections
  • 12 shards each
  • 32 segments each
  • local NVMe disk

The default case (1/1/8) loads in 75 seconds.

With a (4/4/8) configuration loading took longer, taking 105 seconds.

QDRANT__STORAGE__PERFORMANCE__MAX_CONCURRENT_COLLECTION_LOADS=4 QDRANT__STORAGE__PERFORMANCE__MAX_CONCURRENT_SHARD_LOAD=4 QDRANT__STORAGE__PERFORMANCE__MAX_CONCURRENT_SEGMENT_LOAD=8 ./target/perf/qdrant

My best guess is that the high amount of context switching makes load performance worse on a setup like this. I can imagine it being effective on a networked disk with higher latency though. And so I don't have an objection to merge this.

Thank you so much, @timvisee and @generall !
Our dataset is still quite large, so we're not able to move to SSD storage yet. This PR has made a really big difference — our service startup time and especially failure recovery have improved noticeably. It's been a huge help for us in production.
Really appreciate your work on this — thank you both again! 🙏

generall added a commit that referenced this pull request Feb 9, 2026
* feat: optimize the collection loading process during startup

* simplify config options

* chore: update config.yaml

* Remove global state

* Disallow zero values

* Remove intermediate map

* Rename ConcurrentLoadConfig to LoadConcurrencyConfig

* Flatten config

* Accept string inputs from environment variables

* Fix test compilation

---------

Co-authored-by: generall <andrey@vasnetsov.com>
Co-authored-by: chenliang <chenliang@chenliangdeMacBook-Air.local>
Co-authored-by: timvisee <tim@visee.me>
@timvisee timvisee mentioned this pull request Feb 17, 2026
5 tasks
@timvisee
Copy link
Member

We've released Qdrant 1.17.0 which includes this improvement.

Thank you for implementing this one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants