Increase LMDB maxreaders if large number of threads in use

This commit is contained in:
Howard Chu 2017-10-30 18:06:32 +00:00
parent 6738753b30
commit 7c7d36725a
No known key found for this signature in database
GPG key ID: FD2A70B44AB11BA7

View file

@ -34,6 +34,7 @@
#include <cstring> // memcpy #include <cstring> // memcpy
#include <random> #include <random>
#include "common/util.h"
#include "cryptonote_basic/cryptonote_format_utils.h" #include "cryptonote_basic/cryptonote_format_utils.h"
#include "crypto/crypto.h" #include "crypto/crypto.h"
#include "profile_tools.h" #include "profile_tools.h"
@ -1129,6 +1130,11 @@ void BlockchainLMDB::open(const std::string& filename, const int db_flags)
if ((result = mdb_env_set_maxdbs(m_env, 20))) if ((result = mdb_env_set_maxdbs(m_env, 20)))
throw0(DB_ERROR(lmdb_error("Failed to set max number of dbs: ", result).c_str())); throw0(DB_ERROR(lmdb_error("Failed to set max number of dbs: ", result).c_str()));
int threads = tools::get_max_concurrency();
if (threads > 110 && /* maxreaders default is 126, leave some slots for other read processes */
(result = mdb_env_set_maxreaders(m_env, threads+16)))
throw0(DB_ERROR(lmdb_error("Failed to set max number of readers: ", result).c_str()));
size_t mapsize = DEFAULT_MAPSIZE; size_t mapsize = DEFAULT_MAPSIZE;
if (db_flags & DBF_FAST) if (db_flags & DBF_FAST)