解决ArcGIS中因SDE或数据库配置问题而致使服务宕掉的一种思路

文章版权由做者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/sql

1.背景

最近连续有两个项目现场出现了AGS服务荡掉的问题,一个是通州现场,一个是福州现场。数据库

1.1通州现场的问题描述和解决思路

通州现场环境为ArcGIS9.2,使用IMS发布的地图服务,其问题表现为每隔两天左右,其地形图服务便会崩溃一次,重启地形图服务后地图能够正常显示。缓存

由于IMS中地图的出图为动态出图,因此其出图时须要经过链接SDE,此问题的出现极可能是SDE中最大链接数的问题。服务器

1.2福州现场的问题描述和解决思路

福州现场环境为ArcGIS10.0,使用的ArcGIS Server发布的矢量服务(Map Server),其问题表现为基本天天矢量服务都会荡掉一次,重启后,系统即可以正常运行。微信

矢量服务荡掉有不少种缘由,猜测了以下几种可能:性能

(1)没有按期清除ArcGIS Server中的缓存,致使缓存过多而荡掉。操作系统

(2)因为Windows防火墙的缘由,Context和SDE的链接限制一段时间后,会被系统Kill掉,然而Context并不知情,因而在空闲一段时间后的第一次访问中,仍然使用该连接,链接不上SDE致使Crash。rest

(3)矢量查询须要经过SDE链接数据库,会不会SDE的最大链接数设置少了,致使服务荡掉。日志

(4)由于矢量查询时一样须要用到数据库中的游标,会不会数据库的最大游标数设置少了,致使服务荡掉。server

2.解决通州现场问题

2.1首先设置最大链接数

SDE的默认链接数是48个,修改它有两种方式,一种是经过注册表,一种是经过数据库。这里我将两种修改方式都作一个介绍。

2.1.1经过注册表修改

打开SDE的安装目录下的(通常安装路径为C:\ arcgis\ArcSDE\sqlexe\etc)giomgr.defs文件进行编辑,设置CONNECTIONS参数为你的最大链接数。经过命令导入到数据库中:sdeconfig –o import –f C:\arcgis\ArcSDE\sqlexe\etc\giomgr.defs –i esri_sde(数据库实例名) –s (ServerName) –u sde(用户名) –p sde(密码) 。 设置好后须要重启SDE服务才能生效。

2.1.2经过数据库中的

运行select * from sde.server_config;在这个表中修改CONNECTIONS的NUM_PROP_VALUE便可。

 

         

2.2 修改TCPKEEPALIVE配置

可以删除无效链接的最大功臣就是TCPKEEPALIVE了。TCPKEEPALIVE参数能够控制数据库是否会根据已配置好的间隔时间来定时检查链接是否为无效链接,若是是,则自动删除该链接。

例如,当TCPKEEPALIVE参数设置为TRUE后,数据库会根据SDE服务所在机器的注册表项KEEPALIVETIME所提供的响应时间,不断侦测全部链接是否为无效链接,若是为无效链接,则自动删除该链接。

此参数的修改跟SDE的最大链接数的修改方式同样,有两种方式,具体能够参考上节描述的方法。

2.3修改 KEEPALIVETIME的配置

这里涉及到另一个参数:KEEPALIVETIME。

对于操做系统默认安装的机器来讲,KEEPALIVETIME注册表项是没有的,而若是没有话,服务器不会主动发送发送KeepAlive数据包来确认空闲链接是否依然毫无变化,也就不会进行删除操做。因此上面提到的无效链接会愈来愈多。咱们能够在以下路径中:Local_Machine\system\CurrentControlSet\Services\Tcpip\Parameters 添加DWORD项:KeepAliveTime。这样系统的注册表中便有了KEEPALIVETIME项。

 

若是系统中已经有了KEEPALIVETIME项,咱们不填写它的值时,它默认的就是两小时。根据网上别人的经验,推荐设置为5分钟。不过具体状况根据项目来定,最后重启SDE才能生效。

2.4 继续修改——修改注册表中的SharedSection

咱们在给通州现场设置了以上三个配置后,过了两天,现场反映地图服务仍是荡掉了。因而咱们再次查资料,发现还有一个关键的地方须要配置——SharedSection。

Windows为每一个服务分配了一个固定大小的内存(默认512K)。每一个sde进程大约须要9K内存,所以sde默认的链接数为512/9约等于48。

若是咱们不修改这个固定大小内存的配置,即便咱们已经将SDE的最大链接数配置改为了128,同样没法生效。

按照上面的换算方法,9*128=1152,而后咱们适当的将其改为1024。

最后咱们在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows 项中找到SharedSection,并将原SharedSection=1024,3072,512中的第三项改成1024。改完后,到目前已通过了两周,现场反映地图服务没有荡掉过。

 

3.解决福州现场问题

3.1 修改按期清除缓存——无效果

经过http://192.168.101.9:8399/arcgis/rest/admin这个链接进入管理页面,而后设置天天的一个时刻按期清除缓存。给现场修改后,次日现场工程人员回复仍是荡掉了。

 

3.2 关掉防火墙,而且设置服务过一段时间后再次链接数据库时先检查链接是否正常——无效果

 

在服务的ServiceProperties里面设置这个按期检查链接的时间间隔。给现场修改的是30分钟。次日问现场,现场反馈服务仍是荡掉了。

3.3 修改数据库最大游标数、以及SDE最大链接数等相关配置——成功

仔细观察错误日志,发如今众多报错中有以下一个错误。猜测数据库游标数可能设置小了。

 

经过show parameter open_cursors;查看现场的游标数目为250。

经过select count(*) from v$open_cursor ;查看现场目前的游标打开的数目,发如今矢量服务关闭了的状况下,这个数目已通过了200。

经过alter system set open_cursors=2000 scope=both;将游标数目变大。

为保险起见,经过上面提到过的几个步骤,将SDE的最大链接数以及杀进程的配置等所有修改。

目前已通过了两周,现场没再出现服务荡掉的状况。

不过我总担忧游标数设置大了会影响系统,由于,游标在shared pool占有必定的内存,太多会带来浪费,固然也不能太少,太少的话会给系统带来必定压力,引发系统内存争抢。

今天询问了下公司在北京的DBA,他告诉我,游标数量根据现场环境不一样而不一样,若是会话很少,建议使用会话数*5来设置,若是多的话,好比超过200个会话,那*3也能够,而且,游标数多少对性能影响小,若是你内存资源充足,能够多设置点。

我给现场设置的是2000,这样看来是合理的。

 

4.总结

(1)只修改SDE最大链接数,而不修改注册表中的SharedSection,是无效果的。

(2)因为矢量查询与数据库是有直接联系的,每一次查询均须要使用游标,若是数据库中的游标设置过小,容易引发矢量查询的崩溃。

 

 

                                     -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

                                              若是您以为本文确实帮助了您,能够微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                        

相关文章
相关标签/搜索