Problem with MySQL and Accouting-On record

Alan DeKok aland at deployingradius.com
Thu Nov 19 15:29:15 CET 2020


On Nov 19, 2020, at 7:14 AM, Ángel L. Mateo <amateo at um.es> wrote:
> 
> (0) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
> (0) sql: SQL query returned: server error

  Well, that's bad.

> 	There is a lock timeout. I think the problem is:
> 
> * My database is huge, about 6GB

  There's no reason for that.  You need *a* database.  You don't need *one* database.

  The DB used by RADIUS should be a "production" database.  It should be kept small, to minimize these kinds of issues.

  Any "historical" information can go into a separate database.  If you're doing billing, or data analysis, it's OK for the queries to take 5 seconds.  It is definitely *not* OK for a RADIUS query to take 5 seconds.

> * The update uses a WHERE with 3 fields, acctstoptime, nasipaddress and acctstarttime. I'm not a DBA, but although I have indexes in these 3 fields, in this query I think that only the index for acctstoptime field is use.
> 
> 	I'm going to try to create an complex index for (acctstoptime, nasipaddress, acctstarttime) and check if this solves the problem.

  That should help a lot.  Also, split the database into "production" and "historical".  Copy data daily from "production" to "historical". and then delete the data from "production".

  If the RADIUS server doesn't use the information, then it shouldn't be in the database used by RADIUS.

  Alan DeKok.




More information about the Freeradius-Users mailing list