Skip to content

Commit 61ca677

Browse files
committed
Massive performance improvement in statistics page
By performing the join and group by in the sub query, it takes query that take sometimes minutes to finish to seconds.
1 parent 2e1b36f commit 61ca677

File tree

2 files changed

+18
-21
lines changed

2 files changed

+18
-21
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,9 @@ that.
160160
* issue#104: When filtering, syslog incorrectly thinks the Cacti hosts table
161161
does not exist
162162

163-
* issue#107: Removal rule not using correct DB when using $use_cacti_db = false;
163+
* issue#107: Removal rule not using correct DB when using $use_cacti_db = false;
164+
165+
* issue: Massive performance improvement in statistics page rendering
164166

165167
--- 2.5 ---
166168

syslog.php

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -248,14 +248,6 @@ function syslog_statistics() {
248248

249249
$rows_query_string = "SELECT COUNT(*)
250250
FROM `" . $syslogdb_default . "`.`syslog_statistics` AS ss
251-
LEFT JOIN `" . $syslogdb_default . "`.`syslog_facilities` AS sf
252-
ON ss.facility_id=sf.facility_id
253-
LEFT JOIN `" . $syslogdb_default . "`.`syslog_priorities` AS sp
254-
ON ss.priority_id=sp.priority_id
255-
LEFT JOIN `" . $syslogdb_default . "`.`syslog_programs` AS spr
256-
ON ss.program_id=spr.program_id
257-
LEFT JOIN `" . $syslogdb_default . "`.`syslog_hosts` AS sh
258-
ON ss.host_id=sh.host_id
259251
$sql_where
260252
$sql_groupby";
261253

@@ -349,36 +341,36 @@ function get_stats_records(&$sql_where, &$sql_groupby, $rows) {
349341
// Do nothing
350342
} elseif (get_request_var('host') != '-1' && get_request_var('host') != '') {
351343
$sql_where .= ($sql_where == '' ? 'WHERE ' : ' AND ') . 'ss.host_id=' . get_request_var('host');
352-
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'sh.host';
344+
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'host_id';
353345
} else {
354-
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'sh.host';
346+
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'host_id';
355347
}
356348

357349
if (get_request_var('facility') == '-2') {
358350
// Do nothing
359351
} elseif (get_request_var('facility') != '-1' && get_request_var('facility') != '') {
360352
$sql_where .= ($sql_where == '' ? 'WHERE ' : ' AND ') . 'ss.facility_id=' . get_request_var('facility');
361-
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'sf.facility';
353+
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'facility_id';
362354
} else {
363-
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'sf.facility';
355+
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'facility_id';
364356
}
365357

366358
if (get_request_var('priority') == '-2') {
367359
// Do nothing
368360
} elseif (get_request_var('priority') != '-1' && get_request_var('priority') != '') {
369361
$sql_where .= ($sql_where == '' ? 'WHERE ': ' AND ') . 'ss.priority_id=' . get_request_var('priority');
370-
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'sp.priority';
362+
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'priority_id';
371363
} else {
372-
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'sp.priority';
364+
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'priority_id';
373365
}
374366

375367
if (get_request_var('program') == '-2') {
376368
// Do nothing
377369
} elseif (get_request_var('program') != '-1' && get_request_var('program') != '') {
378370
$sql_where .= ($sql_where == '' ? 'WHERE ': ' AND ') . 'ss.program_id=' . get_request_var('program');
379-
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'spr.program';
371+
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'program_id';
380372
} else {
381-
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'spr.program';
373+
$sql_groupby .= ($sql_groupby != '' ? ', ':'') . 'program_id';
382374
}
383375

384376
if (get_request_var('timespan') != '-1') {
@@ -398,8 +390,13 @@ function get_stats_records(&$sql_where, &$sql_groupby, $rows) {
398390

399391
$time = 'FROM_UNIXTIME(TRUNCATE(UNIX_TIMESTAMP(insert_time)/' . get_request_var('timespan') . ',0)*' . get_request_var('timespan') . ') AS insert_time';
400392

401-
$query_sql = "SELECT sh.host, sf.facility, sp.priority, spr.program, sum(ss.records) AS records, $time
402-
FROM `" . $syslogdb_default . "`.`syslog_statistics` AS ss
393+
$query_sql = "SELECT sh.host, sf.facility, sp.priority, spr.program, records, insert_time
394+
FROM (
395+
SELECT host_id, facility_id, priority_id, program_id, sum(records) AS records, $time
396+
FROM `" . $syslogdb_default . "`.`syslog_statistics` AS ss
397+
$sql_where
398+
$sql_groupby
399+
) AS ss
403400
LEFT JOIN `" . $syslogdb_default . "`.`syslog_facilities` AS sf
404401
ON ss.facility_id=sf.facility_id
405402
LEFT JOIN `" . $syslogdb_default . "`.`syslog_priorities` AS sp
@@ -408,8 +405,6 @@ function get_stats_records(&$sql_where, &$sql_groupby, $rows) {
408405
ON ss.program_id=spr.program_id
409406
LEFT JOIN `" . $syslogdb_default . "`.`syslog_hosts` AS sh
410407
ON ss.host_id=sh.host_id
411-
$sql_where
412-
$sql_groupby
413408
$sql_order
414409
$sql_limit";
415410

0 commit comments

Comments
 (0)