.. _pt-mongodb-query-digest:

==================================
:program:`pt-mongodb-query-digest`
==================================

``pt-mongodb-query-digest`` reports query usage statistics
by aggregating queries from MongoDB query profiler.

Usage
=====

.. code-block:: bash

   pt-mongodb-query-digest [OPTIONS]

It runs the following command::

 db.getSiblingDB("samples").system.profile.find({"op":{"$nin":["getmore", "delete"]}});

Then the results are grouped by fingerprint and namespace
(database.collection).
The fingerprint is calculated as a sorted list of keys in the document
with a maximum depth level of 10.
By default, the results are sorted by ascending query count.

Options
-------

``-?``, ``--help``
  Show help and exit

``-a``, ``--authenticationDatabase``
  Specifies the database used to establish credentials and privileges
  with a MongoDB server.
  By default, the ``admin`` database is used.

``-c``, ``--no-version-check``
  Don't check for updates

``-d``, ``--database``
  Specifies which database to profile

``-f``, ``--output-format``
  Specifies the report output format. Valid options are: ``text``, ``json``.
  The default value is ``text``.

``-l``, ``--log-level``
  Specifies the log level:
  ``panic``, ``fatal``, ``error``, ``warn``, ``info``, ``debug error``

``-n``, ``--limit``
  Limits the number of queries to show

``-o``, ``--order-by``
  Specifies the sorting order using fields:
  ``count``, ``ratio``, ``query-time``, ``docs-examined``, ``docs-returned``.

  Adding a hyphen (``-``) in front of a field denotes reverse order.
  For example: ``--order-by="count,-ratio"``.

``-p``, ``--password``
  Specifies the password to use when connecting to a server
  with authentication enabled.

  Do not add a space between the option and its value: ``-p<password>``.

  If you specify the option without any value,
  you will be prompted for the password.

``-s``, ``--skip-collections``
  Comma separated list of collections to skip.
 
  Collection ``system.profile`` is skipped by default.

  It is possible to use an empty list by setting ``--skip-collections=""``.

``--sslCAFile``
  Specifies SSL CA cert file used for authentication.

``--sslPEMKeyFile``
  Specifies SSL client PEM file used for authentication.

``-u``, ``--user``
  Specifies the user name for connecting to a server
  with authentication enabled.

``-v``, ``--version``
  Show version and exit

Output Example
==============

.. code-block:: none

   # Query 3:  0.06 QPS, ID 0b906bd86148def663d11b402f3e41fa
   # Ratio    1.00  (docs examined/returned)
   # Time range: 2017-02-03 16:01:37.484 -0300 ART to 2017-02-03 16:02:08.43 -0300 ART
   # Attribute            pct     total        min         max        avg         95%        stddev      median
   # ==================   ===   ========    ========    ========    ========    ========     =======    ========
   # Count (docs)                   100
   # Exec Time ms           2         3           0           1           0           0           0           0
   # Docs Examined          5      7.50K      75.00       75.00       75.00       75.00        0.00       75.00
   # Docs Returned         92      7.50K      75.00       75.00       75.00       75.00        0.00       75.00
   # Bytes recv             1    106.12M       1.06M       1.06M       1.06M       1.06M       0.00        1.06M
   # String:
   # Namespaces          samples.col1
   # Operation           query
   # Fingerprint         find,shardVersion
   # Query               {"find":"col1","shardVersion":[0,"000000000000000000000000"]}

Authors
=======

Carlos Salguero
