ArcSDE连接数设置及其性能说明

ArcSDE连接数设置及其性能说明

       在ArcSDE的实际应用过程中,用户的业务需求一般都是多用户并发操作,这也是ArcSDE区别于文件Geodatabase的标志性功能,多用户操作也就是多个Session并发连接,那么ArcSDE连接数就显得尤为重要了。

       如果用户在使用过程中往往会报如下错误: 

“Failedto connect to database. Maximum number of conections to instance exceeded”。

       一般遇到这种情况往往是重启ArcSDE服务,即可,但是过一段时间系统又会报如下错误,那么在ArcSDE工作当中,有哪些方面来影响连接数呢?

ArcSDE连接数设置及其性能说明_第1张图片

连接数的限制

       根据上图(以Windows操作系统为例,ArcSDE与数据库在一台机器安装),我们看到如果这是一台ArcSDE的数据库服务器,其他客户端来连接这台机器的,首先我们是进入操作系统,然后是通过ArcSDE来连接Oracle数据库,那么我们可以理解为操作系统、ArcSDE、数据库都有一个连接数的限制,当然根据“木桶原理”,在这三个连接数当中默认的是ArcSDE的连接数最小,所以当出现连接数不够使用的话,首先报的就是上面所示的ArcSDE连接数的问题。

ArcSDE连接数

       ArcSDE连接数在Windows操作系统上是48个,在非Windows操作系统上是64个。我们可以通过ArcSDE命令进行查询。

C:\Users\gis>sdeconfig -o list -P CONNECTIONS-i esri_sdeora -s lish -u sde -p sde
 
ArcSDE 10.0 for Oracle11g Build 1343 Thu Feb 17 11:45:42  2011
SDE Server Configuration Tool    Administration Utility
-----------------------------------------------------
CONNECTIONS         48

       我们可以通过ArcSDE命令来修改这些值

C:\Users\gis>sdeconfig -o alter -vCONNECTIONS=64 -i esri_sdeora -s lish -u sde -p sde
 
ArcSDE 10.0 for Oracle11g Build 1343 Thu Feb 17 11:45:42  2011
SDE Server Configuration Tool    Administration Utility
-----------------------------------------------------
Alter SERVER_CONFIG Table. Are you sure? (Y/N):y
 
       Successfully altered SERVER_CONFIG Table.

Windows连接数

       在 Windows 中,ArcSDE 服务以非交互桌面形式启动。名为 SharedSection 的 Windows 初始化参数用于设定分配给非交互桌面的堆内存上限值。

       无论是交互桌面还是非交互桌面,所有桌面的可用堆内存上限值均为 48 MB。由于内存量有限,因此,应注意调节 SharedSection 参数。若 ArcSDE 服务以域帐户启动,则 gsrvr.exe 会从桌面分配一个大小为 512 KB 的非交互桌面堆,专门用于 ArcSDE 服务。若 ArcSDE 服务以 LocalSystem 帐户启动,则 gsrvr.exe 会从共享桌面分配一个大小为 512 KB 的非交互桌面堆,专门用于以 LocalSystem 运行的所有服务。若 ArcSDE 服务以 LocalSystem 帐户启动(使用“允许”服务与已启用桌面交互),则gsrvr.exe 会从默认桌面分配一个大小为 3 MB 的交互桌面堆。解决方案解决方案取决于 ArcSDE 平台。目前无法确定单个桌面使用的内存量,也无法确定全局池中剩余的内存量。

         更改注册表中的 SharedSection 参数。

          估计所需 gsrvr 的数量。对于类似 ArcView、ArcEditor 和 ArcExplorer 等客户端,一个 gsrvr 通常表示一个 ArcSDE 连接。而对于 ArcIMS 来说,gsrvr 的数量取决于服务类型。假设每个空间服务器 CPU 有两个虚拟服务器线程,以下为通用公式:

(2 image service threads * total CPUs) + (numberof query server threads)

         例如:(2 * 8) + 8 = 24 个 gsrvr,此建议还假定使用了图像和查询服务,而且,所有的 AXL 以相同用户和数据库连接到 ArcSDE 服务器。若您的 AXL 中引用了不同的数据库或用户,则公式如下:

