1 時間以内に mongo でのクエリが 1 行あたり 0.3 ミリ秒から 1 行あたり > 100 ミリ秒になったことを誓います。その時間内に ZERO データを mongo に追加しました。データベース、gem ファイル、Rails コントローラーには変更を加えていません。ビューの CSS の一部を変更しただけです。データベースと通信するものは何もありません。
出力例を次に示します。
MONGODB (121.1ms) creative_development['admins'].find({:_id=>BSON::ObjectId('518b762e89651a0389000013')}).limit(-1)
MONGODB (121.6ms) creative_development['$cmd'].find({"count"=>"customers", "query"=>{:merchant_id=>"518b762e89651a0389000013"}, "fields"=>nil}).limit(-1)
MONGODB (249.7ms) creative_development['customers'].find({:merchant_id=>"518b762e89651a0389000013"}).limit(40).sort([["first_name", "asc"]])
MONGODB (244.8ms) creative_development['customers'].find({:merchant_id=>"518b762e89651a0389000013"}).limit(40).sort([["first_name", "asc"]])
Rendered shared/_header.html.erb (0.2ms)
MONGODB (121.5ms) creative_development['companies'].find({:_id=>"0"}).limit(-1)
MONGODB (131.2ms) creative_development['jobs'].find({:customer_id=>BSON::ObjectId('51b7890a9727912430000022')})
MONGODB (122.1ms) creative_development['jobs'].find({:customer_id=>BSON::ObjectId('51b7890a9727912430000022')})
MONGODB (120.9ms) creative_development['companies'].find({:_id=>"0"}).limit(-1)
以前の様子は次のとおりです。
MONGODB (0.4ms) creative_development['customers'].find({:_id=>BSON::ObjectId('51ddf5969727913cf8000424')}).limit(-1)
MONGODB (0.4ms) creative_development['admins'].find({:_id=>BSON::ObjectId('51ddbd6b972791243d0000f1')}).limit(-1)
MONGODB (0.4ms) creative_development['jobtypes'].find({:_id=>BSON::ObjectId('51ddcff69727912dfe000001')}).limit(-1)
MONGODB (0.4ms) creative_development['jobpriorities'].find({:_id=>BSON::ObjectId('51a7d01289651a3b100000e5')}).limit(-1)
MONGODB (0.4ms) creative_development['customers'].find({:_id=>BSON::ObjectId('51e4a6c797279171bc000004')}).limit(-1)
MONGODB (0.5ms) creative_development['admins'].find({:_id=>BSON::ObjectId('51ddbd6b972791243d0000f1')}).limit(-1)
MONGODB (0.4ms) creative_development['jobtypes'].find({:_id=>BSON::ObjectId('519bff2e89651a32af000001')}).limit(-1)
MONGODB (0.4ms) creative_development['jobpriorities'].find({:_id=>BSON::ObjectId('51b782db972791212c0000e6')}).limit(-1)
MONGODB (0.4ms) creative_development['customers'].find({:_id=>BSON::ObjectId('51e7448997279123e6000001')}).limit(-1)
MONGODB (0.3ms) creative_development['admins'].find({:_id=>BSON::ObjectId('51ddbd6b972791243d0000f1')}).limit(-1)
MONGODB (0.3ms) creative_development['jobtypes'].find({:_id=>BSON::ObjectId('519bff1389651a32d800002b')}).limit(-1)
クエリ:
@all_customers = Customer.where(:merchant_id => session[:admin_id].to_s)
respond_to do |format|
format.html do # index.html.erb
@all_customers = @all_customers.sort([sort_column,sort_direction]).paginate(:per_page => 40, :page => params[:page])
end
ソート部分:
def sort_column
Customer.column_names.include?(params[:sort]) ? params[:sort] : "first_name"
end
def sort_direction
%w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
end
Heroku の同じページ、同じログイン、同じデータベース データを次に示します。
2013-07-28T03:59:31.829330+00:00 app[web.1]: Processing by CustomersController#index as HTML
2013-07-28T03:59:31.832789+00:00 app[web.1]: MONGODB (2.7ms) live-heroku['admins'].find({:_id=>BSON::ObjectId('51b0388697279164a4000001')}).limit(-1)
2013-07-28T03:59:31.839820+00:00 app[web.1]: MONGODB (4.5ms) live-heroku['$cmd'].find({"count"=>"customers", "query"=>{:merchant_id=>"518b762e89651a0389000013"}, "fields"=>nil}).limit(-1)
2013-07-28T03:59:31.896128+00:00 app[web.1]: MONGODB (55.7ms) live-heroku['customers'].find({:merchant_id=>"518b762e89651a0389000013"}).limit(40).sort([["first_name", "asc"]])
2013-07-28T03:59:31.951921+00:00 app[web.1]: MONGODB (13.8ms) live-heroku['customers'].find({:merchant_id=>"518b762e89651a0389000013"}).limit(40).sort([["first_name", "asc"]])
2013-07-28T03:59:32.126152+00:00 app[web.1]: MONGODB (7.7ms) live-heroku['admins'].find({:_id=>BSON::ObjectId('518b762e89651a0389000013')}).limit(-1)
2013-07-28T03:59:32.127529+00:00 app[web.1]: Rendered shared/_header.html.erb (9.7ms)
2013-07-28T03:59:32.146588+00:00 app[web.1]: MONGODB (14.2ms) live-heroku['companies'].find({:_id=>"0"}).limit(-1)
2013-07-28T03:59:32.151084+00:00 app[web.1]: MONGODB (2.4ms) live-heroku['jobs'].find({:customer_id=>BSON::ObjectId('51b7890a9727912430000022')})
2013-07-28T03:59:32.191671+00:00 app[web.1]: MONGODB (2.4ms) live-heroku['jobs'].find({:customer_id=>BSON::ObjectId('51b7890a9727912430000022')})
2013-07-28T03:59:32.233914+00:00 app[web.1]: MONGODB (9.8ms) live-heroku['companies'].find({:_id=>"0"}).limit(-1)
2013-07-28T03:59:32.238298+00:00 app[web.1]: MONGODB (2.2ms) live-heroku['jobs'].find({:customer_id=>BSON::ObjectId('51b78a4e97279123fd000255')})
Heroku は Mongo Lab インスタンスからプルしています。
私のローカル環境:
今年の MacBook Air (Haswell CPU、i5) と 2012 年頃の Mac Mini。
これらの環境の両方で、Mongo のパフォーマンスはローカルで 0.2 ~ 0.5 ミリ秒でした。そして突然、データベースの変更も、gem のアップグレードも、Rails アプリのコントローラーやモデルの変更もまったく行われなかったので、彼らはびっくりしました。
私が想像できることが 1 つあります。過去数日以内に、両方で醸造の更新を行いました。ただし、どちらの場合も、brew の更新直後にパフォーマンスが低下することはありませんでした。私は脳内で「タイムスタンプ」を付けませんでしたが、醸造の更新とスローダウンの間には大きな間隔 (時間) がありました。Airの場合は数日でした。正確には覚えていないMac Mini。
モンゴが突然このようにびっくりする理由について、何か考えがある人はいますか?