您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_engine

语法


sp_engine {"online" | [offline | can_offline][, <engine_id>] | 
["shutdown", <engine_id>]}

参数

"online"

使引擎联机。sp_configure "max online engines" 的值必须大于当前联机引擎的数量。指定 "online" 使用引号,因为它是一个保留的关键字。

在线程化模式中,online 会使 syb_default_pool 的线程计数增加 1。

offline

使引擎脱机。还可以使用 参数指定让特定的引擎脱机。

在线程化模式中,offline 会使 syb_default_pool 的线程计数减少 1。

can_offline

返回有关是否可以使某个引擎变为脱机的信息。如果其状态是 online,则 can_offline 返回具有此引擎密切连接的 SAP ASE 任务(例如,在 Omni 或 java.net 任务中)。如果未指定 ,则该命令所指出的状态是 sysengines 中具有最高 的引擎的状态。

在线程化模式中,只有在引擎总数小于 syb_default_pool 中的线程总数且 syb_default_pool 中的线程总数大于或等于 2 时,can_offline 才会成功。

<engine_id>

引擎的 ID。 参数是可选的。如果未指定 <engine_id>,则 sp_engine 对 sysengines 中找到的引擎的值使用 <engine_id> 的递增或递减值。也就是说,如果系统使用引擎 0、1、2 和 3,并且您未指定引擎 ID,则 sp_engine 先将引擎 ID 3 脱机,然后将引擎 ID 2 脱机,依此类推。

线程化模式中忽略此参数。

"shutdown"

强制引擎脱机。如果有任何任务与此引擎关联,则在等待 5 分钟后注销这些任务。指定 "shutdown" 使用引号,因为它是一个保留的关键字。

示例

示例 1

使引擎 1 联机。消息是平台特定的(本例使用 Sun Solaris):


sp_engine "online", 1 

02:00000:00000:2001/10/26 08:53:40.61 kernel  Network and device connection 
limit is 3042.
02:00000:00000:2001/10/26 08:53:40.61 kernel  SSL Plus security modules 
loaded successfully.
02:00000:00000:2001/10/26 08:53:40.67 kernel  engine 2, os pid 8624  online
02:00000:00000:2001/10/26 08:53:40.67 kernel  Enabling Sun Kernel 
asynchronous disk I/O strategy
00:00000:00000:2001/10/26 08:53:40.70 kernel  ncheck: Network fc0330c8 
online

示例 2

介绍使引擎脱机的步骤,当前正在运行具有该引擎密切连接的任务:


select engine, status from sysengines

engine    status
------    ------
0         online
1         online
2         online
3         online

如果要让引擎 1 脱机:


sp_engine offline, 1

The following task(s) will affect the offline process:
spid: 19 has outstanding ct-lib connections.

然后运行与上面相同的查询,它现在显示引擎 1 处于脱机状态:


select engine, status from sysengines

engine    status
------    ------
0         online
1         in offline
2         online
3         online

具有引擎 1 密切连接的任务一完成,SAP ASE 服务器就会向错误日志发出一个类似以下内容的消息:


02:00000:00000:2001/10/26 09:02:09.05 kernel  engine 1, os pid
8623  offline

示例 3

确定是否可以使引擎 1 脱机:


sp_engine can_offline, 1

示例 4

使引擎 1 脱机:


sp_engine offline, 1 

SAP ASE 服务器最终返回类似于以下内容的消息:


01:00000:00000:2001/11/09 16:11:11.85 kernel  Engine 1 waiting for 
affinitated process(es) before going offline
01:00000:00000:2001/11/09 16:11:11.85 kernel  Process 917518 is preventing 
engine 1 going offline
00:00000:00000:2001/11/09 16:16:01.90 kernel  engine 1, os pid 
21127  offline

示例 5

关闭引擎 1:


sp_engine shutdown, 1

用法

  • 由于 sp_engine 仅在进程模式中工作,因此,如果在线程化模式中运行 sp_engine,SAP ASE 服务器会发出错误消息。在线程化模式中使用 alter thread pool。

  • 不能将引擎 0 脱机或将其关闭。

  • 使用以下查询,您可以确定引擎的状态,以及哪些引擎当前处于联机状态:

    
    select engine, status from sysengines
    where status = "online"
    

  • online 和 shutdown 是关键字,必须用引号将它们引起来。

  • 仅当 max online engines 大于当前具有 online 状态的引擎数量,并且有足够的 CPU 用来支持额外的引擎时,才能使引擎联机。

  • sp_engine 可以在没有打开的事务时在使用链式事务模式的会话中运行。

  • 如果某些服务器进程与该引擎存在密切连接,则 engine offline 命令可能失败或不立即生效。

    使用 sp_engine“offline”与 sp_engine“shutdown”

    有时,当您使用 sp_engine "offline" 时,引擎不会立即脱机,而看上去是在引擎表中处于“休眠”状态。

    这种情况是不能将附加到引擎的进程迁移到其它引擎导致的。当出现这种情况时,引擎不会接受新的工作,并消耗最低的 CPU 周期。当妨碍 engine offline 完成的进程结束或可进行迁移时,引擎将从休眠状态变为完全脱机状态,并从引擎表中消失。

    sp_engine "shutdown" 是 offline 命令的一个强制性更强的版本。sp_engine "shutdown" 过程将主动注销妨碍引擎脱机的任何进程,强制引擎关闭。

    但是,如果对具有客户端库或 Java 连接的引擎使用 sp_engine "shutdown",则会看到:

    引擎存在尚未完成的 ct-lib/java 连接,因而无法使之脱机。

    当出现这种情况时,请每隔几分钟就重复执行该命令,直到连接消失,这时便可以关闭引擎了。