sp_chgattribute <objname>,
{"max_rows_per_page" | "fillfactor" | "reservepagegap" |
"exp_row_size" | "concurrency_opt_threshold" |
"optimistic_index_lock" | "identity_burn_max" | "plldegree"
"ptn_locking" | "fact_min" | "fact_max" | "fact_unit" }, <value>, < optvalue>
{"identity_gap", <set_number> | "recompile_factor", 0, <value> |
"dealloc_first_txtpg", 0 | 1 | 2}
['<view_name>', 'materialize', 1 | 0]
<objname>
是要更改其属性的表或索引的名称。
max_rows_per_page
指定行大小。对具有可变长度列的表使用此选项。
fillfactor
指定在运行 reorg rebuild 命令或 alter table 命令更改锁定方案而导致重新创建索引或复制表页时,服务器对每页的填充程度。fillfactor 百分比仅在重建索引时才有意义。有效值为 0 到 100。
reservepagegap
指定扩充 I/O 分配操作时填充页与留下的空白页的比率。对于每个指定的
recompile_factor
为行增长设置一个因子,当到达这一因子时,会触发服务器重新编译查询计划。例如,如果将 recompile_factor 设为 20,查询计划会重新编译每个为 20 的因子。也就是说,第一个重新编译在 20 行,下一个在 400 行,第三个在 8,000 行,再下一个在 160,000 行等。
exp_row_size
为仅数据锁定表中的行保留指定数量的空间。使用此选项可以减少转移的行数,更新期间转移行会耗用很多资源。有效值可以是 0、1 以及介于表的最小和最大行长度之间的任何值。0 表示应用全服务器范围的设置,1 表示完全填满数据页上的行。
concurrency_opt_threshold
指定表大小(以页为单位),对仅数据锁定表的访问应该从该大小值开始优化,以减小 I/O(而不是为了并发)。如果表小于 concurrency_opt_threshold 指定的页数,则通常使用可用的索引来为并发进行查询优化;如果表大于 concurrency_opt_threshold 指定的页数,则为 I/O 进行查询优化。有效值为 -1 到 32767。将该值设置为 0 将禁用并发优化。使用 -1 可以对大于 32767 页的表强制并发优化。缺省值为 15 页。
optimistic_index_lock
启用可消除索引根页中的争用的性能优化。如果由于索引拆分而必须更改根页,则会获取排它表。因此,optimistic_index_lock 适用于修改数较小的表。有效值包括 1 和 0,1 表示打开优化索引锁,0 表示关闭优化索引锁,0 是缺省值。
fact_min
与 fact_table 相结合使用表对象过滤带提示的事实表上的行数。只有事实表的行计数大于 fact_min(不包括边界点)的值,才可以在抽象计划子句中使用 fact_min 来配置要应用的事实表提示。如果值小于 fact_min,则故障的原因以 FACTTBL_REASON_SMALLTBL 的形式返回。缺省值为 1。通过 fact_unit 指定的因子对 fact_min 的值进行扩充。
fact_max
与 fact_table 相结合使用表对象过滤带提示的事实表上的行数。只有事实表的行计数小于 fact_max(不包括边界点)的值,才可以在抽象计划子句中使用 fact_max 来配置要应用的事实表提示。如果值大于 fact_max,则故障的原因以 FACTTBL_REASON_HUGETBL 的形式返回。缺省值为 1000000。通过 fact_unit 指定的因子对 fact_max 的值进行扩充。
fact_unit
fact_unit 用作 fact_min 和 fact_max 的缩放因子。通过将 fact_unit 的值设为 -1,fact_unit 也可用于强制拒绝 fact_table 提示。拒绝的原因以 FACTTBL_REASON_FORCEDREJECT 形式返回。缺省值为 1000。
identity_burn_max
允许对 identity 列的内部计数器进行重置。所设置的值表示已生成的最大值;下一个自动生成的值比您指定的值大 1。该值在第四个参数中作为 varchar 数据类型被传递。
identity_gap
表示要更改标识间距。
<value>
是您在 sp_chgattribute 中指定的各个选项的数字输入值。
<optvalue>
是新值。有效值和缺省值取决于指定的参数。只有 identity_burn_max 参数使用此参数。对于其它参数,此值为 NULL。
<set_number>
是标识间距的新大小。
dealloc_first_txtpg
将文本或图像列更新为 null。释放以前引用的 text 或 image 页之后,将对应的文本指针设置为 null。这样将会减少对空 text/images 列的空间分配。有效值包括:
在 NULL 更新后是否释放第一文本页取决于该表和数据库选项 deallocate first text page 的组合。
DB setting (deallocate first text page) | 0 1 2
---------------------------------------------------------
dealloc_first_txtp - true | Y Y N
dealloc_first_txtp - false | N N N
sp_help 的输出指示是否释放第一文本页。
plldegree
指定查询优化程序可以使用的最大线程数。
ptn_locking
指定是否在分区级启用(1)或禁用(0)锁定。缺省情况下,分区锁定处于禁用状态。
'<view_name>', 'materialize', 1 | 0]
启用或禁用强制实例化视图。其中:
<view_name> 是启用或禁用强制实现的视图的名称。
为 authors 表将 max_rows_per_page 设置为 1,以用于以后的所有空间分配:
sp_chgattribute authors, "max_rows_per_page", 1
为 titleidind 索引将 max_rows_per_page 设置为 4,以用于以后的所有空间分配:
sp_chgattribute "titles.titleidind", "max_rows_per_page", 4
为 title_ix 中的页将 fillfactor 指定为 90%:
sp_chgattribute "titles.title_ix", "fillfactor", 90
为 authors 表将 exp_row_size 设置为 120,以用于以后的所有空间分配:
sp_chgattribute "authors", "exp_row_size", 120
为 titleidind 索引将 reservepagegap 设置为 16,以用于以后的所有空间分配:
sp_chgattribute "titles.titleidind", "reservepagegap", 16
关闭 titles 表的并发优化:
sp_chgattribute "titles", "concurrency_opt_threshold", 0
将 mytable 的标识间距设置为 20:
sp_chgattribute "mytable", "identity_gap", 20
更改 mytable 以使用 identity burning set factor 设置而不是 identity_gap 设置:
sp_chgattribute "mytable", "identity_gap", 0
将 sp_chgattribute 的值设置为 1,打开优化索引锁定功能。
sp_chgattribute "mytable", "optimistic_index_lock", 1
将 sp_chgattribute 的值设置为 0,关闭优化索引锁定功能。
sp_chgattribute "mytable", "optimistic_index_lock", 0
使用 dealloc_first_txtpg 打开文本和图像空间的释放:
sp_chgattribute "mytable", "dealloc_first_txtpg", 1
若要关闭此功能:
sp_chgattribute "mytable", "dealloc_first_txtpg", 0
sp_help 的输出指示是否释放第一文本页:
> sp_chgattribute mytab, "dealloc_first_txtpg", 1
'dealloc_first_txtpg' attribute of object 'mytab' changed to 1.
(return status = 0)
1>
2> sp_help mytab
Name Owner Object_type Object_status Create_date
----- ----- ----------- -------------------------- -------------------
mytab dbo user table deallocate first text page Jan 22 2013 9:45PM
> sp_chgattribute mytab, "dealloc_first_txtpg", 2
'dealloc_first_txtpg' attribute of object 'mytab' changed to 2.
(return status = 0)
1>
2> sp_help mytab
Name Owner Object_type Object_status Create_date
----- ----- ------------- -------------------- --------------------
mytab dbo user table keep first text page Jan 22 2013 9:45PM
将 authors 表的 identity_burn_max 值更改为 5:
sp_chgattribute "authors", "identity_burn_max", 0, "5"
指示查询优化程序最多使用 4 个线程:
sp_chgattribute my_table, "plldegree", 4
如果查询优化程序未找到足够的资源,可选择使用较少的线程(即少于 4 个)。此机制同样适用于索引。例如,以下示例使用 authors 上名为 auth_ind 的索引以使用两个线程对它进行访问:
sp_chgattribute "authors.auth_ind", "plldegree", 4
必须从当前数据库中运行 sp_chgatttribute。
为 authors 表启用分区级锁定:
sp_chgattribute authors, "ptn_locking", 1
若要禁用分区级锁定:
sp_chgattribute authors, "ptn_locking", 0
为成功应用 fact_table 提示,需要满足 fact_min 和 fact_max 两者的条件。
有了这些值,fact_table 提示将取决于以下表中的行计数:
sp_chgattribute myTable, fact_min, 100
sp_chgattribute myTable, fact_max, 4000
sp_chgattribute myTable, fact_unit, 500
| 表行计数 | fact_table 提示 |
|---|---|
| row_count <= 100 * 500 | 不应用(原因:FACTTBL_REASON_SMALLTBL) |
| 100 * 500 < row_count < 4000 * 500 | 应用 |
| row_count <= 4000 * 500 | 不应用(原因:FACTTBL_REASON_HUGETBL) |
将 fact_unit 设置为 -1 以强制拒绝 fact_table 提示。
sp_chgattribute myTable, fact_unit, -1
以 FACTTBL_REASON_FORCEDREJECT 形式拒绝 fact_table 提示。
为视图big_important_view 启用强制视图实现。
sp_chgattribute 'big_important_view', 'materialize', 1
使用 sp_chgattribute 时,还存在一些其它注意事项:
sp_chgattribute 'order_line', 'exp_row_size', 1
SAP ASE 服务器将发出类似以下内容的错误消息:
sp_chgattribute is not allowed for order_line, as it is a virtually hashed table.
<identity_gap> 的值。
a 非空 – 则 identity_burn_max 的新值必须大于或等于 identity 列的当前最大值。
b 空 – 则可将该值设置为有效范围内的任意正值。
若要大概算出非聚簇索引的最大值,可将页大小减去 32,然后将所得的值除以索引键大小。以下语句计算非聚簇索引 titleind 的 max_rows_per_page 的最大值:
select
(select @@pagesize - 32) / minlen
from sysindexes where name = "titleind"
-----------
288
对列进行新的更新会导致重新分配 text 或 image 页。