Re: mongodb takes long pauses / breaks during bulk upserts

From: Gerold Böhler <domainloop@xxxxxxxxx>
To: mongodb-user <mongodb-user@xxxxxxxxxxxxxxxx>
Date: Sat, 7 May 2016 03:19:12 -0700 (PDT)
Why ads?
Hi Kevin,

thanks for the reply! I think i provided everything you asked except for 
the logs, i have to wait until the problem happens again to send you those. 
Everything else should be attached though.

Thanks for looking into this,
Gerold

Am Donnerstag, 5. Mai 2016 04:12:47 UTC+2 schrieb Kevin Adistambha:

Hi Gerold,

i am doing bulk upserts to a sharded cluster with bulks of 1000. 
Everything seems to work fine, except that in the middle of the script it 
suddenly pauses - sometimes just minutes, sometimes half an hour - and then 
proceeds normally.

Could you provide more information:

   - What do the logs show during this pause period? (i.e. mongod or 
   mongos logs), and what is the exact command you are executing?

I am using cloud manager to manage my setup, i have 3 virtual hosts (s25, 
s26, s27) and everything runs on my own hardware. Basically i have 3 
collections:

   - landingpages
   - products
   - default

The "landingpages" collection is a sharded collection with 2 mongos and 
they run on s26 and s27. "products" and "default" are regular collections 
where both replica sets run on s25. In my import script i do bulk upserts 
on the products collection as well as on the landingpages collection. And 
since i noticed that s25 is starting to swap after a while and the cpu is 
also busy, i assume the problems are the upserts on the products 
collection. Also i have attached screenshots of my cloud manager setup.

So if i send you the output of mongodb.log for the primary of that replica 
set, is that ok or do you need the logs for the secondaries as well? 
 


   - Please provide the output of sh.status() (to see your shard key, and 
   chunks distribution)

 --- Sharding Status --- 
  sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("56b9da368b5c94d1f64438e2")
}
  shards:
{  "_id" : "shard_0",  "host" : 
"shard_0/s26.xxx:27000,s26.xxx:27001,s27.xxx:27000" }
{  "_id" : "shard_1",  "host" : 
"shard_1/s26.xxx:27002,s27.xxx:27001,s27.xxx:27002" }
  active mongoses:
"3.2.6" : 2
  balancer:
Currently enabled:  yes
Currently running:  no
Failed balancer rounds in last 5 attempts:  1
Last reported error:  could not get updated shard list from config server 
due to interrupted at shutdown
Time of Reported error:  Thu May 05 2016 22:00:46 GMT+0200 (CEST)
Migration Results for the last 24 hours: 
No recent migrations
  databases:
{  "_id" : "xxx_production",  "primary" : "shard_0",  "partitioned" : true }
xxx_production.landingpages
shard key: { "filter_hash" : "hashed" }
unique: false
balancing: true
chunks:
shard_0 16
shard_1 16
too many chunks to print, use verbose if you want to force print


   - What is your MongoDB server version, and client driver version, if 
   applicable

Right now i use 3.2.6. On the client side, i use mongoid 5.1.3.


   - What is your configured storage engine and its options

WiredTiger with default options (I couldn't find out how to get the 
options from the mongo shell). The only thing i changed was cacheSizeGb to 
1GB for "default" and "products" because s25 used to run out of memory. 


   - What is your O/S and the filesystem that contains the /data/db 
   directory

All Servers are running "Linux s25 3.16.0-4-amd64 #1 SMP Debian 
3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux" on XFS 


   - What is your deployment topology (i.e. how many shards, do the 
   shards consist of a replica set each, how many config servers, how many 
   mongos, etc.)

See answer above

Also, can you share a code snippet that performs the bulk operation, along 
with any write concern for the operation?

I'm not sure if that makes sense because i build up an array which i do 
upsert then via the mongoid / ruby driver, i don't think you will get much 
out of this. 

I tried profiling for long running methods but nothing showed up. I also 
looked at the server stats and it seems that the server is doing some cpu 
work, but no io.

A couple of questions:

   - How and on which server did you turn on the profiler?


   - On which server and using what command did you run the server stats? 
   Could you show us some example output?

Well i just looked at db.currentOp() but there was nothing that was 
looking strange to me. Also i did look at iostat output and there was 
nothing going on as well. I did all of this on all hosts. 


   
So basically everything runs smoothly on the beginning but during a couple 
of days, s25 starts to use more and more memory. At the same time, the 
upserting takes longer and longer pauses. After a couple of days, the 
server starts to swap and i just stop the process that upserts documents 
and memory usage goes back to normal and the swap is freed. Then i start 
the import process again and the same thing happens all over again :-)

Best regards,
Kevin

Regards,
Gerold




-- 
You received this message because you are subscribed to the Google Groups "mongodb-user"
group.

For other MongoDB technical support options, see: https://docs.mongodb.org/manual/support/
--- 
You received this message because you are subscribed to the Google Groups "mongodb-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mongodb-user+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to mongodb-user@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/mongodb-user.
To view this discussion on the web visit https://groups.google.com/d/msgid/mongodb-user/d0478c81-e881-441f-8c26-40f1917660af%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Why ads?