-
Type: New Feature
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: Sharding
-
v4.2
-
Sharding 2019-10-21, Sharding 2019-11-04
-
(copied to CRM)
Problem statement
There are several types of performance problems due to the routing metadata. One is the predictable, high perf impact of mongos fetching the entire routing table from the config server at cold start-up.
Proposal
Make mongos preload the routing table for all collections on startup.
1) Use ShardingCatalogClient::getAllDBs to get a vector of all the databases.
2) For each database in the vector, use CatalogCache::getAllShardedCollectionsForDb to get all its sharded collections.
3) For each sharded collection, use CatalogCache::getShardedCollectionRoutingInfoWithRefresh to load the routing info for that collection.
This logic can be placed here in sharding initialization on mongos, which occurs synchronously during mongos startup.
Test that the logic works by starting up a mongos and asserting on CatalogCache::Stats::countFullRefreshesStarted, which is returned by serverStatus.
- related to
-
SERVER-47169 Sharding initialization contacts config shard before ShardRegistry updated by RSM, preventing mongos from starting up
- Closed
-
SERVER-62036 Failures in preCacheMongosRoutingInfo() will cause mongos to fail startup
- Closed