2011-11-23 68 views
0

我不知道是否是一個正常的行爲,有幾個光標關閉和幾個查詢['system.namespaces']每頁請求與mongoid ?很多光標丟失/關閉和請求與'system.namespaces'與mongoid

是我所得到的樣本:

Started GET "/index.html" for 127.0.0.1 at 2011-11-23 12:06:55 +0100 
MONGODB ugs['system.namespaces'].find({}) 
...a request to MongoDB via Mongoid... 
Processing by Websites::PagesController#index as */* 
MONGODB ugs['system.namespaces'].find({}) 
MONGODB [DEBUG] Cursor#close 4936656287055121097 
...a request to MongoDB via Mongoid... 
MONGODB ugs['system.namespaces'].find({}) 
...a request to MongoDB via Mongoid...  
MONGODB [DEBUG] Cursor#close 6165957166476725254 
...a request to MongoDB via Mongoid... 
MONGODB [DEBUG] Cursor#close 6639712559104429118 
...a request to MongoDB via Mongoid... 
MONGODB [DEBUG] Cursor#close 6639712559104429118 
...a request to MongoDB via Mongoid... 
MONGODB [DEBUG] Cursor#close 4128671431420447906 
Completed 200 OK in 694ms (Views: 693.8ms) 

似乎削減性能下降,任何想法,以避免這種情況?

使用:Rails 3.1.2,Ruby 1.9.2,Mongoid 2.3.3,Mongo 1.4.0和MongoDB 2.0.1。

Mongoid.yml:

development: 
    host: xx.xx.xx.xx (distant) 
    username: xx 
    password: xx 
    database: xx 
    max_retries_on_connection_failure: 5 
    identity_map_enabled: true 

回答

2

它看起來正常的mongoid。

這也可能是因爲連接池。一些MongoDB驅動程序使用連接池來使併發請求成爲可能。

有對here

一些信息,但沒有看到你的代碼,我不知道,也可能是你已經設置了查詢的方式。

讓我們來看看文檔的Ruby驅動程序:

驅動程序實現連接池。默認情況下,只有一個套接字連接將被打開到MongoDB。但是,如果您正在運行多線程應用程序,則可以指定最大池大小和最大超時時間,以等待將舊連接釋放到池中。

要設置一個池連接到單個MongoDB實例:

@conn = Connection.new( 「本地主機」,27017,:pool_size => 5,:超時=> 5) 雖然池結構爲無疑會發展,它目前在ActiveRecord和PyMongo中的連接池實現方面有很多功勞。

好的,所以默認只有一個連接應該打開。我不知道mongoid是否會改變這個設置來提高性能。也許我們可以看看你的一些代碼?希望這個信息有幫助。