MongoDB-用于获取与服务器的连接的等待队列已满

时间:2019-04-09 11:57:01

标签: mongodb mongoose connection connection-pooling connection-timeout

我正在使用以下代码连接mongo DB。

public static class MongoDBHandler
{
    static IMongoClient _client;
    static IMongoDatabase _database;
    static string MongoDBConnectionString;

    static IMongoClient mClientConnection()
    {
        MongoDBConnectionString = System.Configuration.ConfigurationManager.AppSettings["connectionString"];
        _client = new MongoClient(MongoDBConnectionString);
        return _client;
    }

    public static IMongoDatabase mDatabase()
    {
        try
        {
            if (_client == null)
            {
                _client = mClientConnection();
            }

            if (_database == null)
            {
                var mongoUrl = new MongoUrl(MongoDBConnectionString);
                _database = _client.GetDatabase(mongoUrl.DatabaseName);
            }
            return _database;
        }
        catch
        {
            throw;
        }
    }
}

我正在使用上面的类代码,如下所示:-

protected static IMongoDatabase _database;

public void GetData()
{
    _database = Assistant.MongoDBHandler.mDatabase();
    IMongoCollection<Models.RoomTypeMappingOnline> collection_rto = _database.GetCollection<Models.RoomTypeMappingOnline>("collection");
    //Rest of code
}

我的代码运行正常。我能够以更少的请求获取数据而没有任何问题。

但是当我收到更多请求时,就会收到“用于获取与服务器的连接的等待队列已满”错误。

下面是我的连接字符串:-

mongodb://admin:password@server:11111/databse?authSource=sa&appName=database&connectTimeoutMS=5000&minPoolSize=3000&retryWrites=true&waitQueueMultiple=15

请提出我可以对代码进行哪些更改,以便其可以正常运行。

1 个答案:

答案 0 :(得分:0)

我只是在mongo db连接中将minPoolSize = 3000增加到minPoolSize = 5000。这将解决我的问题。

还请注意,如果增加最小池大小,则mongo服务器的CPU和内存利用率也会增加。因此,您需要在增大大小之前对其进行监视。