Documentation

Query system data

InfluxDB Clustered stores data related to queries, tables, partitions, and compaction in system tables within your cluster. System tables contain time series data used by and generated from the InfluxDB Clustered internal monitoring system. You can query the cluster system tables for information about your cluster.

May impact cluster performance

Querying InfluxDB v3 system tables may impact write and query performance of your InfluxDB cluster. Use filters to optimize queries to reduce impact to your cluster.

System tables are subject to change

System tables are not part of InfluxDB’s stable API and may change with new releases. The provided schema information and query examples are valid as of September 18, 2024. If you detect a schema change or a non-functioning query example, please submit an issue.

Query system tables

Querying system tables with influxctl requires influxctl v2.8.0 or newer.

Use the influxctl query command and SQL to query system tables. Provide the following:

  • Enable system tables with the --enable-system-tables command flag.

  • Database token: A database token with read permissions on the specified database. Uses the token setting from the influxctl connection profile or the --token command flag.

  • Database name: The name of the database to query information about. Uses the database setting from the influxctl connection profile or the --database command flag.

  • SQL query: The SQL query to execute.

    Pass the query in one of the following ways:

    • a string on the command line
    • a path to a file that contains the query
    • a single dash (-) to read the query from stdin
influxctl query \
  --enable-system-tables \
  --database 
DATABASE_NAME
\
--token
DATABASE_TOKEN
\
"
SQL_QUERY
"
influxctl query \
  --enable-system-tables \
  --database 
DATABASE_NAME
\
--token
DATABASE_TOKEN
\
/path/to/query.sql
cat ./query.sql | influxctl query \
  --enable-system-tables \
  --database 
DATABASE_NAME
\
--token
DATABASE_TOKEN
\
-

Replace the following:

  • DATABASE_TOKEN: A database token with read access to the specified database
  • DATABASE_NAME: The name of the database to query information about.
  • SQL_QUERY: The SQL query to execute. For examples, see System query examples.

When prompted, enter y to acknowledge the potential impact querying system tables may have on your cluster.

Optimize queries to reduce impact to your cluster

Querying InfluxDB v3 system tables may impact the performance of your InfluxDB cluster. As you write data to a cluster, the number of partitions and Parquet files can increase to a point that impacts system table performance. Queries that took milliseconds with fewer files and partitions might take 10 seconds or longer as files and partitions increase.

Use the following filters to optimize your system table queries and reduce the impact on your cluster’s performance.

In your queries, replace the following:

  • TABLE_NAME: the table to retrieve partitions for
  • PARTITION_ID: a partition ID (int64)
  • PARTITION_KEY: a partition key derived from the table’s partition template. The default format is %Y-%m-%d (for example, 2024-01-01).
Filter by table name

When querying the system.tables, system.partitions, or system.compactor tables, use the WHERE clause to filter by table_name .

SELECT * FROM system.partitions WHERE table_name = '
TABLE_NAME
'
Filter by partition key

When querying the system.partitions or system.compactor tables, use the WHERE clause to filter by partition_key.

SELECT * FROM system.partitions WHERE partition_key = '
PARTITION_KEY
'

To further improve performance, use AND to pair partition_key with table_name–for example:

SELECT * 
FROM system.partitions 
WHERE
  table_name = '
TABLE_NAME
'
AND partition_key = '
PARTITION_KEY
'
;
SELECT * 
FROM system.compactor
WHERE
  table_name = '
TABLE_NAME
'
AND partition_key = '
PARTITION_KEY
'
;
Filter by partition ID

When querying the system.partitions or system.compactor table, use the WHERE clause to filter by partition_id .

SELECT * FROM system.partitions WHERE partition_id = 
PARTITION_ID

For the most optimized approach, use AND to pair partition_id with table_name–for example:

SELECT * 
FROM system.partitions 
WHERE
  table_name = '
TABLE_NAME
'
AND partition_id =
PARTITION_ID
;

Although you don’t need to pair partition_id with table_name (because a partition ID is unique within a cluster), it’s the most optimized approach, especially when you have many tables in a database.

Retrieve a partition ID

To retrieve a partition ID, query system.partitions for a table_name and partition_key pair–for example:

SELECT
  table_name,
  partition_key,
  partition_id 
FROM system.partitions
WHERE
  table_name = '
TABLE_NAME
'
AND partition_key = '
PARTITION_KEY
'
;

The result contains the partition_id:

table_name partition_key partition_id
weather 43 | 2020-05-27 1362
Combine filters for performance improvement

Use the AND, OR, or IN keywords to combine filters in your query.

  • Use OR or IN conditions when filtering for different values in the same column–for example:

    WHERE partition_id = 1 OR partition_id = 2
    

    Use IN to make multiple OR conditions more readable–for example:

    WHERE table_name IN ('foo', 'bar', 'baz')
    
  • Avoid mixing different columns in OR conditions, as this won’t improve performance–for example:

    WHERE table_name = 'foo' OR partition_id = 2  -- This will not improve performance
    

System tables

System tables are subject to change.

Understanding system table data distribution

Data in system.tables, system.partitions, and system.compactor includes data for all InfluxDB Queriers in your cluster. The data comes from the catalog, and because all the queriers share one catalog, the results from these three tables derive from the same source data, regardless of which querier you connect to.

However, the system.queries table is different–data is local to each Querier. system.queries contains a non-persisted log of queries run against the current querier to which your query is routed. The query log is specific to the current Querier and isn’t shared across queriers in your cluster. Logs are scoped to the specified database.

system.queries

The system.queries table stores log entries for queries executed for the provided namespace (database) on the node that is currently handling queries. system.queries reflects a process-local, in-memory, namespace-scoped query log.

