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-Tag: release_3_0_27~220 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1cadba7cb70e8e01e84837a1d2c23e0073884ca3;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 a3a64451d5..01129b6c4c 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 8cd0bd25dc..f8956bb60e 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 a103c8f026..16d0de39c1 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-refresh.sh b/raddb/mods-config/sql/main/sqlite/process-radacct-refresh.sh index c32fd438d6..38c34249b7 100755 --- a/raddb/mods-config/sql/main/sqlite/process-radacct-refresh.sh +++ b/raddb/mods-config/sql/main/sqlite/process-radacct-refresh.sh @@ -60,7 +60,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;