Percona PMM – A beginner’s guide

Imagine having a tool that can automatically detect JPA and Hibernate performance issues. Wouldn’t that be just awesome?

Well, Hypersistence Optimizer is that tool! And it works with Spring Boot, Spring Framework, Jakarta EE, Java EE, Quarkus, or Play Framework.

So, enjoy spending your time on the things you love rather than fixing performance issues in your production system on a Saturday night!

Introduction

This article is a beginner’s guide for the Percona Monitoring and Management (PMM), a tool that’s very handy when it comes to analyzing a given database system.

PMM was released in 2016, and initially, it was available for MySQL. However, since 2018, it supports monitoring PostgreSQL as well, so once you learn it you can use it with the two most popular open-source relational database systems.

What is PMM

PMM is an open-source tool, written in Go and hosted on GitHub, that allows you to monitor a relational database system via a pmm-client that sends the database usage metrics to a pmm-server that aggregates all the data and provides it to you via a Grafana dashboard UI.

You can use PMM to monitor the resource usage of a given database system, like CPU, RAM, Network, or Disk IO, and you can also analyze queries and spot slow-running queries or queries that are fast but which are executed more than necessary, like N+1 query issues.

How to install PMM

The easiest way to install PMM is to use Docker since the image is hosted on Docker Hub.

The first thing we need to do is pull the Docker image using the following command:

docker pull percona/pmm-server:2

Now, you need to create a pmm-data persistent storage that is required to be mounted to the /srv path.

docker create --volume /srv --name pmm-data percona/pmm-server:2 /bin/true

The next step is to create the PMM Docker container.

If you are using Windows, you can run the following command:

docker run --detach --restart always ^
--name pmm-server ^
--publish 9090:80 ^
--volumes-from pmm-data ^
percona/pmm-server:2

For a Unix-based system, use \ instead of ^ for the new-line separator, like this:

docker run --detach --restart always \
--name pmm-server \
--publish 9090:80 \
--volumes-from pmm-data \
percona/pmm-server:2

The publish attribute allows us to map port 80 in the PMM docker container to port 9090 on the host OS.

The volumes-from attribute allows us to reference the pmm-data volume we created earlier.

To validate that the container was created, run a docker ps -a command, and you should see something like this:

> docker ps -a

NAMES       IMAGE                   COMMAND                 PORTS                  
            
pmm-server  percona/pmm-server:2    /opt/entrypoint.sh      0.0.0.0:9090 -ᐳ 80/tcp
pmm-data    percona/pmm-server:2    /bin/true

If you open the browser and load the localhost:9090 URL address, you should see something like this:

Percona PMM Grafana

How to monitor a PostgreSQL or MySQL database using PMM

To monitor a new database, go to the Search button on the left-side menu and search for Add instance, as illustrated by the following diagram:

Percona PMM add new DB instance

After you click the PMM Add Instance icon and choose the DB type, you want to monitor.

For a remote MySQL database (even one installed on the host OS), choose the Adding a Remote MySQL Instance option and add the DB credentials as illustrated by the following diagram:

Percona PMM Add MySQL

For a remote PostgreSQL database (even one installed on the host OS), choose the Adding a Remote PostgreSQL Instance option and add the DB credentials as illustrated by the following diagram:

Monitoring a database using PMM

Once you added the database you are interested in monitoring, you can inspect the queries that are executed and see which ones take the longest or are executed the most per second.

Percona PMM Query Analysis

Cool, right?

I'm running an online workshop on the 20-21 and 23-24 of November about High-Performance Java Persistence.

If you enjoyed this article, I bet you are going to love my Book and Video Courses as well.

Conclusion

The Percona PMM tool is very handy when it comes to monitoring a PostgreSQL or MySQL database and analyzing the underlying SQL queries that get executed.

And, because it’s available on Docker Hub, you can easily install it on your machine or a given application performance monitoring server.

Transactions and Concurrency Control eBook

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.