当前位置:首页 > 问答 > 正文

想知道怎么调整SDE里那个最大连接数设置,步骤啥的要怎么弄才对

想知道怎么调整SDE(ArcSDE)里的最大连接数设置,这个事说白了就是调整一下数据库能同时接受多少个SDE客户端的“访问名额”,这个设置很重要,如果设置得太小,用户一多就可能报错连不上,提示什么“Maximum number of connections exceeded”;如果设置得太大,又可能白白浪费系统资源,甚至把数据库服务器压垮,下面我就把调整的步骤和需要注意的地方,用大白话给你讲清楚。

你得明白,这个最大连接数的设置,其实不是在SDE的某个桌面软件里点几下就能完成的,根据ESRI官方知识库的文章《How to change the maximum number of connections in an ArcSDE geodatabase》(文章ID:27610),这个限制主要是在数据库层面进行配置的,因为SDE地理数据库本身就是建立在像Oracle、SQL Server、PostgreSQL这类关系型数据库之上的,我们的操作重心要放在数据库上。

第一步:搞清楚你用的是哪种数据库 这是最关键的一步,因为不同的数据库,调整方法完全不一样,常见的搭配有:

想知道怎么调整SDE里那个最大连接数设置,步骤啥的要怎么弄才对

  • SDE for Oracle
  • SDE for SQL Server
  • SDE for PostgreSQL

你得先确认自己的SDE地理数据库是建在哪种数据库之上的,这个信息你的系统管理员应该知道。

第二步:连接数据库,并查看当前设置 无论哪种数据库,你都需要用一个工具登录到数据库服务器上去查看和修改,比如对于Oracle,常用SQLPlus;对于SQL Server,常用SQL Server Management Studio (SSMS);对于PostgreSQL,常用pgAdmin或者psql命令行。

想知道怎么调整SDE里那个最大连接数设置,步骤啥的要怎么弄才对

如果你用的是Oracle: 根据ESRI的另一篇文档《Oracle DBTUNE storage parameters》(此信息可关联上述主要来源),SDE在Oracle中的连接数直接受Oracle数据库的PROCESSES参数控制,这个参数决定了Oracle数据库同时可以有多少个操作系统进程(包括后台进程和用户进程)连接到它,SDE的每个连接都会占用一个用户进程。

  • 查看当前值: 用有DBA权限的用户(比如sys用户)登录SQLPlus,执行下面的命令:
    SHOW PARAMETER processes;

    你会看到一行记录,其中VALUE列就是当前设置的最大进程数。

    想知道怎么调整SDE里那个最大连接数设置,步骤啥的要怎么弄才对

  • 计算需要的新值: 你不能只把PROCESSES设置成你想要的SDE连接数,因为数据库自己还有一些后台进程要运行,一个比较保险的公式是:新的PROCESSES值 = 需要的SDE最大连接数 + 50(为数据库后台进程预留的余量),你想让SDE最多能有150个连接,那么PROCESSES至少应该设为200。
  • 修改设置: 修改PROCESSES参数需要重启Oracle数据库才能生效,这是个比较“重”的操作,一定要在业务空闲时段(比如深夜)进行。
    • 创建一个叫pfile的文本文件(如果还没有的话),可以从当前运行的配置生成:
      CREATE PFILE='/tmp/initorcl.ora' FROM SPFILE;
    • 用文本编辑器打开这个pfile文件,找到*.processes=开头的行,把后面的数字改成你计算好的新值(比如200),如果找不到这行,就自己加一行。
    • 关闭Oracle数据库:SHUTDOWN IMMEDIATE
    • 之后,用修改后的pfile重新启动数据库到mount状态(不一定需要open):STARTUP MOUNT PFILE='/tmp/initorcl.ora'
    • 再根据pfile创建新的spfile(这样重启后才能永久生效),并正常打开数据库:
      CREATE SPFILE FROM PFILE='/tmp/initorcl.ora';
      ALTER DATABASE OPEN;
    • 修改完成后,再次执行SHOW PARAMETER processes;确认新值已经生效。

