From: Nick Porter Date: Wed, 12 Oct 2022 10:37:17 +0000 (+0100) Subject: Improve queries for processing radacct into periodic usage data X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=68ce4c53d7887e4784cfe386bc017ab7cb127bad;p=thirdparty%2Ffreeradius-server.git Improve queries for processing radacct into periodic usage data Removing `OR` from the query allows better index usage --- diff --git a/raddb/mods-config/sql/main/mssql/process-radacct.sql b/raddb/mods-config/sql/main/mssql/process-radacct.sql index a20d20010b3..949a4c64f3d 100644 --- a/raddb/mods-config/sql/main/mssql/process-radacct.sql +++ b/raddb/mods-config/sql/main/mssql/process-radacct.sql @@ -99,11 +99,21 @@ BEGIN @v_end AS period_end, SUM(acctinputoctets) AS acctinputoctets, SUM(acctoutputoctets) AS acctoutputoctets - FROM - radacct - WHERE - acctstoptime > @v_start OR - acctstoptime=0 + FROM (( + SELECT + username, acctinputoctets, acctoutputoctets + FROM + radacct + WHERE + acctstoptime > @v_start + ) UNION ALL ( + SELECT + username, acctinputoctets, acctoutputoctets + FROM + radacct + WHERE + acctstoptime=0 + )) a GROUP BY username ) s diff --git a/raddb/mods-config/sql/main/mysql/process-radacct.sql b/raddb/mods-config/sql/main/mysql/process-radacct.sql index 1cc8d30fb51..3555abd98ff 100644 --- a/raddb/mods-config/sql/main/mysql/process-radacct.sql +++ b/raddb/mods-config/sql/main/mysql/process-radacct.sql @@ -109,11 +109,21 @@ BEGIN v_end, SUM(acctinputoctets) AS acctinputoctets, SUM(acctoutputoctets) AS acctoutputoctets - FROM - radacct - WHERE - acctstoptime > v_start OR - acctstoptime IS NULL + FROM (( + SELECT + username, acctinputoctets, acctoutputoctets + FROM + radacct + WHERE + acctstoptime > v_start + ) UNION ALL ( + SELECT + username, acctinputoctets, acctoutputoctets + FROM + radacct + WHERE + acctstoptime IS NULL + )) AS a GROUP BY username ) AS s diff --git a/raddb/mods-config/sql/main/postgresql/process-radacct.sql b/raddb/mods-config/sql/main/postgresql/process-radacct.sql index 8a6047e5543..e8d825c8ae2 100644 --- a/raddb/mods-config/sql/main/postgresql/process-radacct.sql +++ b/raddb/mods-config/sql/main/postgresql/process-radacct.sql @@ -96,11 +96,21 @@ BEGIN v_end, SUM(acctinputoctets) AS acctinputoctets, SUM(acctoutputoctets) AS acctoutputoctets - FROM - radacct - WHERE - acctstoptime > v_start OR - acctstoptime IS NULL + FROM (( + SELECT + username, acctinputoctets, acctoutputoctets + FROM + radacct + WHERE + acctstoptime > v_start + ) UNION ALL ( + SELECT + username, acctinputoctets, acctoutputoctets + FROM + radacct + WHERE + acctstoptime IS NULL + )) AS a GROUP BY username ) AS s diff --git a/raddb/mods-config/sql/main/sqlite/process-radacct-new-data-usage-period.sh b/raddb/mods-config/sql/main/sqlite/process-radacct-new-data-usage-period.sh index edfb1293314..0deb3911441 100755 --- a/raddb/mods-config/sql/main/sqlite/process-radacct-new-data-usage-period.sh +++ b/raddb/mods-config/sql/main/sqlite/process-radacct-new-data-usage-period.sh @@ -61,7 +61,18 @@ cat < (SELECT value FROM vars WHERE key='v_start') OR + acctstoptime > (SELECT value FROM vars WHERE key='v_start'); + + INSERT INTO radacct_sessions + SELECT + username, + acctstarttime, + acctstoptime, + acctinputoctets, + acctoutputoctets + FROM + radacct + WHERE acctstoptime IS NULL;