Real-Time MongoDB Performance Tracking: Harnessing the Power of mongotop

Rohit Kumar
4 min readSep 11, 2024

--

MongoDB is known for its scalability and flexibility, but like any database, it can encounter performance issues. Monitoring MongoDB in real-time helps ensure optimal performance, and one such tool in MongoDB’s arsenal is mongotop. This command-line tool allows administrators to track how much time MongoDB spends reading and writing data, giving insight into where database operations may be lagging.

In this guide, we’ll dive deep into what mongotop is, how it works, and how to use it effectively for MongoDB performance monitoring.

What is mongotop?

mongotop is a built-in utility that tracks read and write activity on a MongoDB instance at the collection level. It provides statistics on the time MongoDB spends on read/write operations, allowing users to identify collections that consume the most database resources.

The output from mongotop includes:

  • Namespace: Database and collection name (db.collection).
  • Insert: Time spent writing new data.
  • Query: Time spent on read operations.
  • Update: Time spent updating existing records.
  • Delete: Time spent on deletion.
  • GetMore: Time spent retrieving additional data (used when dealing with cursors).
  • Command: Time spent executing commands such as aggregations and other administrative tasks.

mongotop can be used on a standalone MongoDB instance or with replica sets and sharded clusters.

Installing mongotop

If you have MongoDB installed on your system, you likely already have access to mongotop. However, you can ensure its presence with the MongoDB tools package:

For Ubuntu:

sudo apt-get install mongodb-org-tools

For macOS:

brew install mongodb/brew/mongodb-database-tools

Once installed, you can invoke mongotop using:

mongotop

Basic Usage of mongotop

By default, running mongotop will connect to the local MongoDB instance at localhost:27017 and display a report every second:

mongotop

This will give you an output like:

ns                        insert  query update delete getmore command
exampleDB.exampleColl 0ms 1ms 0ms 0ms 0ms 5ms
admin.system.version 0ms 0ms 0ms 0ms 0ms 1ms

Here’s a breakdown of the most commonly used options:

  • h: Specifies the host to connect to. Example: mongotop -h 192.168.1.100.
  • u and p: Authentication credentials if the MongoDB instance requires it.
  • -authenticationDatabase: To specify a custom authentication database.
  • -json: Outputs the report in JSON format, which is useful for automated log parsing and integration with monitoring systems.

Understanding the Output

Each line in the mongotop output corresponds to a collection, and the metrics show how much time MongoDB spent in the last reporting interval (usually one second) performing different types of operations on that collection.

For example, if you see something like this:

ns                           insert  query update delete getmore command
exampleDB.users 5ms 15ms 10ms 0ms 0ms 2ms
exampleDB.orders 20ms 2ms 0ms 0ms 5ms 1ms

This indicates that over the last second:

  • exampleDB.users collection: MongoDB spent 5ms on insert operations, 15ms on queries, and 10ms on updates.
  • exampleDB.orders collection: MongoDB spent 20ms on inserts and 5ms on fetching more data (getmore operations).

High numbers in any particular column can indicate where the most resources are being spent. For example, if you observe consistently high query times for a specific collection, it might indicate the need to optimize indexes or queries in that collection.

Monitoring Remote MongoDB Instances

To monitor a remote MongoDB instance, specify the host and port. For example:

mongotop --host <remote_host>:<port>

If authentication is required, you can use:

mongotop --host <remote_host>:<port> -u <username> -p <password> --authenticationDatabase <admin>

This allows you to monitor MongoDB clusters that are running in the cloud or other remote environments.

Automating and Saving Logs

If you want to keep track of MongoDB activity over a longer period and save the results for further analysis, you can log the output of mongotop to a file:

mongotop --json > mongotop_output.json

This captures the output in JSON format, which can later be parsed using tools like jq or other log analysis utilities. You can also combine mongotop with a cron job to automate regular performance monitoring.

Use Case: Spotting Performance Bottlenecks

Let’s say your application is experiencing slow performance, and you suspect it’s due to MongoDB operations. You can run mongotop to check which collections are causing high read/write activity.

  1. Run mongotop to get a real-time view of database operations:
  2. Identify collections with unusually high query times. For example, if you see a particular collection with a query time consistently over 100ms, it may indicate:
  • Lack of proper indexes on that collection.
  • Inefficient query design.
  • Overloaded MongoDB instance.

3. Use this information to optimize your MongoDB queries. This might involve:

  • Adding or modifying indexes on the collection.
  • Changing how data is retrieved (e.g., limiting result sets or improving query filters).
  • Increasing MongoDB resources (e.g., CPU, memory) if the instance is under heavy load.

Integrating mongotop with Monitoring Systems

For large-scale applications, integrating mongotop with monitoring tools can provide more sophisticated alerting and visualization. By capturing mongotop outputs in JSON, you can feed the data into the monitoring systems to create dashboards and trigger alerts, that show MongoDB’s read/write performance over time.

Best Practices for Using mongotop

  • Run at off-peak times: To minimize overhead and ensure accurate statistics, run mongotop during off-peak times or specific intervals when you're troubleshooting performance.
  • Monitor over time: Performance bottlenecks are often not instantaneous. Monitoring MongoDB activity over time helps identify trends and recurring issues.
  • Combine with other tools: mongotop works best when used alongside other MongoDB performance monitoring tools like mongostat and the MongoDB profiler.

Conclusion

mongotop is an indispensable tool for MongoDB administrators who need real-time insight into database performance. By understanding how your database spends time on read and write operations, you can quickly diagnose performance issues and take corrective actions. Whether you're managing a single instance or a sharded cluster, mongotop can provide valuable metrics that lead to better database optimization.

By regularly monitoring your MongoDB instance using mongotop, you can keep your database running efficiently and ensure that your application remains responsive under load.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response