消防部队四个严禁:超出SDE最大连接数的解决办法

来源:百度文库 编辑:偶看新闻 时间:2024/05/04 08:55:19

     官方默认的sde最大连接数为48个,在实际应用中一旦超出这个最大连接数,就无法进行连接sde了,提示:“Failed to connect to database. Maximum number of conections to instance exceeded”。 我在实际工作中经常会遇到这种情况,每次解决的办法就是重启服务。

     在$SDEHOME/etc目录下giomgr.defs文件中,CONNECTIONS连接数修改成128;或者使用命令sdeconfig -o alter -v connections=128 -u sde -p sde


       毕竟老是重启服务不是个长久之计, 我在网上也找了一些解决的方法,最简单的方法就是修改这个连接参数为更大的数。但是由于系统默认的就是48个,后来又看到一篇文章,专门讲到为什么windows操作系统中sde服务的最大连接数为48个,原来是Windows为每个服务分配了一个固定大小的内存(默认512K)。每个sde进程大约需要9K内存,因此sde默认的连接数为512/9约等于48。可以修改这个内存数,将512k改为1024,如果连接数超过250,可以改成2048。需要修改注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows 项目中的SharedSection,并将原SharedSection=1024,3072,512中的第三项改为1024或2048等数即可修改系统的默认最大连接数”。但是效果如何?我还没有试,会不会出现不稳定的情况,毕竟连接数越多,并发性操作也就越不稳定。

       如果在不修改这个参数的情况下,让SDE自动检测并断开一定时间未进行操作的SDE连接,那才是最好解决方法的方法。我看到论坛上有通过“TCPKEEPALIVE”参数设置为True来解决的,并在注册表中Local_Machine\system\CurrentControlSet\Services\Tcpip\Parameters 添加DWORD项:KeepAliveTime。

       keepalivetime时间值是:SDE服务器giomgr进程在没有收到客户端的反应的最大阀值,如果超出该值,那么客户端进程和与其关联信息将被清除。它是在SDE服务器机器上的。
       KeepAliveTime默认值是7200000ms( 2 hours),单位是毫秒。

KeepAliveTime本人并没有尝试使用,只是修改了连接数和注册表信息。