创建 SAP ASE 登录名或/和应用程序(或两者)执行查询、查询批处理或事务时可以使用的服务器资源的数目限制。
sp_add_resource_limit <name>, <appname>, <rangename>, <limittype>, <limitvalue>
[, <enforced>[, <action>[, <scope> ]]]
是对其应用限制的 SAP ASE 登录名。必须指定
是对其应用限制的应用程序名称。必须指定
是强制执行限制的时间范围。该时间范围在您创建限制时必须存在于 master 数据库的 systimeranges 系统表中。
是要限制的资源的类型。此参数必须是下列项之一:
是在 SAP ASE 服务器强制执行限制之前登录名或应用程序可以使用的服务器资源(I/O 开销、以秒计算的经历时间、行计数或 tempdb 空间)的最大量。这必须是一个小于或等于 231 的非零正整数。下表列出了应为每种限制类型指定的值:
确定是在执行查询前还是执行查询时强制应用限制。下表列出了每种限制类型的有效值:
| enforced 代码 | 说明 | 限制类型 |
|---|---|---|
| 1 | 当执行的估计 I/O 开销超过了指定的限制时执行操作。 | io_cost |
| 2 | 当执行的实际行计数、经历时间或 I/O 开销超过了指定的限制时执行操作。 | row_count elapsed_time io_cost lock_count |
| 3 | 当估计开销或实际开销超过指定的限制时执行操作。 | io_cost |
如果指定
如果未指定
是在超出限制时采取的操作。以下操作代码对所有限制类型都有效:
如果未指定
是限制的作用域。指定以下适用于限制类型的代码之一:
如果未指定
创建在 early_morning 时间范围内应用于 payroll 应用程序所有用户的资源限制。如果查询批处理的执行时间超过 120 秒,则 SAP ASE 服务器将发出警告:
sp_add_resource_limit NULL, payroll, early_morning, elapsed_time, 120, 2, 1, 2
创建在 midday 时间范围内应用于由“joe_user”运行的所有即席查询和应用程序的资源限制。当查询返回的行数超过 5000 行时,SAP ASE 服务器中止事务:
sp_add_resource_limit joe_user, NULL, midday, row_count, 5000, 2, 3, 1
创建在 midday 时间范围内应用于由“joe_user”运行的所有即席查询和应用程序的资源限制。当优化程序估计 I/O 开销将超过 650 时,SAP ASE 服务器中止事务:
sp_add_resource_limit joe_user, NULL, midday, io_cost, 650, 1, 3, 1
将 joe_user 能够在一个会话中同时打开的锁数设置为 10000:
sp_add_resource_limit "joe_user", NULL, "at all times", "lock_count", 10000
在为用户 sa 和应用程序 isql 释放查询之前,将空闲时间的长度设置为 10 秒;at all times 表示时间范围包含一天中的所有小时,2 表示在执行时间之前强制使用限制,4 表示在超过 10 秒时执行操作,8 表示限制范围针对此会话:
sp_add_resource_limit sa, isql, 'at all times', idle_time, 10, 2, 4, 8
有关使用 sp_add_resource_limit 的其它注意事项。
您必须启用sp_configure "allow resource limits" 以使资源限制生效。
给定的用户、应用程序、限制类型、作用域和强制时间可以存在多个资源限制,但前提是这些资源限制的时间范围不重叠。
对登录名和/或应用程序名的当前活动的指定时间范围和“at all times”范围的所有限制都会在登录时绑定到用户的会话。因此,如果用户独立于给定的应用程序登录到 SAP ASE 服务器,则不适用同时限制用户与该应用程序的资源限制。若要确保对该用户的限制,请创建一个特定于该用户并独立于任何应用程序的资源限制。
由于确定资源限制要使用用户登录名或应用程序名(或者使用两者),因此 SAP ASE 服务器在扫描 sysresourcelimits 表以搜索适用于登录会话的限制时,遵守预定义的搜索优先顺序。下表说明了匹配的有序登录名和应用程序名对的优先级:
| 级别 | 登录名 | 应用程序名 |
|---|
|1|“joe_user”|payroll
| 2 | NULL | payroll |
|---|
如果在给定的优先级别中发现了一个或多个匹配项,则不会搜索其它级别。这样可防止用于不同登录/应用程序组合的类似限制之间出现冲突。
如果在所有级别都没有发现匹配项,则不对会话进行限制。
例如,如果限制某个用户在上午 9:00 到下午 1:00 间检索 50 行,则不能对同一个用户创建另一个限制他在上午 10:00 到中午 12:00 间检索 100 行的资源限制。但是您可以创建一个资源层次,例如指定用户 在上午 10:00 到中午 12:00 间检索 100 行的限制,并指定应用程序(如 isql)在上午 9:00 到下午 1:00 间检索 50 行的限制。
虽然在当前事务达到其时间限制时 SAP ASE 服务器会终止该事务,但在您发出另一个 SQL 命令或批处理之前,不会收到 11005 错误消息;换句话说,只有当您再次尝试使用该连接时才显示该消息。