Optimizing MongoDB
Workflows
Applying parameters
#!/bin/sh
cd "$(dirname "$0")" || exit
CACHESIZE=${mongo.mongodb_cache_size}
SYNCDELAY=${mongo.mongodb_syncdelay}
EVICTION_DIRTY_TRIGGER=${mongo.mongodb_eviction_dirty_trigger}
EVICTION_DIRTY_TARGET=${mongo.mongodb_eviction_dirty_target}
EVICTION_THREADS_MIN=${mongo.mongodb_eviction_threads_min}
EVICTION_THREADS_MAX=${mongo.mongodb_eviction_threads_max}
EVICTION_TRIGGER=${mongo.mongodb_eviction_trigger}
EVICTION_TARGET=${mongo.mongodb_eviction_target}
USE_NOATIME=${mongo.mongodb_datafs_use_noatime}
# Here we have to remount the disk mongodb uses for data, to take advantage of the USE_NOATIME parameter
sudo service mongod stop
sudo umount /mnt/mongodb
if [ "$USE_NOATIME" = true ]; then
sudo mount /dev/nvme0n1 /mnt/mongodb -o noatime
else
sudo mount /dev/nvme0n1 /mnt/mongodb
fi
sudo service mongod start
# flush logs
echo -n | sudo tee /mnt/mongodb/log/mongod.log
sudo service mongod restart
until grep -q "waiting for connections on port 27017" /mnt/mongodb/log/mongod.log
do
echo "waiting MongoDB..."
sleep 60
done
sleep 5
sudo service prometheus-mongodb-exporter restart
# set knobs
mongo --quiet --eval "db.adminCommand({setParameter:1, 'wiredTigerEngineRuntimeConfig': 'cache_size=${CACHESIZE}m, eviction=(threads_min=$EVICTION_THREADS_MIN,threads_max=$EVICTION_THREADS_MAX), eviction_dirty_trigger=$EVICTION_DIRTY_TRIGGER, eviction_dirty_target=$EVICTION_DIRTY_TARGET', eviction_trigger=$EVICTION_TRIGGER, eviction_target=$EVICTION_TARGET})"
mongo --quiet --eval "db = db.getSiblingDB('admin'); db.runCommand({ setParameter : 1, syncdelay: $SYNCDELAY})"
sleep 3A typical workflow
Telemetry providers
Examples
Last updated
Was this helpful?