SQLIPPool performance issue

Roy Walker rwalker at sensorlogic.com
Thu Jul 26 06:27:53 CEST 2007


Ok chaning the indexes definately made some difference.  The database load still went off the charts, but the radius logs were much better with DB errors connect errors.  This still seems horribly slow.
 
I can take it down to 2 simultaneous connections on the radclient test and will still get some IP Allocation FAILED (although way less than I was) messages in the radius logs.  With only 2 simultaneous connections the DB load hovers around 1 so that seems fine.
 
Here is the command I am using to test: /radclient -p 2 -d /usr/src/freeradius-server-snapshot-20070725/share -f /tmp/radclient-test 1.1.1.10 auth testing123
Where the radclient-test file has 5000 client requests seperated by the necessary blank lines.
 
I guess I will spend some time tomorrow and enable postgres query logging.  I already have an idea of what I am going to find, there is just an insane number of queries running per auth request and the subsequent IP allocation...
 
Peter: If you can share any query changes you have, I would be most appreciative.
 
Roy

 
________________________________

From: freeradius-users-bounces+rwalker=sensorlogic.com at lists.freeradius.org on behalf of Peter Nixon
Sent: Wed 7/25/2007 6:30 PM
To: FreeRadius users mailing list
Subject: Re: SQLIPPool performance issue



Hi Roy

The default indexes are:

CREATE INDEX radippool_poolname_ipaadr ON radippool USING btree (pool_name,
framedipaddress);
CREATE INDEX radippool_poolname_expire ON radippool USING btree (pool_name,
expiry_time);
CREATE INDEX radippool_nasipaddr_poolkey ON radippool USING btree
(nasipaddress, pool_key);
CREATE INDEX radippool_nasipaddr_calling ON radippool USING btree
(nasipaddress, callingstationid);

After reading though them, I think they need some work... (My production
queries are a little different and so are my indexes)

I think a better index set would be:

CREATE INDEX radippool_poolname_expire ON radippool USING btree (pool_name,
expiry_time);
CREATE INDEX radippool_framedipaddress ON radippool USING btree
(framedipaddress);
CREATE INDEX radippool_nasip_poolkey_ipaddress ON radippool USING btree
(nasipaddress, pool_key, framedipaddress);

Therefore, please run to fullowing on your postgresql database, and report
back to me what difference it makes:

DROP INDEX radippool_poolname_ipaadr;
DROP INDEX radippool_nasipaddr_poolkey;
DROP INDEX radippool_nasipaddr_calling;
CREATE INDEX radippool_nasip_poolkey_ipaddress ON radippool USING btree
(nasipaddress, pool_key, framedipaddress);
CREATE INDEX radippool_framedipaddress ON radippool USING btree
(framedipaddress);

Cheers

Peter

On Thu 26 Jul 2007, Roy Walker wrote:
> Using freeradius-server-snapshot-20070705.
>
> I have setup a test scenario where radclient is sending 500 simultaneous
> requests to the radius server.  This drives the load on the radius and
> postgres database to pretty much max.  The Postgres database is an 8
> Core (4 dual cpu) Sun Opteron with 8g of ram and 3 x 15k SAS drives on
> an LSI Megaraid controller.  So the database box is a decent machine.
>
> Here is the indexes on the postgres database:
> radius=# \di
>                            List of relations
>  Schema |            Name             | Type  | Owner  |     Table
> --------+-----------------------------+-------+--------+---------------
>  public | badusers_incidentdate_idx   | index | dialup | badusers
>  public | badusers_pkey               | index | dialup | badusers
>  public | badusers_username_idx       | index | dialup | badusers
>  public | mtotacct_acctdate_idx       | index | dialup | mtotacct
>  public | mtotacct_nasipaddress_idx   | index | dialup | mtotacct
>  public | mtotacct_pkey               | index | dialup | mtotacct
>  public | mtotacct_username_idx       | index | dialup | mtotacct
>  public | mtotacct_userondate_idx     | index | dialup | mtotacct
>  public | nas_nasname                 | index | dialup | nas
>  public | nas_pkey                    | index | dialup | nas
>  public | radacct_active_user_idx     | index | dialup | radacct
>  public | radacct_pkey                | index | dialup | radacct
>  public | radacct_start_user_idx      | index | dialup | radacct
>  public | radcheck_pkey               | index | dialup | radcheck
>  public | radcheck_username           | index | dialup | radcheck
>  public | radgroupcheck_groupname     | index | dialup | radgroupcheck
>  public | radgroupcheck_pkey          | index | dialup | radgroupcheck
>  public | radgroupreply_groupname     | index | dialup | radgroupreply
>  public | radgroupreply_pkey          | index | dialup | radgroupreply
>  public | radippool_nasipaddr_calling | index | dialup | radippool
>  public | radippool_nasipaddr_poolkey | index | dialup | radippool
>  public | radippool_pkey              | index | dialup | radippool
>  public | radippool_poolname_expire   | index | dialup | radippool
>  public | radippool_poolname_ipaadr   | index | dialup | radippool
>  public | radpostauth_pkey            | index | dialup | radpostauth
>  public | radreply_pkey               | index | dialup | radreply
>  public | radreply_username           | index | dialup | radreply
>  public | radusergroup_username       | index | dialup | radusergroup
>  public | totacct_acctdate_idx        | index | dialup | totacct
>  public | totacct_nasipaddress_idx    | index | dialup | totacct
>  public | totacct_nasondate_idx       | index | dialup | totacct
>  public | totacct_pkey                | index | dialup | totacct
>  public | totacct_username_idx        | index | dialup | totacct
>  public | totacct_userondate_idx      | index | dialup | totacct
>  public | userinfo_department_idx     | index | dialup | userinfo
>  public | userinfo_pkey               | index | dialup | userinfo
>  public | userinfo_username_idx       | index | dialup | userinfo
> (37 rows)
>
> This seems to be the recommended indexes from what I have seen.  I used
> the latest schema from CVS.
>
> I have not setup the database to look and see if one query is killing
> the box, but I am going to guess it is just the amount that is doing it.
>
> If anyone has another idea I would LOVE to hear it!
>
> Thanks,
> Roy
>
> -----Original Message-----
> From:
> freeradius-users-bounces+rwalker=sensorlogic.com at lists.freeradius.org
> [mailto:freeradius-users-bounces+rwalker=sensorlogic.com at lists.freeradiu
> s.org] On Behalf Of Peter Nixon
> Sent: Wednesday, July 25, 2007 5:21 PM
> To: FreeRadius users mailing list
> Subject: Re: SQLIPPool performance issue
>
> On Wed 25 Jul 2007, Roy Walker wrote:
> > I am having a problem with the SQLIPPOOL performance.  This is
>
> migration
>
> > of an existing radius server using flat user files (old server is
> > running radius 1.1.0).
>
> Hi Roy
>
> You don't specify which version of FreeRADIUS you are using.. Which is
> it?
>
> What does you your radipool table and indexes look like?
>
> Regards



--

Peter Nixon
http://peternixon.net/
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html


-------------- next part --------------
A non-text attachment was scrubbed...
Name: winmail.dat
Type: application/ms-tnef
Size: 10932 bytes
Desc: not available
URL: <http://lists.freeradius.org/pipermail/freeradius-users/attachments/20070725/b7b5a5b3/attachment.bin>


More information about the Freeradius-Users mailing list