Source code for deephaven.perfmon

#
# Copyright (c) 2016-2024 Deephaven Data Labs and Patent Pending
#

""" Tools to obtain internal, Deephaven logs as tables, and tools to analyze the performance of the Deephaven
system and Deephaven queries.
"""
from typing import Dict

import jpy

from deephaven import DHError
from deephaven.jcompat import j_map_to_dict
from deephaven.table import Table, TreeTable
from deephaven.update_graph import auto_locking_ctx

_JPerformanceQueries = jpy.get_type("io.deephaven.engine.table.impl.util.PerformanceQueries")
_JMetricsManager = jpy.get_type("io.deephaven.util.metrics.MetricsManager")
_JTableLoggers = jpy.get_type("io.deephaven.engine.table.impl.util.TableLoggers")


[docs] def process_info_log() -> Table: """ Returns a static table with process information for the current Deephaven engine process. Returns: a Table Raises: DHError """ try: return Table(j_table=_JTableLoggers.processInfoLog()) except Exception as e: raise DHError(e, "failed to obtain the process info log table.") from e
[docs] def server_state_log() -> Table: """ Returns a table with memory utilization, update graph processor and garbage collection stats sampled on a periodic basis. Returns: a Table Raises: DHError """ try: return Table(j_table=_JTableLoggers.serverStateLog()) except Exception as e: raise DHError(e, "failed to obtain the server state log table.") from e
[docs] def process_metrics_log() -> Table: """ Returns a table with metrics collected for the current Deephaven engine process. Returns: a Table Raises: DHError """ try: return Table(j_table=_JTableLoggers.processMetricsLog()) except Exception as e: raise DHError(e, "failed to obtain the process metrics log table.") from e
[docs] def query_operation_performance_log() -> Table: """ Returns a table with Deephaven performance data for individual subqueries. Performance data for the entire query is available from calling 'query_performance_log'. Returns: a Table Raises: DHError """ try: return Table(j_table=_JTableLoggers.queryOperationPerformanceLog()) except Exception as e: raise DHError(e, "failed to obtain the query operation performance log table.") from e
[docs] def query_performance_log() -> Table: """ Returns a table with Deephaven query performance data. Performance data for individual sub-operations is available from calling `query_operation_performance_log`. Returns: a Table Raises: DHError """ try: return Table(j_table=_JTableLoggers.queryPerformanceLog()) except Exception as e: raise DHError(e, "failed to obtain the query performance log table.") from e
[docs] def query_operation_performance_tree_table() -> TreeTable: """ Returns a tree table with Deephaven performance data for individual subqueries. Returns: a TreeTable Raises: DHError """ try: with auto_locking_ctx(query_performance_log()): return TreeTable(j_tree_table=_JPerformanceQueries.queryOperationPerformanceAsTreeTable(), id_col = "EvalKey", parent_col = "ParentEvalKey") except Exception as e: raise DHError(e, "failed to obtain the query operation performance log as tree table.") from e
[docs] def query_performance_tree_table() -> TreeTable: """ Returns a tree table with Deephaven query performance data. Performance data for individual sub-operations as a tree table is available from calling `query_operation_performance_tree_table`. Returns: a TreeTable Raises: DHError """ try: with auto_locking_ctx(query_performance_log()): return TreeTable(j_tree_table=_JPerformanceQueries.queryPerformanceAsTreeTable(), id_col = "EvaluationNumber", parent_col = "ParentEvaluationNumber") except Exception as e: raise DHError(e, "failed to obtain the query performance log as tree table.") from e
[docs] def update_performance_log() -> Table: """ Returns a table with Deephaven update performance data. Returns a Table Raises: DHError """ try: return Table(j_table=_JTableLoggers.updatePerformanceLog()) except Exception as e: raise DHError(e, "failed to obtain the update performance log table.") from e
[docs] def metrics_reset_counters() -> None: """ Resets Deephaven performance counter metrics. """ _JMetricsManager.resetCounters()
[docs] def metrics_get_counters() -> str: """ Gets Deephaven performance counter metrics. Returns: a string of the Deephaven performance counter metrics. """ return _JMetricsManager.getCounters()
[docs] def process_info(proc_id: str, proc_type: str, key: str) -> str: """ Gets the information for a process. Args: proc_id (str): the process id proc_type (str): the process type key (str): the key of the process property Returns: a string of process information Raises: DHError """ try: return _JPerformanceQueries.processInfo(proc_id, proc_type, key) except Exception as e: raise DHError(e, "failed to obtain the process info.") from e
[docs] def server_state() -> Table: """ Returns a table of basic memory, update graph processor, and GC stats for the current engine process, sampled on a periodic basis. Returns: a table """ try: return Table(j_table=_JPerformanceQueries.serverState()) except Exception as e: raise DHError(e, "failed to produce a table with server state info.") from e
[docs] def query_operation_performance(eval_number: int) -> Table: """ Takes in a query evaluation number and returns a view for that query's individual operation's performance data. You can obtain query evaluation numbers, which uniquely identify a query and its subqueries, via the performance data tables obtained from calling query_performance_log() or query_operation_performance_log() The query operation performance log contains data on how long each individual operation of a query (where(), update(), naturalJoin(), etc., as well as internal functions) takes to execute, and the change in resource consumption while each was executing. Args: eval_number (int): the evaluation number Returns: a table of query operation performance data Raises: DHError """ try: return Table(j_table=_JPerformanceQueries.queryOperationPerformance(eval_number)) except Exception as e: raise DHError(e, "failed to obtain the query operation performance data.") from e
[docs] def query_performance(eval_number: int) -> Table: """ Takes in a query evaluation number and returns a view for that query's performance data. You can obtain query evaluation numbers, which uniquely identify a query and its subqueries, via the performance data tables obtained from calling query_performance_log() or query_operation_performance_log() The query performance log contains data on how long each query takes to run. Examples of what constitutes one individual query, for performance logging purposes, include: * A new command in the console (i.e. type something, then press the return key) * A sort, filter, or custom column generated by a UI * A call from a client API external application Args: eval_number (int): the evaluation number Returns: a Table of query performance data Raises: DHError """ try: return Table(j_table=_JPerformanceQueries.queryPerformance(eval_number)) except Exception as e: raise DHError(e, "failed to obtain the query performance data.") from e
[docs] def query_update_performance(eval_number: int) -> Table: """ Takes in a query evaluation number and returns a view for that query's update performance data. You can obtain query evaluation numbers, which uniquely identify a query and its subqueries, via the performance data tables obtained from calling query_performance_log() or query_operation_performance_log() Args: eval_number (int): the evaluation number Returns: a Table of query update performance data Raises: DHError """ try: return Table(j_table=_JPerformanceQueries.queryUpdatePerformance(eval_number)) except Exception as e: raise DHError(e, "failed to obtain the query update performance data.") from e
[docs] def query_update_performance_map(eval_number: int) -> Dict[str, Table]: """ Creates multiple tables with performance data for a given query identified by an evaluation number. The tables are returned in a map with the following String keys: 'QueryUpdatePerformance', 'UpdateWorst', 'WorstInterval', 'UpdateMostRecent', 'UpdateAggregate', 'UpdateSummaryStats'. Args: eval_number (int): the evaluation number Returns: a dict Raises: DHError """ try: d = j_map_to_dict(_JPerformanceQueries.queryUpdatePerformanceMap(eval_number)) for k in d.keys(): d[k] = Table(j_table=d[k]) return d except Exception as e: raise DHError(e, "failed to obtain the query update perf map.") from e