in gui/frontend/src/modules/db-editor/PerformanceDashboard.tsx [1208:1412]
private updateData(data: Array<[string, string]>, lsnDiff = 0): void {
const { onGraphDataChange } = this.props;
const { graphData } = this.state;
const oldValues = graphData.currentValues;
const incomingNetworkData = graphData.series.get("incomingNetworkData") ?? [];
const outgoingNetworkData = graphData.series.get("outgoingNetworkData") ?? [];
const clientConnectionsData = graphData.series.get("clientConnectionsData") ?? [];
const sqlStatementsData = graphData.series.get("sqlStatementsData") ?? [];
const innoDBDiskWritesData = graphData.series.get("innoDBDiskWritesData") ?? [];
const innoDBDiskReadsData = graphData.series.get("innoDBDiskReadsData") ?? [];
const mleHeapUsageData = graphData.series.get("mleHeapUsageData") ?? [];
const currentValues = this.extractCurrentValues(data);
const time = new Date();
const timestamp = time.getTime();
const timeDiff = (timestamp - graphData.timestamp) / 1000; // In seconds.
const relativeValue = (name: string): number => {
const oldValue = oldValues.get(name) ?? currentValues.get(name) ?? 0;
const newValue = currentValues.get(name) ?? 0;
return (newValue - oldValue) / timeDiff;
};
incomingNetworkData.shift();
incomingNetworkData.push({
xValue: timestamp,
yValue: relativeValue("Bytes_received"),
});
outgoingNetworkData.shift();
outgoingNetworkData.push({
xValue: timestamp,
yValue: relativeValue("Bytes_sent"),
});
clientConnectionsData.shift();
clientConnectionsData.push({
xValue: timestamp,
yValue: currentValues.get("Threads_connected"),
});
mleHeapUsageData.shift();
mleHeapUsageData.push({
xValue: timestamp,
yValue: currentValues.get("mle_memory_used"),
});
const threadsCached = currentValues.get("Threads_cached") ?? 0;
const threadsConnected = currentValues.get("Threads_connected") ?? 0;
const threadsCreated = currentValues.get("Threads_created") ?? 0;
const threadsRunning = currentValues.get("Threads_running") ?? 0;
const openFiles = currentValues.get("Open_files") ?? 0;
const openStreams = currentValues.get("Open_streams") ?? 0;
const openTableDefinitions = currentValues.get("Open_table_definitions") ?? 0;
const openTables = currentValues.get("Open_tables") ?? 0;
const openedTableDefinitions = currentValues.get("Opened_table_definitions") ?? 0;
const openedTables = currentValues.get("Opened_tables") ?? 0;
const trxBegin = currentValues.get("Com_begin") ?? 0;
const trxCommit = currentValues.get("Com_commit") ?? 0;
const trxReleaseSavepoint = currentValues.get("Com_release_savepoint") ?? 0;
const trxRollback = currentValues.get("Com_rollback") ?? 0;
const trxRollbackToSavepoint = currentValues.get("Com_rollback_to_savepoint") ?? 0;
const trxSavepoint = currentValues.get("Com_savepoint") ?? 0;
const selects = Math.round(relativeValue("Com_select"));
const inserts = Math.round(relativeValue("Com_insert"));
const updates = Math.round(relativeValue("Com_update"));
const deletes = Math.round(relativeValue("Com_delete"));
const creates = Math.round(relativeValue("Com_create_db") + relativeValue("Com_create_event") +
relativeValue("Com_create_function") + relativeValue("Com_create_index") +
relativeValue("Com_create_procedure") + relativeValue("Com_create_server") +
relativeValue("Com_create_table") + relativeValue("Com_create_trigger") + relativeValue("Com_create_udf") +
relativeValue("Com_create_user") + relativeValue("Com_create_view"));
const alters = Math.round(relativeValue("Com_alter_db") + relativeValue("Com_alter_db_upgrade") +
relativeValue("Com_alter_event") + relativeValue("Com_alter_function") +
relativeValue("Com_alter_procedure") + relativeValue("Com_alter_server") +
relativeValue("Com_alter_table") + relativeValue("Com_alter_tablespace") + relativeValue("Com_alter_user"));
const drops = Math.round(relativeValue("Com_drop_db") + relativeValue("Com_drop_event") +
relativeValue("Com_drop_function") + relativeValue("Com_drop_index") + relativeValue("Com_drop_procedure") +
relativeValue("Com_drop_server") + relativeValue("Com_drop_table") + relativeValue("Com_drop_trigger") +
relativeValue("Com_drop_user") + relativeValue("Com_drop_view"));
const totalStatements = selects + inserts + updates + deletes + creates + alters + drops;
sqlStatementsData.shift();
sqlStatementsData.shift();
sqlStatementsData.shift();
sqlStatementsData.push({
xValue: timestamp,
yValue: selects,
group: "select",
});
sqlStatementsData.push({
xValue: timestamp,
yValue: inserts + updates + deletes,
group: "dml",
});
sqlStatementsData.push({
xValue: timestamp,
yValue: creates + alters + drops,
group: "ddl",
});
const hits = currentValues.get("Table_open_cache_hits") ?? 0;
const misses = currentValues.get("Table_open_cache_misses") ?? 1;
const tableCacheEfficiency = hits / (hits + misses);
const dataSize = currentValues.get("Innodb_buffer_pool_bytes_data") ?? 0;
const innoDBPageSize = currentValues.get("Innodb_page_size") ?? 0;
const totalPageCount = currentValues.get("Innodb_buffer_pool_pages_total") ?? 0;
const innoDBBufferPoolUsage = dataSize / innoDBPageSize / totalPageCount;
const innoDBBufferReads = relativeValue("Innodb_buffer_pool_read_requests");
const innoDBBufferWrites = relativeValue("Innodb_buffer_pool_write_requests");
const innoDBBufferDiskReads = relativeValue("Innodb_buffer_pool_reads");
const innoDBBufferReadRatio = innoDBBufferReads === 0 ? 0 : innoDBBufferDiskReads / innoDBBufferReads;
const innoDBRedoLogDataWritten = relativeValue("Innodb_os_log_written");
const innoDBRedoLogWrites = relativeValue("Innodb_log_writes");
const innoDBDoubleWriteBufferWrites = relativeValue("Innodb_dblwr_writes");
const innoDBDataWritten = relativeValue("Innodb_data_written");
const innoDBDataRead = relativeValue("Innodb_data_read");
innoDBDiskWritesData.shift();
innoDBDiskWritesData.push({
xValue: timestamp,
yValue: innoDBDataWritten,
});
innoDBDiskReadsData.shift();
innoDBDiskReadsData.push({
xValue: timestamp,
yValue: innoDBDataRead,
});
const logFileSize = currentValues.get("Innodb_log_file_size") ?? 1;
const logFilesInGroup = currentValues.get("Innodb_log_files_in_group") ?? 1;
const checkpointAge = lsnDiff / logFileSize * logFilesInGroup;
onGraphDataChange?.({
timestamp,
activeColorScheme: graphData.activeColorScheme,
displayInterval: graphData.displayInterval,
currentValues,
computedValues: {
threadsCached,
threadsConnected,
threadsCreated,
threadsRunning,
openFiles,
openStreams,
openTableDefinitions,
openTables,
openedTableDefinitions,
openedTables,
trxBegin,
trxCommit,
trxReleaseSavepoint,
trxRollback,
trxRollbackToSavepoint,
trxSavepoint,
tableCacheEfficiency,
totalStatements,
selects,
creates,
inserts,
updates,
deletes,
alters,
drops,
innoDBBufferPoolUsage,
innoDBBufferReads,
innoDBBufferWrites,
innoDBBufferDiskReads,
innoDBRedoLogDataWritten,
innoDBRedoLogWrites,
innoDBDoubleWriteBufferWrites,
innoDBDataWritten,
innoDBDataRead,
innoDBBufferReadRatio,
checkpointAge,
},
series: new Map([
["incomingNetworkData", incomingNetworkData],
["outgoingNetworkData", outgoingNetworkData],
["clientConnectionsData", clientConnectionsData],
["sqlStatementsData", sqlStatementsData],
["innoDBDiskWritesData", innoDBDiskWritesData],
["innoDBDiskReadsData", innoDBDiskReadsData],
["mleHeapUsageData", mleHeapUsageData],
]),
});
}