Advanced Configuration for MySQL Database Monitoring

Truncating events_statements_summary_by_digest

Certain workloads require some maintenance on tables in performance_schema. Query statistics are aggregated in the performance_schema.events_statements_summary_by_digest table, which has a limit on the number of rows. This limit is specified by the performance_schema_digests_size system variable. If the table is full, new query digests are tracked in a catch-all row with null schema and null query digest, preventing the Agent from distinguishing between queries that make up that row.

To prevent this loss of accurate per-query metrics, periodically truncate this table as a maintenance step so that all new queries can be collected:

TRUNCATE performance_schema.events_statements_summary_by_digest;

To determine the frequency of truncation, run the query below to determine the number of statements sent to this catch-all row per second. A value greater than zero means the table is full and should be truncated.

SHOW STATUS LIKE 'Performance_schema_digest_lost';

Handling many identical tables

Partitioning your database across tables, such that table definitions are identical except for the name, can result in a large number or normalized queries:

SELECT * FROM daily_aggregates_001
SELECT * FROM daily_aggregates_002
SELECT * FROM daily_aggregates_003

In these cases, track these queries as a single normalized query using the replace_digits option, so all metrics for those queries are rolled up into a single query:

SELECT * FROM daily_aggregates_?

Add the replace_digits option to your database instance configuration in the Datadog Agent:

init_config:

instances:
  - dbm: true
    ...
    replace_digits: true

Raising the sampling rate

If you have queries that are relatively infrequent or execute quickly, raise the sampling rate by lowering the collection_interval value to collect samples more frequently.

Set the collection_interval in your database instance configuration of the Datadog Agent. The default value is 1. Lower the value to a smaller interval:

instances:
  - dbm: true
    ...
    query_samples:
        collection_interval: 0.1