如果你用的是SQL Server: SQL Server的调整就相对简单一些,因为它不需要重启数据库服务(大多数情况下),限制SDE连接数的参数是SQL Server的“最大并发连接数”(max worker threads)。

  • 查看当前值: 用SSMS登录到SQL Server实例。
    • 在对象资源管理器中,右键点击数据库实例名,选择“属性”。
    • 在“服务器属性”窗口中,点击左侧的“连接”页面。
    • 在右边找到“最大并发连接数”这个选项,如果值是0,代表由SQL Server动态管理,这是默认设置,通常够用,如果设置了一个具体的数字,那就是当前的限制。
  • 修改设置: ESRI知识库文章《ArcSDE connection limitations for SQL Server》建议,如果确实需要修改,可以直接在“最大并发连接数”的框里填入新的数值,比如从0改为200,然后点击“确定”。这个修改通常是立即生效的,不需要重启SQL Server服务,但最好还是确认一下,需要注意的是,SQL Server本身对连接数的管理比较智能,除非确实出现连接瓶颈,否则保持默认值(0)往往是更好的选择。

如果你用的是PostgreSQL: PostgreSQL中控制总连接数的参数是max_connections

  • 查看当前值: 用psql或其他工具连接后,执行:
    SHOW max_connections;
  • 修改设置: 这个参数必须在PostgreSQL的配置文件postgresql.conf中修改。
    • 找到你的PostgreSQL数据目录下的postgresql.conf文件。
    • 用文本编辑器打开它,找到max_connections这一行,去掉行首的注释符(#),然后把值改成你想要的数字,比如150。
    • 保存文件。
    • 修改这个参数后,必须重启PostgreSQL数据库服务才能生效。 所以同样要安排维护时间。

第三步:别忘了SDE服务本身 根据ESRI的说明,除了数据库层面的设置,ArcSDE的服务本身(特别是早期版本的传统ArcSDE应用服务器服务)也可能有一个连接数限制,你需要检查SDE服务的配置文件。

  • 对于使用sdemon命令管理的传统SDE服务,你需要查看%SDEHOME%\etc\giomgr.defsservices.sde文件。
  • 在里面寻找类似MAXCONNECTIONS的参数,如果它存在,并且设置的值比数据库层面的限制还小,那么最终的连接数会以这个更小的值为准,你需要把这个值修改成和数据库新限制相匹配或更大的数字。
  • 修改后,需要使用sdemon命令重启SDE服务才能使更改生效。
  • 非常重要的一点是: 现在ESRI主推的是“直连”模式(Direct Connect),而不是通过SDE应用服务器连接,在直连模式下,客户端是直接连到数据库的,不再经过这个中间层的SDE服务,因此也就不受这个MAXCONNECTIONS参数的限制了,你现在用的很可能是直连模式,所以这一步可能需要,也可能不需要,你得先确认自己的连接方式。

也是最重要的提醒:

  1. 权限问题: 上面这些操作,无论是修改数据库参数还是SDE配置文件,都需要很高的系统管理权限,如果你没有权限,一定要联系你的数据库管理员(DBA)或系统管理员来操作。
  2. 备份与测试: 在修改任何生产环境的配置之前,务必先在测试环境进行演练,修改数据库重要参数(尤其是需要重启的)前,一定要确保有完整的备份和回滚计划。
  3. 评估需求: 不要盲目地把连接数调得非常大,你需要根据实际业务高峰期的用户访问量来估算一个合理的数值,调得过大反而会降低数据库的整体性能。

调整SDE最大连接数的核心就是“对症下药”:先确定数据库类型,然后去修改该数据库对应的核心参数(Oracle的PROCESSES、SQL Server的“最大并发连接数”、PostgreSQL的max_connections),并视情况检查古老的SDE应用服务器配置,整个过程谨慎操作,并做好沟通和预案。