One more question.<br><br><div>Where can I take nas-type value to use it in user authorization? Radius take it from mysql nasinfo table at startup. I take it from DB every time subscriber try to authorize.<br clear="all"></div>
<div><br></div><div>Regards,</div><div>Alexander.</div>
<br><br><div class="gmail_quote">2012/1/12 Fajar A. Nugraha <span dir="ltr"><<a href="mailto:list@fajar.net">list@fajar.net</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On Thu, Jan 12, 2012 at 6:36 PM, Alexander Kosykh <<a href="mailto:avkosykh@gmail.com">avkosykh@gmail.com</a>> wrote:<br>
> hi<br>
> Is anyone have a success story of optimizing ippool sql table to make it<br>
> work faster?<br>
> The default scheme is very slow, and then you have about 25000 subscribers<br>
> it's not work.<br>
><br>
<br>
</div>I have over 1 million subscribers. Then again, I'm using mysql cluster :)<br>
<div class="im"><br>
> I trying to add indexes to this table. It make fast selects, but slow<br>
> updates.<br>
<br>
</div>Duh! :D<br>
That's why having a dba is important. If you can't do it yourself,<br>
hire one. Or learn to be one. Depending on your deployment scale, the<br>
cost is justifiable. Seriously.<br>
<div class="im"><br>
><br>
> [code]<br>
> CREATE TABLE `radippool` (<br>
> `id` int(11) unsigned NOT NULL AUTO_INCREMENT,<br>
> `pool_name` varchar(30) NOT NULL,<br>
> `framedipaddress` varchar(15) NOT NULL DEFAULT '',<br>
> `nasipaddress` varchar(15) NOT NULL DEFAULT '',<br>
> `calledstationid` varchar(30) NOT NULL,<br>
> `callingstationid` varchar(30) NOT NULL,<br>
> `expiry_time` datetime DEFAULT NULL,<br>
> `username` varchar(64) NOT NULL DEFAULT '',<br>
> `pool_key` varchar(30) NOT NULL,<br>
> PRIMARY KEY (`id`),<br>
> KEY `allocate-find` (`pool_name`,`expiry_time`,`callingstationid`)<br>
> ) ENGINE=MyISAM AUTO_INCREMENT=34817 DEFAULT CHARSET=utf8<br>
> [/code]<br>
<br>
</div>You really shouldn't use myisam for heavy-write tables.<br>
<div class="im"><br>
> Maybe some one have a good modification of ippool table or another changes<br>
> of default scheme, and could share it?<br>
<br>
</div>It's kinda complicated. I've been meaning to submit a patch, but it's<br>
just not that easy.<br>
<br>
For starters, about mysql storage engines:<br>
- myisam -> good for majority of reads, terrible for writes. Plus it<br>
lacks transactional support, which usually means that with the default<br>
setup you can either hand out duplicate IP to clients, or stuck with<br>
slow table locks.<br>
- innodb -> somewhat balanced for both read-write, and have<br>
transactional support, but mostly disk-bound. especially if you<br>
enforce cosistency by flushing to disk on every transaction.<br>
- memory -> good-enough for writes (i.e. not disk-bound, obviously),<br>
but still suffer from table locks<br>
- NDB (i.e. mysql cluster) -> good for lots of parallel writes,<br>
usually not disk-bound<br>
<br>
Now performance-wise using NDB or memory would be best, but it won't<br>
be the best choice for common mysql setups. You MIGHT be able to gain<br>
some improvements by using innodb (without changing anything else).<br>
Maybe.<br>
<br>
Then there's the problem with queries. The default sqlippool query<br>
would basically lock the table during IP assignment (due to SELECT ...<br>
FOR UPDATE). I opted to change the query to NOT use table locks (using<br>
randomization instead), at the expense of possible duplicate ip<br>
assignment. In my case when a client gets duplicate IP, the NAS will<br>
reject the user, so the user will dial again, and (hopefully) get a<br>
unique free ip address this time. It's an acceptable workaround for<br>
me, but it won't be implementable in "normal" setups. Add to that the<br>
fact that I had to implement it using stored procedures, and you can<br>
see how it gets pretty complicated.<br>
<br>
So in short, for now:<br>
- revert your changes<br>
- try changing the engine to innodb<br>
- if it's still too slow, hire a dba, and/or be prepared to implement<br>
mysql cluster (or something like clustrix)<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Fajar<br>
-<br>
List info/subscribe/unsubscribe? See <a href="http://www.freeradius.org/list/users.html" target="_blank">http://www.freeradius.org/list/users.html</a><br>
</font></span></blockquote></div><br>