While this table may be useful for debugging and monitoring queries, keep the following in mind:

  • Records stored in system.queries are transient and volatile
    • InfluxDB deletes system.queries records during pod restarts.
    • Queries for one namespace can evict records from another namespace.
  • Data reflects the state of a specific pod answering queries for the namespace.
    • Data isn’t shared across queriers in your cluster.
    • A query for records in system.queries can return different results depending on the pod the request was routed to.

View system.queries schema

When listing measurements (tables) available within a namespace, some clients and query tools may include the queries table in the list of namespace tables.

system.tables

The system.tables table contains information about tables in the specified database.

View system.tables schema

system.partitions

The system.partitions table contains information about partitions associated with the specified database.

View system.partitions schema

system.compactor

The system.compactor table contains information about compacted partition Parquet files associated with the specified database.

View system.compactor schema

System query examples

May impact cluster performance

Querying InfluxDB v3 system tables may impact write and query performance of your InfluxDB cluster.

The examples in this section include WHERE filters to optimize queries and reduce impact to your cluster.

In the examples below, replace TABLE_NAME with the name of the table you want to query information about.


Query logs

View all stored query logs

SELECT * FROM system.queries

View query logs for queries with end-to-end durations above a threshold

The following returns query logs for queries with an end-to-end duration greater than 50 milliseconds.

SELECT *
FROM
  system.queries
WHERE
  end2end_duration::BIGINT > (50 * 1000000)

View query logs for a specific query within a time interval

SELECT *
FROM system.queries
WHERE issue_time >= now() - INTERVAL '1 day'
  AND query_text LIKE '%select * from home%'
from influxdb_client_3 import InfluxDBClient3
client = InfluxDBClient3(token = DATABASE_TOKEN,
                          host = HOSTNAME,
                          org = '',
                          database=DATABASE_NAME)
client.query('select * from home')
reader = client.query('''
                      SELECT *
                      FROM system.queries
                      WHERE issue_time >= now() - INTERVAL '1 day'
                      AND query_text LIKE '%select * from home%'
                      ''',
                    language='sql',
                    headers=[(b"iox-debug", b"true")],
                    mode="reader")

Partitions

View the partition template of a specific table

SELECT *
FROM
  system.tables
WHERE
  table_name = '
TABLE_NAME
'

View all partitions for a table

SELECT *
FROM
  system.partitions
WHERE
  table_name = '
TABLE_NAME
'

View the number of partitions per table

SELECT
  table_name,
  COUNT(*) AS partition_count
FROM
  system.partitions
WHERE
  table_name IN ('foo', 'bar', 'baz')
GROUP BY
  table_name

View the number of partitions for a specific table

SELECT
  COUNT(*) AS partition_count
FROM
  system.partitions
WHERE
  table_name = '
TABLE_NAME
'

Storage usage

View the size in megabytes of a specific table

SELECT
  SUM(total_size_mb) AS total_size_mb
FROM
  system.partitions
WHERE
  table_name = '
TABLE_NAME
'

View the size in megabytes per table

SELECT
  table_name,
  SUM(total_size_mb) AS total_size_mb
FROM
  system.partitions
WHERE
  table_name IN ('foo', 'bar', 'baz')
GROUP BY
  table_name

View the total size in bytes of compacted partitions per table

SELECT
  table_name,
  SUM(total_l0_bytes) + SUM(total_l1_bytes) + SUM(total_l2_bytes) AS total_bytes
FROM
  system.compactor
WHERE
  table_name IN ('foo', 'bar', 'baz')
GROUP BY
  table_name

View the total size in bytes of compacted partitions for a specific table

SELECT
  SUM(total_l0_bytes) + SUM(total_l1_bytes) + SUM(total_l2_bytes) AS total_bytes
FROM
  system.compactor
WHERE
  table_name = '
TABLE_NAME
'

Compaction

View compaction totals for each table

SELECT
  table_name,
  SUM(total_l0_files) AS total_l0_files,
  SUM(total_l1_files) AS total_l1_files,
  SUM(total_l2_files) AS total_l2_files,
  SUM(total_l0_bytes) AS total_l0_bytes,
  SUM(total_l1_bytes) AS total_l1_bytes,
  SUM(total_l2_bytes) AS total_l2_bytes
FROM
  system.compactor
WHERE
  table_name IN ('foo', 'bar', 'baz')
GROUP BY
  table_name

View compaction totals for a specific table

SELECT
  SUM(total_l0_files) AS total_l0_files,
  SUM(total_l1_files) AS total_l1_files,
  SUM(total_l2_files) AS total_l2_files,
  SUM(total_l0_bytes) AS total_l0_bytes,
  SUM(total_l1_bytes) AS total_l1_bytes,
  SUM(total_l2_bytes) AS total_l2_bytes
FROM
  system.compactor
WHERE
  table_name = '
TABLE_NAME
'

Was this page helpful?

Thank you for your feedback!


The future of Flux

Flux is going into maintenance mode. You can continue using it as you currently are without any changes to your code.

Read more

InfluxDB v3 enhancements and InfluxDB Clustered is now generally available

New capabilities, including faster query performance and management tooling advance the InfluxDB v3 product line. InfluxDB Clustered is now generally available.

InfluxDB v3 performance and features

The InfluxDB v3 product line has seen significant enhancements in query performance and has made new management tooling available. These enhancements include an operational dashboard to monitor the health of your InfluxDB cluster, single sign-on (SSO) support in InfluxDB Cloud Dedicated, and new management APIs for tokens and databases.

Learn about the new v3 enhancements


InfluxDB Clustered general availability

InfluxDB Clustered is now generally available and gives you the power of InfluxDB v3 in your self-managed stack.

Talk to us about InfluxDB Clustered