dbcc配置过程
目标数据库:andkylee,大小:3300M,其中数据段2700M,日志段600M。为其配置dbcc检查使用 dbcc checkstorage 的准备工作
1.根据用户数据库andkylee的情况获取dbccdb的空间大小、工作空间大小、高速缓存大小、工作进程数的建议值
sp_plan_dbccdb "andkylee"
go
显示结果如下:
Recommended size for dbccdb database is 94MB (data = 92MB, log = 2MB).
No suitable devices for dbccdb in master..sysdevices.
Recommended values for workspace size, cache size and process count are:
dbname scan ws text ws cache comp mem process count
andkylee 40576K 10176K 10151K 0K 3
(return status = 0)
由上,建议dbccdb的空间大小至少94M(其中数据段至少92M,日志段至少2M),scan工作空间至少40576K,text工作空间至少10176K,命名高速缓存至少10151K,工作进程数至少3个。
2.如果必要,调整ASE的工作进程数
在ASE中配置4个工作进程,配置dbccdb最大可用工作进程数为:3
sp_configure "number of worker processes",4
go
3.为dbccdb创建命令高速缓存dbccdb_cache
配置一个dbcc checkstorage专用的命名高速缓存,不仅可以提高性能并且还可以使数据库的一致性检查对其他用户的影响降到最小。dbcc checkstorage要求在命名高速缓存中创建8页的I/O缓存池。
配置大小为30M的命令高速缓存dbccdb_cache,其中8页的I/O缓存池为10M
sp_cacheconfig dbccdb_cache,"30M"
go
命令高速缓存dbccdb_cache需要重启ASE后才能生效。
配置10M的8页I/O缓冲池:
sp_poolconfig dbccdb_cache,"10M","32k"
go
使用命令sp_cacheconfig dbccdb_cache查看命令高速缓存,结果如下:
Cache Name Status Type Config Value Run Value
------------ -------- -------- -------------- ------------
dbccdb_cache Active Mixed 30.00 Mb 30.00 Mb
------------ ------------
Total 30.00 Mb 30.00 Mb
==========================================================================
Cache: dbccdb_cache, Status: Active, Type: Mixed
Config Size: 30.00 Mb, Run Size: 30.00 Mb
Config Replacement: strict LRU, Run Replacement: strict LRU
Config Partition: 1, Run Partition: 4
IO Size Wash Size Config Size Run Size APF Percent
-------- ------------- ------------ ------------ -----------
4 Kb 4096 Kb 0.00 Mb 20.00 Mb 20
32 Kb 2048 Kb 10.00 Mb 10.00 Mb 20
(return status = 0)
4.如果dbccdb存在,则在创建新的dbccdb数据库之前,删除它及其相关的所有设备
use master
go
if exists (select * from master.dbo.sysdatabases where name = "dbccdb" )
begin
print "Dropping the dbccdb database................"
drop database dbccdb
end
go
5.初始化用于dbccdb数据和日志的磁盘设备dbccdb_dat和dbccdb_log
为用户数据库andkylee建议的dbccdb的数据段至少92M,日志段至少2M。在此创建大小为200M的设备dbccdb_dat,20M的设备dbccdb_log。
use master
go
disk init name = 'dbccdb_dat',
physname = 'd:\syb_data\dbccdb_dat.dat',
size = '200M'
go
disk init name = 'dbccdb_log',
physname = 'd:\syb_data\dbccdb_log.dat',
size = '20M'
go
6.在数据库设备上创建dbccdb数据库
use master
go
create database dbccdb
on dbccdb_dat= '200M'
log on dbccdb_log='20M'
go
7.将用于 scan 和 text 工作空间的段添加到 dbccdb 的数据设备上
use dbccdb
go
sp_addsegment scanseg,dbccdb,dbccdb_dat
go
sp_addsegment textseg,dbccdb,dbccdb_dat
go
8.填充dbcc数据库并安装dbcc存储过程
installdbccdb 脚本在试图创建表之前检查数据库是否存在。它只创建dbccdb 中尚未存在的那些表。如果任何一个 dbccdb 表被损坏,请使用 drop table 将其删除,然后使用 installdbccdb 重新创建。
isql -Usa -P<password> -S<servername> -i%SYBASE%\%SYBASE_ASE%\scripts\installdbccdb -odbccdb.log
9.创建并初始化 scan 和 text 工作空间
scan工作空间至少40576K,text工作空间至少10176K。在此创建120M的scan工作空间:scan_andkylee,50M的text工作空间:text_andkylee
use dbccdb
go
sp_dbcc_createws dbccdb, scanseg, scan_andkylee, scan, "120M"
go
sp_dbcc_createws dbccdb, textseg, text_andkylee, text, "50M"
go
删除工作空间使用 drop table scan_andkylee
10、 更新dbcc_config配置值
max worker processes 为每个目标数据库指定 dbcc checkstorage 使用的工作进程最大数,而 number of worker processes 指定 Adaptive Server 支持的工作进程总数。工作进程不是专用来运行 dbcc checkstorage 操作的。
将 number of worker processes 的值设置得足够高,使之支持 max worker processes 指定的进程数。工作进程数低会降低 dbcc checkstorage 的性能,减少其资源消耗。 dbcc checkstorage 使用的进程数不会多于数据库使用的数据库设备数。
maximum parallel degree 和 maximum scan parallel degree 对于 dbcc checkstorage 的并行功能没有影响。将 maximum parallel degree 设置为 1时,不会禁用 dbcc checkstorage 中的并行度。
dbcc checkstorage 需要多个工作进程,所以 number of worker processes 必须至少设置为 1 以支持父进程和工作进程。
use dbccdb
go
--为数据库andkylee配置最大工作进程数:3
exec sp_dbcc_updateconfig andkylee,"max worker processes","3"
--为数据库andkylee绑定30M的dbccdb_cache
exec sp_dbcc_updateconfig andkylee,"dbcc named cache",dbccdb_cache,"30M"
--为数据库andkylee指定scan和text工作空间
exec sp_dbcc_updateconfig andkylee,"scan workspace",scan_andkylee
exec sp_dbcc_updateconfig andkylee,"text workspace",text_andkylee
exec sp_dbcc_updateconfig andkylee,"OAM count threshold","5"
exec sp_dbcc_updateconfig andkylee,"IO error abort","3"
exec sp_dbcc_updateconfig andkylee,"linkage error abort","8"
go
11.显示目标数据库的配置信息
sp_dbcc_configreport
go
12.检查数据库andkylee
dbcc checkstorage(andkylee)
go
检查结果如下:
Checking andkylee: Logical pagesize is 4096 bytes
(return status = 0)
DBCC CHECKSTORAGE for database 'andkylee' sequence 1 completed at Sep 26 2012 4
:42PM. 3 faults and 75248 suspect conditions were located. 0 checks were aborted
. You should investigate the recorded faults, and plan a course of action that w
ill correct them.
Suspect conditions are to be treated as faults if the same suspect condition per
sists in subsequent CHECKSTORAGE operations, or if they are also detected by oth
er DBCC functions.
13.生成dbcc报告
sp_dbcc_summaryreport在指定的日期或该日期之前为指定的数据库完成的所有dbcc checkstorage操作。
sp_dbcc_summaryreport
go
BCC Operation : checkstorage
================================================================================
Database Name Start time End Time Operation ID Hard Faults Soft Faults Text Columns Abort Count User Name
------------------------------ -------------------- ---------- ------------ ----------- ----------- ------------ ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
andkylee 09/26/2012 16:40:27 16:42:32 1 3 75248 6355 0 sa
(1 row affected)
================================================================================
(return status = 0)
14.报告数据库对象中发现的故障
sp_dbcc_faultreport 报告指定数据库对象中在指定日期或该日期之前发生的故障。可生成短报告,也可生成长报告。下面显示短报告:
sp_dbcc_faultreport 'short'
go
Database Name : andkylee
Table Name Index PartitionId Fault Type Page Number
-------------- ------- ----------------- ---------------------------------------- -----------------
ALLOCATION 0 99 100007 (extent id error) 1008
sysencryptkeys 0 98 100033 (non-contiguous free space error) 633
sysencryptkeys 0 98 100036 (deleted row count error) 633
(1 row affected)
(return status = 0)
由上面得检查结果,可以看到用户数据库andkylee的页面633和1008存在分配错误。
执行: dbcc page('andkylee',1008,1)报下面的错误:
DATA:Error: Non-first OAM page 1008 has non-zero OAMSTRUCT entries: total_used: 2 total_unused: 6 rowsperpage: 0
Error: Non-first OAM page 1008 has attribute entries: Attribute status:1, Attribute count: 10
OAM pg # 0: 1008 has the following 1 entry (allocpg:used/unused):
[ 0] 768: 2/ 6
执行: dbcc page('andkylee',633,1)的结果如下:
PAGE HEADER:
Page header for page 0x2C413000
pageno=633 nextpg=0 prevpg=0 ptnid=98 sysencryptkeys timestamp=0000 0010b6ff
nextrno=2 level=0 indid=0 freeoff=471 minlen=22
page status bits: 0x811 (0x0800 (PG_XHEADER), 0x0010 (PG_RNOFREE), 0x0001 (PG_DATA))
second set of page status bits (dol_stat2): 0x02 (0x02 (PG2_DOL_DATAPG))
dol_pprivstat status bits: 0x00 (0x00)
pagesize=4096, page version=1, ncfs=169, ndeleted=65535, insert free space=3672
pagetailts=0xb6ff
ndeleted的值明显大于DOL页面允许的最大行数:337。
Item dependent on page size : 2048 4096 8192 16384
-----------------------------------------------------------------------------------------------------------
Max number of rows per APL data page : 256 256 256 256
Max number of rows per DOL data page : 166 337 678 1361
15.生成指定对象的分配统计报告
sp_dbcc_statisticsreport andkylee,"sysobjects"
go