(#databases * #mapservice threads)+(#dbs*#queryservices)

         若 gsrvr 的数量超过 64 个 -ArcSDE SERVER_CONFIG 表中的默认 CONNECTIONS 设置 - 需考虑是将其中的某些连接改为直接连接,还是增大注册表中的第三个SharedSection 参数。由于直接连接以客户进程中的线程运行,因此,不会在 ArcSDE 服务器上为其分配桌面。

        警告:继续操作之前,建议备份您的操作系统及文件,包括注册表。

\\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems

       该字符串中包含 Windows 的启动参数。该字符串中包含 SharedSection 参数。其默认值为 1024,3072,512。其中,第三个参数是分配给非交互桌面的堆内存上限值。默认情况下,其设定值为 512 KB 或 1 MB。如果使用此设置,一个 ArcSDE 服务大约可接受 56 个连接。如果将非交互桌面的最大堆大小增至 2 MB,则 ArcSDE 服务最多可接受 270 个连接。如果将非交互堆大小设置为 2 MB(2048KB),则 SharedSection 值为 1024,3072,2048。

       注意该值不要修改的过大,否则会出现错误。

        一旦 SharedSection 被更改,则必须重新启动服务器。

        说明一下

Windows XP:SharedSection=1024,3076,512
Windows7:SharedSection=1024,20480,768

Oracle连接数

       Oracle的连接数一般是Processes参数和Sessions参数来设定的。

SQL> show parameter processes
 
NAME                                 TYPE        VALUE
------------------------------------ --------------------------
aq_tm_processes                      integer     0
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     4
processes                            integer     150

       ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关,它们的关系如下:

 sessions=(1.1*process+5)

       通过SQL语句来修改连接数

SQL> alter system set processes=300scope=spfile;
系统已更改。

为什么ArcSDE连接数会增多

       怎么看,这句话就是废话,其实想表达的是,为什么我的用户连接明明不到48个,也许就是几个或者十几个,但是系统往往也会提示已经超出最大连接数,这是为什么呢?

       那么我们就需要了解一个名词叫“Orphaned gsrvr process”(孤立进程或者叫无效连接),出现这种情况就是用户可能会在正在连接的工作过程导致死机或者长时间未响应,那么用户往往采取直接使用任务管理器杀掉ArcMap或者ArcCatalog的进程,那么在系统中往往对这些已经杀掉的进行但是ArcSDE仍然会认为这还是一个连接,这种连接还是会占用连接数的,所以这种情况越来越多,那么连接数就越来越大,也就出现了这个问题。

       我们可以使用ArcSDE命令来查询这些无效连接   

C:\Users\gis>sdemon-o info -I users

       使用该命令我们可以查询,如果连接时间在几个月前等情况,这些连接就可能是无效连接。

怎么样清除这些无效连接呢?

       使用ArcSDE参数修改,可以清除上述所谓的无效连接。

C:\Users\gis>sdeconfig  -o alter -v TCPKEEPALIVE=TRUE -i esri_sdeora-u sde -p sde
 
ArcSDE 10.0 for Oracle11g Build 1343 Thu Feb 17 11:45:42  2011
SDE Server Configuration Tool    Administration Utility
-----------------------------------------------------
Alter SERVER_CONFIG Table. Are you sure? (Y/N):y
 
       Successfully altered SERVER_CONFIG Table.       

       修改TCPKEEPALIVE参数(默认设置为False),修改为TRUE,系统就可以进行自动清除无效连接了。对Windows操作系统来说,默认2个小时清除一次。

怎么修改清除时间

       上面提到在Windows操作系统来说,默认2个小时,那么是否可以将这个时间修改为用户任意想要的时间,比如说5分钟,当然可以。那么我们需要在操作系统注册表添加一项KEEPALIVETIME值来确定这个时间值。

Local_Machine\system\CurrentControlSet\Services\Tcpip\Parameters

添加DWORD项:KeepAliveTime(单位:毫秒)

然后重启一下操作系统即可。

ArcSDE连接数设置及其性能说明_第2张图片

Sun Solaris

在 Sun Solaris 使用ndd 命令-set选项来进行设置tcp_keepalive_interval配置.

# ndd -set /dev/tcptcp_keepalive_interval 300000

同进这个时间指的是毫秒.

IBM AIX

在 IBM AIX 使用 no 命令来设置通讯参数s.

no -o tcp_keepidle=591

这个时间指的是半秒单位.

HP HP-UX

在 HP HP-UX 运用

ndd -set /dev/tcptcp_time_wait_interva.l 300000

同进这个时间指的是毫秒..

RedHat Linux

在RedHat Linux 修改下面文件中的几部分/etc/sysctl.conf 文件, 并且重启网络 daemon (/etc/rc.d/init.d/networkrestart).

·# Decrease the time default value for tcp_keepalive_time
tcp_keepalive_time = 1800

其他说明

       问题1:直连是否也占用连接数?

       回答:是的。  

       问题2:设置清除无效连接是否也清除直连连接?

       回答:不清除。


ArcSDE9.2 SP5解决了一个Bug,大家留意一下:

NIM010667 - Setting the ArcSDE server configuration TCPKEEPALIVE parameter to true does not terminate orphaned gsrvr processes as it should.


 文档下载地址:http://download.csdn.net/source/3487666

-------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
QQ群:              78773981
Blog:               http://blog.csdn.net/linghe301
Weibo:            http://www.weibo.com/linghe301

-------------------------------------------------------------------------------------------------------

By Lish

你可能感兴趣的:(oracle,windows,数据库,server,Integer,oracle11g)