Skip to main content
Interania

Performance metrics reference

0votes
22updates
63views

Use the performance metric columns in queries to measure the performance of your Interana system.

Performance metric event name

For a given query, all performance metrics are compiled into a single aggregate event called log_query_perf. To analyze system performance in Interana, start the filter event_name is one of log_query_perf,  then use any of the performance metrics described in this topic. 

image.png

Performance metric naming syntax

The performance metrics are named in the format that includes some or all of the following:

perf.[measure]/[tag].[category].[object or named expression].[event].[type]

  • perf: All performance metrics begin with this prefix 
  • measure: A query measurement (bytes, cpu_ns, num)
  • tag: A description of the query
  • category: The high-level category of what is being measured or described
  • object or named expression (optional): The specific Interana object or named expression that is the focus of the measurements 
  • event (optional): An action associated with the object or named expression
  • type (optional): A specific type of action associated with the event

Performance metrics

These metrics are added to all Interana instances with the 2.24.2/2.24.3 releases. 

Metric Description
perf.wall_ns.api Amount of wall clock time spent in total for the query (formerly known as elapsed time). This includes all backend and frontend processes. 
perf.cpu_ns.readserver Total amount of CPU time (in nanoseconds) spent on the Read server. This includes the value of perf.cpu_ns.engines.
perf.cpu_ns.mergeserver Time spent on the merge server process
perf.bytes.disk.readserver Bytes read from disk while performing a query on the read servers
perf.bytes.memory.data_leaf The peak amount of RAM used in the query process
perf.wall_ns.data_leaf The amount of time, in nanoseconds, in real-world time used in the query process
perf.wall_ns.data.merge The amount of time, in nanoseconds, in real-world time used in the data merge portion of the query process
perf.cpu_ns.engines

Total amount of CPU time (in nanoseconds), including different parts of the Read server (for example, named expressions)

This includes all of the perf.cpu_ns.engines.* columns

perf.cpu_ns.engines.cohort Total amount of CPU time (in nanoseconds) spend calculating everything related to cohort computation in queries
perf.cpu_ns.engines.cohort.load_column This column and the columns based on load_column separate the cohort measurements into distinct processes.
perf.cpu_ns.engines.cohort.load_column.cohort  
perf.cpu_ns.engines.cohort.load_column.derived  
perf.cpu_ns.engines.cohort.load_column.event  
perf.cpu_ns.engines.cohort.load_column.flow  
perf.cpu_ns.engines.cohort.load_column.funnel  
perf.cpu_ns.engines.cohort.load_column.join_table  
perf.cpu_ns.engines.cohort.load_column.session  
perf.cpu_ns.engines.funnel Total amount of CPU time (in nanoseconds) spend calculating everything related to funnel computation in queries
perf.cpu_ns.engines.funnel.load_column This column and the columns based on load_column separate the funnel measurements into distinct processes.
perf.cpu_ns.engines.funnel.load_column.cohort  
perf.cpu_ns.engines.funnel.load_column.derived  
perf.cpu_ns.engines.funnel.load_column.event  
perf.cpu_ns.engines.funnel.load_column.flow  
perf.cpu_ns.engines.funnel.load_column.funnel  
perf.cpu_ns.engines.funnel.load_column.join_table  
perf.cpu_ns.engines.funnel.load_column.session  
perf.cpu_ns.engines.samples Total amount of CPU time (in nanoseconds) spend calculating spent calculating Sample view queries
perf.cpu_ns.engines.samples.load_column This column and the columns based on load_column separate the Sample view measurements into distinct processes.
perf.cpu_ns.engines.samples.load_column.cohort  
perf.cpu_ns.engines.samples.load_column.derived  
perf.cpu_ns.engines.samples.load_column.event  
perf.cpu_ns.engines.samples.load_column.flow  
perf.cpu_ns.engines.samples.load_column.funnel  
perf.cpu_ns.engines.samples.load_column.join_table  
perf.cpu_ns.engines.samples.load_column.session  
perf.cpu_ns.engines.scan CPU time spent performing a top-level scan (not counting time spent calculating named expressions)
perf.cpu_ns.engines.scan.load_column This column and the columns based on load_column separate the query scan measurements into distinct processes.
perf.cpu_ns.engines.scan.load_column.cohort  
perf.cpu_ns.engines.scan.load_column.derived  
perf.cpu_ns.engines.scan.load_column.event  
perf.cpu_ns.engines.scan.load_column.flow  
perf.cpu_ns.engines.scan.load_column.funnel  
perf.cpu_ns.engines.scan.load_column.join_table  
perf.cpu_ns.engines.scan.load_column.session  
perf.cpu_ns.engines.session Total amount of CPU time (in nanoseconds) spend calculating everything related to session computation in queries
perf.cpu_ns.engines.session.load_column This column and the columns based on load_column separate the session measurements into distinct processes.
perf.cpu_ns.engines.sessions.load_column.cohort  
perf.cpu_ns.engines.sessions.load_column.derived  
perf.cpu_ns.engines.sessions.load_column.event  
perf.cpu_ns.engines.sessions.load_column.flow  
perf.cpu_ns.engines.sessions.load_column.funnel  
perf.cpu_ns.engines.sessions.load_column.join_table  
perf.cpu_ns.engines.sessions.load_column.session  
perf.num.cached_ranges The time ranges taken from the server cache
perf.num.computed_ranges The time ranges computed from scratch during a query
perf.num.columns The number of columns referenced by the query
perf.num.cores The number of CPU cores used by a query
perf.num.nodes The number of nodes used by a query
perf.num.rows The number of data rows processed by a query
perf.tag.cohort Comma-delimited string containing the names of all cohorts referenced by the query, if any
perf.tag.funnel Comma-delimited string containing the names of all funnels referenced by the query, if any
perf.tag.group_by Comma-delimited string containing all fields in a group by operation, if any
perf.tag.num_measures The number of measures selected in the query
perf.tag.num_shards Number of shards scanned during a query
perf.tag.session Comma-delimited string containing all sessions used in the query, if any
perf.tag.time_range_hours The amount of time in the time range of the query (units???)

