Ruby on Rails, могу ли я узнать текущее количество соединений в Mongoid pool? - PullRequest
0 голосов
/ 20 февраля 2019

Я установил min_pool_size в 100 в mongoid.yml, но в mongo при запуске db.serverStatus (). Соединений я получаю только 30. Есть ли способ проверить, сколько соединений у меня в пуле?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Установка min_pool_size в драйвере Ruby (и, следовательно, Mongoid) не означает, что на самом деле создано много сетевых подключений.Установка min_pool_size создает столько объектов подключения драйверов, но они подключаются к кластеру по требованию.Это поведение может измениться в будущей версии драйвера - см. https://jira.mongodb.org/browse/RUBY-1605.

Чтобы узнать, сколько сокетов фактически открыто для данного сервера, сначала получите его пул соединений:

pool = Mongoid.default_client.cluster.next_primary.pool
# => #<Mongo::Server::ConnectionPool:0x46944310901400 queue=#<Mongo::Server::ConnectionPool::Queue:0x46944310901380 min_size=20 max_size=100 wait_timeout=1 current_size=20>>

Затем посмотрите на сокеты в соединениях:

pool.send(:queue).queue.map { |conn| conn.send(:socket) }.compact.count
# => 0

Flight.count

pool.send(:queue).queue.map { |conn| conn.send(:socket) }.compact.count
# => 1

Для каждого сервера открыто одно дополнительное соединение / сокет для целей мониторинга, который недоступен для приложения.

Обратите внимание, что всеприведенный выше код (next_primary, вставка в сокеты подключения и т. д.) не является частью общедоступного API драйвера и может измениться в любое время.

0 голосов
/ 20 февраля 2019

подключиться к базе данных администратора и запустить db.serverStatus ():

> var status = db.serverStatus()
> status.connections
  {"current" : 21, "available" : 15979}
> 
...