Derived columns: readable output columns

Interana uses the following derived columns provide readable output to the logs.

Derived column Description Syntax
perf.api.rows_per_second_per_core Scan rate (in rows per second) from the API perspective, taking into account API time long f() {
  return cast(long)(c("perf.num.rows") / (c("perf.wall_ns.api") * 1e-9 * c("perf.num.cores")));
}
perf.db.rows_per_second_per_core Scan rate of the C++ layer long f() {
  return cast(long)(c("perf.num.rows") / (c("perf.wall_ns.data_leaf") * 1e-9 * c("perf.num.cores")));
}
perf.mb.memory.data_leaf Converts the amount of memory used for each data leaf from bytes to megabytes.   long f() {
  return c("perf.bytes.memory.data_leaf") / 1000000;
}
perf.ratio.cpu_utilization

Percent of the wall clock time of the query spent by CPU calculations

Use this to measure whether your Interana instance is bound by CPUs or by another factor: concurrency (other queries running), disk (disk read time), etc. 

double f() {
  return cast(double)(c("perf.cpu_ns.readserver")) / (c("perf.wall_ns.data_leaf") * c("perf.num.cores"));
}
perf.seconds.api.wall_time Converts the "wall time" value (the length of time required to complete the query) from nanoseconds to seconds.  double f() {
  return c("perf.wall_ns.api") / 1e9;
}

Derived columns: query components

Use these derived columns when running performance queries to see more information about the queries. 

Derived column Description Syntax
has_cohort Returns "has_cohorts" if the query includes cohorts. static_string f() {
  if (c("perf.tag.cohort") != NULL)
    return string_id("has_cohorts");
  else
    return string_id(" ");
}
has_funnel Returns "has_funnels" if the query includes funnels. static_string f() {
  if (c("perf.tag.funnel") != NULL)
    return string_id("has_funnels");
  else
    return string_id(" ");
}
has_groups Returns "has_groups" if the query includes groups. static_string f() {
  if (c("perf.tag.group_by") != NULL)
    return string_id("has_groups");
  else
    return string_id(" ");
}
has_session Returns "has_sessions" if the query includes sessions. static_string f() {
  if (c("perf.tag.session") != NULL)
    return string_id("has_session");
  else
    return string_id(" ");
}

 

  • Was this article helpful?