目录
F
F
F
F
F
F
F
第一章 sqlserver2008架构和配置
版本
SELECT SERVERPROPERTY('Edition') --Developer Edition (64-bit) SELECT SERVERPROPERTY('EngineEdition') --3
EngineEdition返回:2、3、4
可能是企业版,评估版,开发版
2 标准版 工作组版
3 开发版
4 express版 Windows embedded SQL
F
sql元数据
SELECT [name] FROM sys.[objects] WHERE [type_desc]='system_table'
兼容性视图,兼容sql2000
sql2005和sql2008的新功能不包含在兼容性视图里,例如表分区和资源调控器
兼容性视图只是为了向前兼容,在将来版本sqlserver将会删除所有兼容性视图
F
使用sql2008查询sysprocess中所有可用信息时,你必须访问3个DMV:
SYS.[dm_exec_connections]
SYS.[dm_exec_requests]
SYS.[dm_exec_sessions]
因为增加了MARS,所以sql2000的sysprocess不能标识出单个连接了
目录视图显示的列完全不同于兼容视图中的列
--目录视图 SELECT * FROM sys.[databases] --兼容视图 SELECT * FROM sys.[sysdatabases]
F
查看视图定义
SELECT OBJECT_DEFINITION(OBJECT_ID('sys.[tables]')) SELECT * FROM sys.[system_sql_modules] WHERE [object_id]=OBJECT_ID('sys.[tables]')
sys.objects包含各种对象类型通用的所有属性列,sys.tables和sys.views包含有与sys.objects完全相同的列
F
信息架构视图
系统函数
sql7.0引入了系统函数,在sql2000中增强了这些函数
属性函数
F
如果只查看sue是否拥有某一个数据库访问权限,则无法使用系统提供的存储过程,使用目录视图这些查询将非常简单
SELECT [name] FROM sys.[databases] WHERE SUSER_NAME([owner_sid])='sue'
sql2008元数据层跟sql2005几乎一样
F
sqlserver数据库引擎主要组件
关系引擎(也称为查询处理器),存储引擎,SQLOS
DMV也可以管理数据仓库(sql2008的新功能)的性能报告提供更多有效数据
F
dm_exec_:执行有关的
dm_os_:系统信息
dm_tran_:事务细节信息
dm_io_:网络和磁盘I/O活动 ,SELECT * FROM sys.[dm_io_virtual_file_stats]()函数返回数据和日志文件的I/O统计信息
dm_db_:数据库和数据库对象细节信息:SELECT * FROM sys.dm_db_index_physical_stats()
使用MDAC2.8或更早版本的客户端无法使用共享内存协议
F
sql2008还允许你创建TDS端点,以便sqlserver侦听附加的TCP端口,例如镜像
查询优化和查询执行
关系引擎(优化器)和存储引擎的通信 使用OLEDB行集(row set)实现,行集是OLEDB结果集术语,存储引擎包含需要真正访问和修改磁盘数据的组件
查询优化器
无法优化的语句:例如控制流和DDL命令将被编译为内部形式,可优化的语句将被做上标记,然后传递到查询优化器
查询树
规范化树
F
查询优化器使用修剪启发式算法
对于after触发器:触发器计划(生成触发器执行计划)在修改语句激活触发器之后和提交修改之前执行
触发器的特定步骤没有编译到执行计划中
查询执行器的详细介绍:http://sqlserverinternals.com/companion/
存储引擎主要包括3部分:访问方法,锁,事务服务,实用工具命令
访问方法实际不检索页面,他向缓存管理器发送请求,最后缓存管理器在其缓存中提供页面,
或者从磁盘读取页面到缓存,look-ahead预测行机制对页面上的行货索引条目进行鉴定
F
所有用户数据都存储在数据页或LOB页上
事务4个属性:原子性,一致性,隔离性,持久性
F
事务服务
事务管理组件
F
其他操作:存储引擎还包含用于控制实用工具的组件:例如大容量加载,dbcc命令,全文索引填充和管理,备份和还原
SQLOS
SQLOS的两个主要函数是计划和内存管理,同步化,内存broker,sqlserver异常处理,死锁检测,扩展事件,异步I/O
扩展事件:sql2008的资源调控器使用扩展事件管理资源使用率
numa架构
F
numa节点中的CPU数目取决于硬件生产商
内存节点是基于硬件numa而创建的,因此不受软件numa的影响
将scheduler翻译成计划程序,一头雾水
SQL2005之前的scheduler称为用户架构scheduler(UMS) user Management scheduler
SQL2005和2008称scheduler为SOSscheduler,并进一步改进了UMS system optimization scheduler
多任务等待 等待类型
SOS_SCHEDU-LER_YIELD 223
http://www.golden-book.com/booksinfo/17/1754478.html
F
当更改关联掩码时,导致scheduler从online向offline切换时,已经分配给该scheduler的任何工作必须先完成,并且系统不再向该scheduler分配新工作
sqlserver工作线程 workers
SQLSERVER使用自己的计划程序sql agent而放弃Windows的计划程序scheduler,这样做可以获取更高的控制权和可伸缩性
F
spid优先分配给负载最低的scheduler
SELECT [load_factor] FROM sys.[dm_os_schedulers]
线程和纤程
每个numa节点都有自己的惰性写入器和IOCP io完成端口 iocp是一种网络侦听器
sql mail和sql xml需要线程模型
http://support2.microsoft.com/ph/2855
numa和scheduler
单个处理或SMP机器被看成是单个numa
scheduler和含有numa的cpu之间不存在硬映射
F
当非闲置线程没有让出scheduler,scheduler监视器将产生错误(17883),当应用程序(不是sqlserver)独占CPU时,将出现17883错误
scheduler监视器还负责向scheduler发送消息,帮助他们平衡工作负荷
使用trace flag 跟踪标志8002启动sqlserver,通过使用跟踪标志,将cpu映射到某个实例上
将scheduler绑定到cpu
scheduler和CPU不是一对一的关系,负载不大时,Windows可以在一个cpu上运行两个scheduler
F
parent_node_id:scheduler所属节点id,也称为父节点,代表numa节点
sys.[dm_os_schedulers]视图解释
F
F
DAC
SELECT * FROM SYS.[tcp_endpoints] AS E JOIN SYS.[dm_exec_sessions] AS S ON E.[endpoint_id]=S.[endpoint_id] WHERE E.[name]='DEDICATED ADMIN CONNECTION' name endpoint_id principal_id protocol protocol_desc type type_desc state state_desc is_admin_endpoint port is_dynamic_port ip_address Dedicated Admin Connection 1 1 2 TCP 2 TSQL 0 STARTED 1 0 1 NULL TSQL Default TCP 4 1 2 TCP 2 TSQL 0 STARTED 0 0 1 NULL inven 65536 261 2 TCP 3 SERVICE_BROKER 0 STARTED 0 4030 0 NULL
默认情况下,DAC只能本地使用,但DBA也可以配置DAC允许远程连接
sp_configure 'remote admin connections', 1; GO RECONFIGURE; GO
只能用sysadmin服务器角色成员连接
DAC不能执行backup 和restore 操作
通过DAC分配的特殊线程,不能终止该线程(DAC线程不停监听),只能终止DAC会话,DAC scheduler具有最高优先级 255 ,DAC 没有惰性写入器,有自己的IOCP,workers和闲置线程
F
express只能使用7806跟踪标志来开启DAC
内存
为什么数据页面中只有 dbid,fileno,pageno,因为sqlserver使用 dbid,fileno,pageno三者标识符生成哈希函数生成哈希存储桶,哈希桶中的key,即使庞大内存,也能在几秒钟找到内存中的数据页面
哈希存储桶的数目由sqlserver设置,具体数目取决于缓冲池的总容量
sql6.5的时候是可以手动设置哈希存储桶的
EXEC sys.[sp_configure] @configname = 'advanced options', -- varchar(35)
@configvalue = 1 -- int
RECONFIGURE WITH OVERRIDE
--HASH buckets
--DBCC BUFCOUNT
--DBCC SQLPERF(HASHSTATS)
访问内存中的数据页
buffer pool里面的页面使用哈希存储方法
F
管理数据缓存中的页面
LRU-K算法
F
使操作系统的可用物理内存保持在5MB(偏移量在200kb左右)大小,以防止page out,如果操作系统可用内存小于5mb,惰性写入器将释放内存给操作系统
触发checkpoint
1、sql2008中,使用checkpoint命令可以同时运行多个checkpoint(在不同的数据库)
2、为了自动激活checkpoint,必须完成的最少工作量一般是每分钟10MB日志
F
sqlserver扩展事件sqlserver.checkpoint_begin和sqlserver.checkpoint_end来监视checkpoint的活动情况
checkpoint进程通过缓冲池时按无序方式扫描页面,把脏页 使用单个写入的方式,类似mysql的double write,gather-write
在配置管理器里,指定sqlserver服务的启动参数 使用-k 参数 ,其后再跟上小数,指定的值表示checkpoint进程每秒可以写入的兆字节数
这样可以控制checkpoint的IO,但是当参数值很低的时候,将导致较长的恢复时间
在产品环境上使用 -k参数之前,应该确保有足够的硬件来支持sqlserver提交的IO请求
时钟算法
除了数据缓存之外,sql2008使用共同的缓存框架 cache store
包括:缓存存储,用户存储(该存储类型实际和用户无关),对象存储
缓存存储:执行计划
用户存储:元数据
对象存储:SNI 网络缓冲区
F
memory broker
SELECT * FROM sys.[dm_os_ring_buffers] WHERE [ring_buffer_type]='ring_buffer_memory_broker' <Record id = "652" type ="RING_BUFFER_MEMORY_BROKER" time ="27376318"><MemoryBroker><DeltaTime>817</DeltaTime><Pool>1</Pool><Broker>MEMORYBROKER_FOR_RESERVE</Broker><Notification>GROW</Notification><MemoryRatio>100</MemoryRatio><NewTarget>10506</NewTarget><Overall>11093</Overall><Rate>0</Rate><CurrentlyPredicted>0</CurrentlyPredicted><CurrentlyAllocated>0</CurrentlyAllocated><PreviouslyAllocated>0</PreviouslyAllocated></MemoryBroker></Record>
F
32位操作系统没有使用AWE的话,不推荐启用 “锁定内存页”,虽然sqlserver在未启用AWE时将忽略“锁定内存页”,否则系统上的其他进程可能会受影响
F
target memory
SELECT * FROM sys.[dm_os_sys_info]
F
SELECT DISTINCT [type] FROM sys.[dm_os_memory_clerks]
F
[buckets_avg_scan_hit_length] 在找到搜索项之前,存储桶中已检查条目的平均数
非常大的数可能说明小于最佳缓存 ,可以考虑运行DBCC FREESYSTEMCACHE('all')来删除缓存存储中的未用条目.
--object plans:指定要释放对象计划(存储过程,触发器,用户定义函数的执行计划)
DBCC FREESYSTEMCACHE('object plans')
--sql plans:指定要释放即席(ad-hoc)语句的计划,包括预编译的语句
DBCC FREESYSTEMCACHE('sql plans')
--bound trees:指定要释放视图,约束,默认的计划
DBCC FREESYSTEMCACHE('bound trees')
--力伟的文章 清空引用tempdb的session http://www.cnblogs.com/stswordman/p/3358496.html
--DBCC FREESYSTEMCACHE('ALL')指定all即清空object plans、sql plans、bound trees
clock_hand 时钟指针类型 外部指针 内部指针 ,记住,每个存储都有两个时钟指针类型
非本地内存和外来内存不一样
numa节点使用其他节点的内存,称为外来内存,外来内存被看成是本地内存
非本地内存 跨节点访问内存
没有硬件numa的计算机上使用软件numa的优势是减少IO和惰性写入器瓶颈
在含有8个cpu而无硬件numa的计算机上,只拥有一个IO线程和一个惰性写入器线程,这就存在瓶颈,配置4个软件numa节点,提供4个io线程和4个惰性写入器线程,这样能提高性能
numa和内存
预读
1、堆上的表扫描
2、索引扫描
扫描才有预读
F
服务器资源调控器
F
ALTER RESOURCE GOVERNOR
F
工作负荷组,会话,批处理,语句之间的关系
F
F
F
1、启用资源调控器
2、分类器函数 根据系统函数和属性函数来确定工作负荷组
3、工作负荷组
4、资源池
工作负荷组,会话,批处理,语句之间的关系
F
F
USE [master] GO --创建一个工作时间的资源池 CREATE RESOURCE POOL pProductionProcessing WITH(MAX_CPU_PERCENT=100,MIN_CPU_PERCENT=50); --创建一个工作时间的工作负荷组 CREATE WORKLOAD GROUP gProductionProcessing WITH(IMPORTANCE =MEDIUM) ; --配置工作负荷组和工作资源池进行关联 ALTER WORKLOAD GROUP [gProductionProcessing] USING [pProductionProcessing]; GO ALTER RESOURCE GOVERNOR RECONFIGURE; GO --创建一个非工作时间的资源池 CREATE RESOURCE POOL pOffHoursProcessing WITH(MAX_CPU_PERCENT=50,MIN_CPU_PERCENT=0); --创建一个非工作时间的工作负荷组 CREATE WORKLOAD GROUP gOffHoursProcessing WITH(IMPORTANCE =LOW); --配置非工作负荷组和非工作资源池进行关联 ALTER WORKLOAD GROUP [gOffHoursProcessing] USING [pOffHoursProcessing]; GO --当改变了工作组或资源池,都需要重新配置资源调控器 ALTER RESOURCE GOVERNOR RECONFIGURE; GO USE [master] GO CREATE TABLE tblClassifierTimeTable(strGroupName sysname NOT NULL, tStartTime TIME NOT NULL, tEndTime TIME NOT NULL) GO --将时间值插入到表以使分类器函数能够利用时间值负载工作 INSERT INTO tblClassifierTimeTable VALUES('gProductionProcessing','6:35 AM','6:15 PM'); GO CREATE FUNCTION [dbo].fnTimeClassifier ( ) RETURNS sysname WITH SCHEMABINDING --如果表名不加dbo,就不能绑定架构[dbo].tblClassifierTimeTable AS BEGIN DECLARE @strGroup sysname DECLARE @loginTime TIME SET @loginTime = CONVERT(TIME, GETDATE()) SELECT TOP 1 @strGroup = strGroupName FROM [dbo].tblClassifierTimeTable WHERE [tStartTime] <= @loginTime AND [tEndTime] >= @loginTime IF ( @strGroup IS NOT NULL ) BEGIN RETURN @strGroup END --如果为null,使用gOffHoursProcessing RETURN 'gOffHoursProcessing' END GO --如果这里不加dbo ,就会报错消息 4512,级别 16,状态 3,过程 fnTimeClassifier,第 19 行 --无法将 函数'dbo.fnTimeClassifier' 绑定到架构,因为名称 'tblClassifierTimeTable' 对于架构绑定无效。名称必须由两部分构成,并且对象不能引用自身。 --重新配置资源调控器以使用新的分类函数 ALTER RESOURCE GOVERNOR WITH( CLASSIFIER_FUNCTION=dbo.fnTimeClassifier); ALTER RESOURCE GOVERNOR RECONFIGURE GO ALTER RESOURCE GOVERNOR WITH( CLASSIFIER_FUNCTION=null); ALTER RESOURCE GOVERNOR RECONFIGURE GO --该加dbo的都加dbo
sql2008可以控制内存和cpu,但无法控制IO
资源调控器控制
cpu控制是软限制
内存限制是硬限制
120/200=60% 总cpu资源的60% 双核cpu
80/200=40% 总cpu资源的40%
随着越来越多的资源被分配到scheduler中,这种反常现象会逐渐消失,但是由于存在跨多个CPU管理scheduler资源的工作方式,因此缺少显式的控制方法
--关闭资源调控器 ALTER RESOURCE GOVERNOR DISABLE ALTER RESOURCE GOVERNOR RECONFIGURE
使用跟踪标志8040来启动sqlserver实例,将禁用资源调控器,用-m -f参数也能达到同样效果
F
资源调控器DMV
F
SQL2008配置
一般在Windows安装过程中都已经安装了网络协议,网络协议属于sqlserver的安装组成部分,只有客户端和服务器上同时安装了相应的网络协议,sqlserver网络库才能工作
F
sql2000引入了对多个实例的支持,并开始使用名为SSRP SQLSERVER Resolution Protocol的新协议来侦听UDP端口1434
sql2005使用sql broswer代替了SSRP协议
F
系统页面文件的位置,如果可能把sys.pagefile放到不同的驱动器上,而不只是放在sqlserver使用的文件上
F
F
防火墙
服务器配置
F
有16个高级选项
--可以查看sql2008中68个服务器配置选项,2008r2有70个 SELECT * FROM sys.[configurations]
SELECT * FROM sys.[configurations] WHERE [is_advanced]=1
F
--查看哪些选项是动态的,不需要重启sqlserver ,修改了配置之后看一下[value_in_use]是否跟配置值一样知道是否生效 SELECT * FROM sys.[configurations] WHERE [is_dynamic]=1
1532 set working set size 0 将废除
F
因为无法将AWE映射内存page out到sys.pagefile文件中,所以所有实例的最小服务器内存总和应该小于计算机的总物理内存
因为无论是否使用连接,每个连接的开销大约都为28KB
106 locks 0 被废除
F
F
sqlserver将在日志达到总数的70%而且小于所估计的数量时执行checkpoint
开头的时候说:为了自动激活checkpoint,必须完成的最少工作量一般是每分钟10MB日志
备份压缩默认值,只有企业版才能压缩备份,但是任何版本都可以解压缩备份
备份压缩 (SQL Server)为备份文件分配空间
压缩量取决于
备份的数据类型:字符数据的压缩大于其他数据类型
数据是否加密:加密数据的压缩明显小于同等条件下未加密的数据
查看备份压缩比率
SELECT [compressed_backup_size] / [backup_size] FROM [msdb]..[backupset]
F
压缩备份的算法和数据库压缩算法(页压缩,行压缩)差别很大,备份压缩使用类似于zip的压缩算法,他仅在数据中寻找架构
文件流访问级别
使用TSQL或Win32文件系统接口访问该数据,以提供对数据的流访问,文件流使用Windows系统的缓存来缓存文件数据
F
查询等待
set lock_timeout
8645错误
1569 blocked process threshold (s) 5 --最大设置可以为86400秒
F
--查看并行度 通过查询 sys.[dm_os_tasks]DMV观察sqlserver何时并行执行查询,在多个cpu上运行的查询为每个线程分配一行 SELECT * FROM sys.[dm_os_tasks] ORDER BY [session_id] , [request_id]
默认跟踪 文件达到20MB时,将创建新文件并使用连续数字后缀作为文件名
为每个实例保存的跟踪文件数不超过5个
F
跟踪文件以128K块为单位写入trc文件
默认跟踪 跟踪的事件:数据库文件大小更改,错误和警告条件,全文爬网操作,对象create,alter,drop操作,权限,对象所有权更改,内存更改事件
不会大于128KB
16:21:02.2356884 sqlservr.exe 2528 WriteFile D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\audittrace20140928091301_3.trc SUCCESS Offset: 96,091,648, Length: 70,144, I/O Flags: Non-cached, Write Through, Priority: Normal
16:20:52.9501045 sqlservr.exe 2528 WriteFile D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\audittrace20140928091301_3.trc SUCCESS Offset: 96,075,264, Length: 4,096, I/O Flags: Non-cached, Write Through, Priority: Normal
F
F
第二章 更改跟踪、跟踪和扩展事件
触发器和事件通知
事件通知其实是特殊的DDL触发器,他们像service broker队列发送消息,而不是调用用户程序
事件通知和DDL触发器最大的不同在于,他不需要事务,因此他支持大量非事务事件
事件通知
《SQL Server 事件通知(Event notifications)》听风吹雨
F
DDL触发器和元数据有关
DML触发器在DML编译过程中进行解析,解析后通过内部函数检查每一个相关表
更改跟踪
sql2008包含两个可用于支持同步化的相似技术:更改跟踪和变更数据捕获(不是关系引擎的功能,他使用外部日志读取器完成自己的工作)
和变更数据捕获相比(他记录每个行的完整修改历史)更改跟踪是轻量级的
F
在事务提交时,每个合格事务被分配一个唯一的称为提交序号(CSN)的升序标识符,然后CSN
和事务标识符transactionID,日志序列信息lsn,开始时间和其他数据一起被插入到提交表
F
1、开启数据库的更改跟踪
ALTER DATABASE [sss] SET CHANGE_TRACKING =ON
运行该语句目录数据库中的隐藏系统表将被填充,需要对事务发生进行资格鉴定
2、隐藏表也叫提交表,CSN提交序号
使用DAC连接查看提交表的表结构
SELECT * FROM sys.[all_columns] WHERE object_id=OBJECT_ID('sys.syscommittab')
有关表中行的修改信息存储在单独的系统表中,该系统表是在用户表上启用更改跟踪时创建的
查看提交表的数据
SELECT * FROM sys.[dm_tran_commit_table]
3、内部清除任务每隔30分钟运行一次
默认值是CHANGE_RETENTION=2 DAYS
ALTER DATABASE [sss] SET CHANGE_TRACKING=ON(AUTO_CLEANUP=ON,CHANGE_RETENTION=1 DAYS) SELECT * FROM sys.[change_tracking_databases] --目录视图查询每个数据库的当前清除和保留设置
4、表级别配置
注意:提交表是数据库级别的:跟踪数据库的所有事务
内部更改表是表级别的,跟踪用户表的更改
启动表的更改跟踪之后,在用户表里添加一个隐藏列,通过事务ID跟踪特定行的变化,另外,还可以启用名为“列跟踪”的可选功能
ALTER TABLE [dbo].[Arrays] ENABLE CHANGE_TRACKING --消息 4997,级别 16,状态 1,第 1 行 --无法对表 'a' 启用更改跟踪。更改跟踪要求该表的主键。请先创建该表的主键,然后启用更改跟踪。
INSERT [Arrays]([arrid],[array]) SELECT '1','2'
5、内部更改表
开启了内部更改表之后都不见有系统表
ALTER DATABASE [sss] SET CHANGE_TRACKING =ON SELECT * FROM sys.[all_columns] WHERE object_id=OBJECT_ID('sys.syscommittab') ALTER TABLE [dbo].[nums] ENABLE CHANGE_TRACKING
sys.[change_tracking_object id]
6、更改跟踪的隐藏列
为某个表开启了更改跟踪之后,除了创建内部表之外,还将向该表添加一个隐藏的8字节列用于记录每行最后修改的事务id,在更新更改跟踪后,你会发现表的数据大小相应地增加了,如果某个表禁用了更改跟踪,该列将和内部表一起被删除
使用DAC可以看到那个隐藏列,但是要显式指定列名
F
ALTER DATABASE [sss] SET CHANGE_TRACKING =ON SELECT * FROM sys.[all_columns] WHERE object_id=OBJECT_ID('sys.syscommittab') ALTER TABLE [dbo].[nums] ENABLE CHANGE_TRACKING SELECT * FROM sys.[all_objects] WHERE [name] LIKE '%change_tracking%' --change_tracking_1954106002 --使用DAC也没有办法查询 SELECT * FROM sys.change_tracking_1954106002
消息 208,级别 16,状态 1,第 1 行 对象名 'sys.change_tracking_1954106002' 无效。
固定开销包括18字节的事务id,CSN和操作类型,以及来自目标表的主键大小
F
--使用DAC也没有办法查询 SELECT * FROM sys.change_tracking_1954106002 INSERT INTO [dbo].[nums] SELECT 1
从执行计划看到更改跟踪还会插入到内部更改表
删除的时候也会修改更改跟踪表
DELETE FROM [nums]
更改跟踪表更新 会插入旧值和新值到内部更改表
UPDATE [nums] SET [n]=2
DECLARE @context VARBINARY(128)=CONVERT(VARBINARY(128) ,SUSER_NAME()); WITH change_tracking_context(@context) UPDATE
不仅内部更改表的插入操作在事务结束时同步发生,提交表的插入操作也在提交时发生,插入的行包含在内部表和目标表的隐藏列中使用的相同事务id,此时,还将为该事务分配一个CSN,因此可以将CSN看成是版本号,该版本号应用于事务修改的所有行
F
列跟踪
--打开TRACK_COLUMNS_UPDATED启用列跟踪 ALTER TABLE [dbo].[nums] ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED =ON)
F
changetable函数是系统表值函数
SELECT E.* , [C].SYS_CHANGE_VERSION FROM [dbo].[nums] E CROSS APPLY CHANGETABLE(VERSION [sss].[dbo].[nums],( n),( [n])) C
在version模式下,访问每行并获取每列以及隐藏列的值(修改该行的上一个事务id),
使用该事务id作为联接到提交表的键,以选区相关的CSN并填充到sys_change_version列,
为了填充sys_change_context列,也可以使用该事务id和主键来联接内部跟踪表
DECLARE @last_version BIGINT =8; SELECT * FROM CHANGETABLE( CHANGES [dbo].[nums],@last_version) C; --change模式中传给CHANGETABLE()函数,并获取表中行的后续版本
DECLARE @last_version BIGINT =8; SELECT [C].sys_change_version, [C].sys_change_operation, [C].sys_change_context, E.* FROM CHANGETABLE( CHANGES [dbo].[nums],@last_version) C LEFT OUTER JOIN [dbo].[nums] E ON E.[n]=[C].N;
跟踪 sql trace
F
跟踪提供了180个事件,sqlserver profiler
sql跟踪是一种sqlserver数据库引擎技术,客户端profiler工具其实是服务器端功能的包装器
特定代码已经拦截到其执行路径中,当触发执行路径时,将激活不同的事件
他是一个共享资源,管理任何使用者创建的所有跟踪,数据库引擎中存在各种事件创建器,例如查询处理器,锁管理器,缓存管理器
跟踪I/O提供程序
内部跟踪组件:跟踪控制器
F
为了避免线程等待跟踪缓冲区,请务必使用足够快的磁盘系统执行跟踪,为了监视这些等待,可以观察SQLTRACE_LOCK和IO_COMPLETION等待类型
通过在sqlserver中监视TRACEWRITE等待类型,也可以发现自己是否可能收到sql profiler的错误信息,随着线程等待缓冲区释放空间,收到错误信息的可能性将逐渐增加
只要服务器上至少存在一个活动的跟踪,就会启动后台跟踪管理线程,该后台管理线程负责刷新文件提供程序的缓冲区(每4分钟一次),另外还负责关闭基于行集的过期跟踪(如果跟踪删除事件已经超过了10分钟,将出现过期跟踪),通过不定期刷新文件提供程序缓冲区,而不是每次收集一个事件就刷盘,sql可以利用大数据块写入操作降低跟踪开销,特别在活动性极高的服务器上
--查看跟踪缓存区的等待 SELECT * FROM sys.[dm_os_wait_stats] WHERE [wait_type] LIKE '%trace%' AND [wait_type] LIKE '%io%' --TRACEWRITE --SQLTRACE_FILE_BUFFER --SQLTRACE_FILE_WRITE_IO_COMPLETION --SQLTRACE_FILE_READ_IO_COMPLETION --SQLTRACE_LOCK
如果没有及时取走缓冲区里面的数据,sqlserver会等待20秒,然后他将丢弃事件以释放缓存区并继续处理随后的事件
如果事件已经删除,在sqlserver里面监视TRACEWRITE等待类型,也可以发现自己是否可能收到错误信息,随着线程等待缓冲区释放空间,收到错误消息的可能性逐渐增加
因为表不支持大数据块写入,sqlserver必须逐行写入事件数据,事件开销引起的性能开销需要删除很多事件,因此sqlserver不提供跟踪向表直接写入功能
sql2005提供了alter trace权限
GRANT ALTER TRACE TO sa
F
sql跟踪不返回在加密存储过程,用户定义函数,视图中生成的语句文本或查询计划
要求profiler在服务器端文件保存事件时,profiler实际上同时启动了两个相同的跟踪,一个跟踪使用行集提供程序,另一个跟踪使用文件提供程序,
使用两个跟踪意味着需要双倍的开销,因此这种方法不可取
F
行集提供程序:表
文件提供程序:trc文件
F
为查询时间大于200毫秒的事件定义筛选器
F
Duration列上的筛选器值设置为大于200毫秒的跟踪结果
保存和重播跟踪
UI包装器
9个跟踪模版
TSQL_Replay模版
F
EventSequence列是一个类似于identity属性的列,在sql服务重启的时候会重置,对于每个跟踪EventSequence值是唯一的,
64位整数大小因此跟踪的事件永远不可能超过EventSequence的范围
F
trace file选项用于将数据保存到某个使用专用二进制格式的文件中trc文件
跟踪在多线程上重播
F
如果需要按顺序重播,那么选择 replay in order
如果需要重播大量跟踪,而且不在意顺序,那么选择multiple treads
F
profiler实质上只是数据库引擎功能上的一个包装器,我们不将他用于跟踪所有阶段
数据库引擎有很多功能,这些功能,api提供给profiler这个工具去调用,profiler只是包装这些功能
F
由于sql profiler用户界面需要工作流,因此在使用脚本之前必须实际启动某个跟踪,才能生成跟踪脚本
F
F
跟踪脚本使用的是微妙,而在sql profiler工具中默认使用的是毫秒
F
SELECT * FROM sys.[fn_trace_getinfo](NULL)
--返回跟踪事件的列名和事件名 SELECT e.[name] AS event_name , c.name AS column_name FROM sys.[fn_trace_geteventinfo] (2) ei JOIN sys.[trace_events] e ON [ei].[eventid] = e.[trace_event_id] JOIN sys.[trace_columns] C ON [ei].[columnid] = [C].[trace_column_id]
SELECT * FROM sys.[fn_trace_geteventinfo](NULL)
[fn_trace_geteventinfo]返回跟踪选择的事件和列的数字组合
F
服务器端跟踪和收集
EXEC sys.[sp_trace_create]
EXEC sys.[sp_trace_setevent]
EXEC sys.[sp_trace_setfilter]
EXEC sys.[sp_trace_setstatus]
-- No creation SQL available for this object type
sql2000删除了所有无法向后兼容的脚本
--返回筛选器的信息 SELECT [columnid] , b.[name] , [logical_operator] , [comparison_operator] , [value] FROM sys.[fn_trace_getfilterinfo] (2) AS a JOIN sys.[trace_columns] AS b ON a.[columnid] = b.[trace_column_id]
--读取trc文件内容 SELECT * FROM sys.[fn_trace_gettable]('C:\TEST.TRC')
查询服务器端跟踪元数据
SELECT [status] , [path] , [max_size] , [buffer_count] , [buffer_size] , [event_count] , [dropped_event_count] FROM sys.[traces] WHERE id = 2
F
--使用select into以最小日志记录来将trc文件里的数据插入到 testtrc表以便分析trace数据 SELECT * INTO testtrc FROM sys.[fn_trace_gettable]('C:\TEST.TRC')
EXEC sys.[sp_trace_create] @p1 OUTPUT,1,NULL,NULL,NULL 1表示打开行集提供程序
F
F
sqlserver profiler通过调用EXEC sys.[sp_trace_getdata] @traceid = 0, -- int
@records = 0 -- int
将这些事件从行集提供程序中取出,并执行一次pivot数据透视操作
行集提供程序:将跟踪数据保存到表
文件提供程序:将跟踪数据保存到trc文件
Microsoft.SqlServer.Management.Trace命名空间中发布了一系列管理类,帮助构建和使用行集提供程序
参看sqlserver techcenter
F
扩展事件XE
XE的主体位于sqlserver的总体层中,这种结构类似于SQLOS的角色
package0实现了包的灵活性,package0包是一个基础,他包含了和sqlserver一起发行的所有其他包需要使用的对象以及将来可能需要使用的对象
SecAudit的[capabilities_desc]为private,这意味着非系统使用者将无法直接使用他所包含的对象
--查看四个包中包含的对象 --package0 --sqlos --sqlserver --SecAudit SELECT * FROM sys.[dm_xe_objects]
F
SELECT * FROM sys.[dm_xe_packages] --SQL2008 和SQL2012都发行了四个包 --package0 --sqlos --sqlserver --SecAudit
--sys.[dm_xe_objects]里的[package_guid]对应于 sys.[dm_xe_packages] 的[guid] SELECT A.[package_guid] , COUNT(A.[package_guid]) AS COUNTNUM , B.[guid] , COUNT(B.[guid]) AS COUNTNUM , B.[name] FROM sys.[dm_xe_objects] AS A JOIN sys.[dm_xe_packages] AS B ON A.[package_guid] = B.[guid] GROUP BY A.[package_guid] , B.[guid] , B.[name]
[object_type]列用于筛选特定类型的对象,跟 sys.[dm_xe_packages]一样 [capabilities_desc]列设置为private属性表示外部对象无法使用这个对象,
[description]列用于提供易读的文本来说明每个对象,目前sql2008RTM还在进一步完善该功能,因此许多对象说明还不够完整
描述sys.[dm_xe_objects] 中出现的各种对象类型
XE跟SQL跟踪一样,在通过拦截代码路径,XE提供了254个事件,而SQL跟踪提供了180个事件,很多XE事件的级别比SQL跟踪事件的级别更低,因此XE可以提供更多事件
例如XE可以跟踪页面拆分就激活的事件,这样用户可以在查询级别跟踪拆分,这在先前的sqlserver版本中是无法实现的
--XE还可以输出对象表的列含义 SELECT * FROM sys.[dm_xe_object_columns] WHERE [object_name] = 'page_split';
[column_value]的值在运行时进行填充,如果[column_type]为data,如果[column_type]为readonly,那么列是只读的,运行时不会进行填充,
[column_type]为readonly的列是元数据,包含UUID激活事件类型的唯一标识符和version版本号,以便独立跟踪和使用每个事件的不同架构版本
事件的channel属性是和每个事件都有关的少数readonly属性之一,他反应了XE的设计目标之一是为了和event tracing for Windows(ETW)系统相统一
sql2008中的事件
管理员事件:deprecation announcement:废除声明, 例如某个功能已经被废除 ,错误报告
分析事件:分析系统性能和运行状况
调试事件:线程和进程启动和停止激活的事件,贯穿scheduler生命周期不同时期的事件,以及其他类似主题的事件
操作事件:管理sqlserver服务和数据库,数据库附加,分离,启动,停止,检测数据库页面损坏有关问题
F
[object_package_guid]和 [type_package_guid]都是16字节
655FD93F-3364-40D5-B2BA-330F7FFB6491
事件的前16字节包含一个和使用者需求无关的标识符,那么可以简单忽略这些字节,而没有必要进行处理
为了降低事件过度使用磁盘,XE扩展事件系统对长度可变元素数据设置了32MB的硬上限
和SQL跟踪一样,可以对XE事件进行筛选,并将他们路由到各种后期事件提供程序中进行收集,XE的筛选器称为谓词,而后期事件提供程序称为目标
类型和映射
XE包中可以定义两种类型:标量类型和映射类型
标量类型:单个值 ,单个整数,单个unicode字符,单个二进制大对象
映射类型:类似于编程中枚举类型
--查看系统支持的类型和映射 SELECT * FROM sys.[dm_xe_objects] WHERE [object_type] IN ('type','map') ORDER BY [object_type]
--虽然类型可以对自身信息进行适当说明,但映射必须展示他们的相关值,以便--使用者在适当的时候可以显示易读文本 --下面查询返回sql引擎展示的所有等待类型,以及XE事件中用于说明等待使用的映射关键字(整数表示类型) SELECT * FROM sys.[dm_xe_map_values] WHERE [name] = 'wait_type';
F
谓词
pred全程:predicate 谓词
[dm_xe_objects]中的
pred_compare对象是比较函数,用于比较特定数据类型的实例
pred_source对象是扩展属性,可以在谓词中使用
--下面查询pred_compare对象类型,通过 sys.[dm_xe_objects]返回所有可用的“>=”比较函数 SELECT * FROM sys.[dm_xe_objects] WHERE [object_type] = 'pred_compare' AND [name] LIKE 'greater_than_equal%'
目前只有一个谓词没有重载,就是取模运算符
pred_source对象,在XE系统中,事件谓词可以筛选两种类型的属性,事件自身展示的列(如sql_statement_completed事件的source_database_id列)和sys.[dm_xe_objects] DMV中定义成pred_source的任何外部属性(谓词源)
--查看可用的谓词源 SELECT * FROM sys.[dm_xe_objects] WHERE [object_type] = 'pred_source'
F
以上每种属性(sql2008RTM提供28种属性)都可以绑定到XE系统中的任何事件,并且可以随时筛选某个属性(如果事件自身的系统化负载未执行筛选该属性)
使用谓词源将强制XE引擎在事件处理过程中通过附加步骤获取数据,对大多数谓词而言,获取数据的开销非常小,但是如果使用多个谓词,这种开销将累加
操作
当事件被触发之后,你可能想在事件发生之后执行一些操作,在XE中,action就是做这样的工作
操作既可以执行代码,也可以将数据写回事件负载中,因此增加了附加属性
--在sql2008里,XE支持37种操作 SELECT * FROM sys.[dm_xe_objects] WHERE [object_type] ='action'
F
tsql_stack操作是一个非常有趣的适用于调试目的的操作,该操作将返回存储过程中的整个嵌套堆栈和/或导致事件激活的函数调用,
虽然返回的信息非常有用,但是,如果不短暂停止执行当前的线程和活动堆栈,tsql_stack操作将无法在引擎中获取该信息,因此和检索当前会话id相比,tsql_stack操作将承担更大的性能开销
--有些操作不返回任何数据,仅执行外部代码,需要查看这些操作列表,可以筛选 sys.[dm_xe_objects]的[type_name]列的null返回值 SELECT * FROM sys.[dm_xe_objects] WHERE [object_type] = 'action' AND [type_name] = 'null'
null不同于sql null,null是package0中定义的类型名称,并显式在type类型的对象列表中
调试断点事件停止断点上触发的活动线程,并可能根据断点的触发位置阻塞整个sqlserver进程
目标
事件数据的目的地是一个或多个目标,系统通过目标来使用XE事件
--目标是最终的对象类型,该对象类型在ys.[dm_xe_objects]中展示元数据 SELECT * FROM sys.[dm_xe_objects] WHERE [object_type] = 'target'
sql2008使用了13个目标(7个公有目标,6个私有目标)私有目标仅供sql审核使用
XE目标包含各种类型,他们和sql跟踪的IO提供程序有相似地方也有区别
etw 同步target
没有XE目标等效于SQL跟踪的行集提供程序
F
一个事件会话可以配置多个目标
ring_buffer:他将数据存储在一个用户可配置大小的环形缓冲区中,当环形缓冲区填充和准备覆盖以前收集的数据时,他将重新回到缓冲区的起点位置,这意味着缓冲区可以使用无限的数据量,而无需使用系统内存,但只有在特定事件才可以获取最新数据
synchronous_event_counter
bucketizer
pair_matching
sys.dm_os_ring_buffers视图在sql2005里面已经有了,所以应该不是使用扩展事件来捕获的
因为无论在sql2005还是sql2008生成的执行计划都是一样都有表值函数:sysringbuffers
事件数据缓冲区填满时,XE引擎可以采用3种可能操作,具体取决于用户如何配置事件会话
阻塞,等待缓冲区可用(无事件丢失)
删除等待事件(允许单个事件丢失) 默认模式
删除满缓存区(允许多个事件丢失)
中心缓存区集合(最多使用4MB内存)
这些设置选项不是基于每个目标的,而是针对绑定到会话的所有目标!!
F
事件会话
会话用于说明用户需要收集的事件,谓词用于解决应该筛选哪些事件,需要激活的操作和事件一起协同工作,目标在循环的结尾用于数据收集
和sql跟踪一样,大多数会话互相独立,连接多个会话的主要线程是中心位图,他用于指示是否启用或禁用指定事件,在许多会话中可以同步启用事件,但全局位图用于避免在运行时必须检测所有会话
USE [master] SELECT * FROM sys.[server_event_sessions] --XE会话信息中心元数据 SELECT * FROM sys.[server_event_sessions_events] --每个XE会话绑定的事件 SELECT * FROM sys.[server_event_sessions_actions] --每个XE会话绑定的操作 SELECT * FROM sys.[server_event_sessions_targets] --每个XE会话绑定的目标 SELECT * FROM sys.[server_event_sessions_fields] --每个XE会话自定义设置信息 例如用户可以将环形缓存区的内存使用量设置为指定数量,如果使用了目标,该视图将显示内存设置
配置异步目标缓存区,这些设置将影响一个名为dispatcher的进程,该进程负责定期从缓冲区收集数据,并将收集的数据发送到绑定会话的每个异步目标中
使用sys.[dm_xe_sessions] 来监视是否存在调度异步缓存区问题
SELECT * FROM sys.[dm_xe_sessions]
[blocked_event_fire_time]:如果使用了无事件丢失选项,该列展示了阻塞发生的时间量
F
因果跟踪
传递块
CREATE EVENT SESSION [xe_SqlTimeouts] ON SERVER ADD EVENT sqlserver.sql_statement_completed( ACTION(sqlserver.session_id,sqlserver.tsql_stack)), ADD EVENT sqlserver.sql_statement_starting( ACTION(sqlserver.plan_handle,sqlserver.session_id,sqlserver.sql_text,sqlserver.tsql_stack)) ADD TARGET package0.pair_matching(SET begin_event=N'sqlserver.sql_statement_starting',begin_matching_actions=N'sqlserver.session_id, sqlserver.tsql_stack',end_event=N'sqlserver.sql_statement_completed',end_matching_actions=N'sqlserver.session_id, sqlserver.tsql_stack',respond_to_memory_pressure=(0)) WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=5 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF) GO
事件的生命周期
F
如果用户定义了过多的事件会话,过多的action,过多的同步目标,过多的特别活跃事件,那么可能会阻塞,特别注意使用同步目标,以免出现运行时阻塞问题
--跟踪事件数据缓冲区 跟踪由每个活动XE会话定义的每个目标的一行,还使用[execution_duration_ms]列指示目标处理最新事件或缓存所需的事件量,如果看到该数据在逐渐增加,说明sqlserver代码路径中必然会出现等待问题 SELECT * FROM sys.[dm_xe_session_targets]
扩展事件DDL和查询
F
--创建事件会话 CREATE EVENT SESSION允许用户创建会话和映射各种XE对象 --修改XE会话时ALTER EVENT SESSION ,会话不能处于活动状态 CREATE EVENT SESSION [statement_completed] ON SERVER ADD EVENT sqlserver.sp_statement_completed, ADD EVENT sqlserver.sql_statement_completed ( ACTION ( sqlserver.sql_text ) WHERE ( sqlserver.[session_id] = 60 ) ) ADD TARGET package0.ring_buffer ( SET max_memory = 4096 ) WITH ( MAX_MEMORY = 4096 KB , EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS , MAX_DISPATCH_LATENCY = 1 SECONDS , MEMORY_PARTITION_MODE = NONE , TRACK_CAUSALITY = OFF , STARTUP_STATE = OFF );
使用=运算符而没有使用pred_compare函数的原因 ,因为只有divides_by_uint64对象才需要pred_compare函数,其余情况都可以使用where 语句 and,or,() ,并支持不同条件的复杂谓词组合
ADD TARGET package0.ring_buffer ( SET max_memory = 4096 ) WITH ( MAX_MEMORY = 4096 KB , EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS , MAX_DISPATCH_LATENCY = 1 SECONDS , MEMORY_PARTITION_MODE = NONE , --CPU上的内存没有分区(因此最终我们将有3个缓冲区)并且我们没有使用因果跟踪 TRACK_CAUSALITY = OFF , --TRACK_CAUSALITY 因果跟踪 STARTUP_STATE = OFF );
--启动会话 ALTER EVENT SESSION [statement_completed] ON SERVER STATE=START
F
--ringbuffer,bucketizer,事件统计synchronous_event_counter都在 sys.[dm_xe_session_targets]的[target_data]列保存XML格式数据,你可以使用XQuery查询数据 SELECT * FROM sys.[dm_xe_session_targets]
SELECT theNodes.event_data.value('(data/value)[1]', 'bigint') AS source_database_id , theNodes.event_data.value('(data/value)[2]', 'bigint') AS object_id , theNodes.event_data.value('(data/value)[3]', 'bigint') AS object_type , theNodes.event_data.value('(data/value)[4]', 'bigint') AS cpu , theNodes.event_data.value('(data/value)[5]', 'bigint') AS duration , theNodes.event_data.value('(data/value)[6]', 'bigint') AS reads , theNodes.event_data.value('(data/value)[7]', 'bigint') AS writes , theNodes.event_data.value('(action/value)[1]', 'nvarchar(max)') AS sql_text FROM ( SELECT CONVERT(XML, st.[target_data]) AS ring_buffer FROM sys.[dm_xe_sessions] s JOIN sys.[dm_xe_session_targets] st ON s.[address] = st.[event_session_address] WHERE s.[name] = 'statement_completed' ) AS theData CROSS APPLY theData.ring_buffer.nodes('//RingBufferTarget/event') theNodes ( event_data );
source_database_id object_id object_type cpu duration reads writes sql_text 7 442025160 20816 0 0 2 0 NULL 7 596895952 20816 0 0 2 0 NULL 6 322132543 20816 15 1000 2 0 NULL 5 5712692 20816 0 0 3 0 NULL 5 5712692 20816 0 0 3 0 NULL 6 801718487 20816 0 0 2 0 NULL 10 278270417 20816 0 1000 44 3 NULL 10 278270417 20816 0 0 0 0 NULL 10 90202378 20816 0 1000 45 1 NULL 10 90202378 20816 0 0 0 0 NULL
不要停止会话否则在内存里的环形缓冲区里的数据将会清空,导致没有数据
--停止会话 ALTER EVENT SESSION [statement_completed] ON SERVER STATE=STOP
我觉得如果是短时间跟踪的话,可以把事件数据保持到内存,例如内存中的ring_buffer
适合突然数据库变慢等情况,短时间跟踪一下,找到问题之后就停止跟踪
如果是长时间跟踪,比如问题出现的时间不确定,可能在凌晨,那么这时候需要把事件数据保存到文件中
SELECT * FROM sys.[dm_xe_objects] WHERE [object_type] = 'target'
SQL2012的异步文件目标名称叫:event_counter
SQL2008和SQL2012 目标对比,SQL2012多了3个目标
使用sys.[fn_xe_file_target_read_file]()函数从异步文件目标中读取数据,该函数返回每个事件的一行,
但你依然需要获取合适的XML格式,在event_data列展示的数据也是XML格式
SELECT * FROM sys.[fn_xe_file_target_read_file]('D:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\Log', 'D:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\Log', 'system_health_0_130564725469520000.xel', 630)
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS OFF GO CREATE FUNCTION sys.fn_xe_file_target_read_file ( @path nvarchar(260), @mdpath nvarchar(260), @initial_file_name nvarchar(260) = NULL, @initial_offset bigint = NULL ) RETURNS table AS RETURN SELECT * FROM OpenRowSet(TABLE FN_XE_READ_FILE_TARGET_FILE, @path, @mdpath, @initial_file_name, @initial_offset) GO
这里的XML是为那些希望成为XE高级用户的DBA设计的
F
--删除事件会话 DROP EVENT SESSION [statement_completed] ON SERVER
用sql2012 连接sql2008还是没有扩展事件菜单
F
第三章 数据库和数据库文件
新建库大小5MB
F
系统数据库 master model tempdb msdb resource
显式静态游标和键集游标都会使用tempdb数据库
F
可靠消息传送的service broker也使用msdb数据库,msdb支持suspect page的修复,有未公开的跟踪标志可以删除msdb
adventurework是微软用户培训组创建的,包括AdventureWorks2008,AdventureWorksDW2008,AdventureWorksLT2008
F
AdventureWorksLT2008是AdventureWorks OLTP数据库的高度简化又不太标准的版本,他集中于具有单一架构的单一销售情况
Northwind是最初为Access开发的样例数据库
F
文件流数据文件只有逻辑和物理名称属性
一般的数据文件都有:逻辑文件名,物理文件名,初始大小,最大大小,增长增量
SELECT * FROM sys.[database_files]
F
F
model有53个对象:45个系统表,6个用于查询通知和service broker对象,1个用于帮助管理文件流数据的表和1个帮助管理更改跟踪的表
数据库的所有者和映射的登录帐户信息会存放在master数据库中,登录的时候就会验证
F
新建数据库时,没有指定log on,那么sqlserver会以所有数据文件之和的25%创建一个日志文件
收缩数据文件也会在数据库中产生过多的逻辑碎片
F
快速文件初始化
最开始的时候,无论数据文件还是日志文件都是填零初始化的,但是填零的速度很慢,那么数据文件就增加了快速初始化,
快速初始化不会实际覆盖磁盘内容,只是霸占着空间
F
自动收缩选项每30分钟收缩一次数据库,保留25%可用空间
《企业级管理实践》
DBCC SHRINKFILE都是区一级动作,他会把正在使用的区前移,把没在使用中的区从文件中移除,
但是他不会把一个区里面的空页移除,不会合并区,也不会把页面里的空间移除,合并页面
收缩数据库/收缩文件会造成更多逻辑碎片
F
数据库收缩会被快照隔离级别的事务阻挡,如果发生这种情况,DBCC SHRINKFILE和DBCC SHRINKDATABASE就会在
第一个小时内的每5分钟和之后的每个小时向错误日志写入具有信息性的消息,
sqlserver还通过SELECT * FROM sys.[dm_exec_requests]视图为shrink命令提供进程报告
F
F
文件流文件组 filestream文件组
F
CREATE DATABASE MyMovieReviews ON PRIMARY (NAME=Reviews_data,FILENAME='C:\DATA\Reviews_data.mdf'), FILEGROUP MovieReviewsFSGroup1 CONTAINS FILESTREAM (NAME=Reviews_FS,FILENAME='C:\DATA\Review_FS') LOG ON (NAME=Reviews_LOG,FILENAME='C:\DATA\Reviews_log.ldf') GO 在文件夹C:\DATA\Review_FS里会看到filestream.hdr文件和$fslog文件夹。filestream.hdr文件是filestream容器头文件,不应该修改或删除这个文件,对于现有数据库,可以用alter database添加文件流文件组
F
注意:不能吧文件从一个文件组移动到另一个文件组
F
F
F
IAM页面跟踪in-row data,row overflow data,lob data,每种页面都会有相应的IAM进行跟踪
SELECT * FROM sys.[system_internals_allocation_units]
F
数据库选项
F
F
ALTER DATABASE [sss] SET RESTRICTED_USER --可以有多个连接,但是只能来自认为是合格的用户dbcreator或sysadmin服务器角色或数据库的db_owner角色的连接
F
从recovery_pending切换成emergency时,sqlserver会关闭数据库,然后用特殊标志重新启动他,这样会跳过恢复过程。
跳过恢复意味着可能会有逻辑上或物理上不一致的数据,丢失索引行,断开页面链接或错误的元数据指针,
将数据库设置为emergency模式就是承认数据可能不一致但是不管怎样还是想访问他
F
ALTER DATABASE [sss] SET RESTRICTED_USER WITH ROLLBACK AFTER ALTER DATABASE [sss] SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE ALTER DATABASE [sss] SET RESTRICTED_USER WITH no_wait
游标选项
F
自动选项
SQL选项
F
数据库恢复选项
F
虽然sqlserver数据库页面是8KB,但是磁盘用512byte的扇区进行I/O操作,因此,每个页面上都有16个扇区
对sql2000更改了页面校验和之后,当修改页面的时候才会写入校验和,没有修改的页面不会无端端去计算校验和
F
数据库快照
不要将快照的稀疏文件和sql2008中的稀疏列相混淆
稀疏文件总是以64KB为增量增长的,所以磁盘上的稀疏文件大小总是以64KB的倍数
F
建立快照时会记录源数据库的事务日志中同步日志序列号LSN,LSN是确定数据库中特定点的方法
使用sys.[dm_io_virtual_file_stats]() DMV对快照文件使用的空间进行统计
F
如果源数据库上有任何快照,就不能还原源数据库
F
tempdb数据库
F
用户对象:用户创建的表,临时表,表变量
内部对象:工作表,工作文件,排序单元
hash union,hash aggression,hash join
联接,聚合,联合
当sqlserver处理使用哈希运算符的查询时,使用工作文件合并或聚合数据
F
tempdb的延迟删除
F
--使用sys.[dm_db_file_space_usage]视图来监视tempdb的空间 dbid=2 --用户对象,内部对象,版本存储 USE [tempdb] SELECT * FROM sys.[dm_db_file_space_usage] SELECT * FROM sys.[dm_db_task_space_usage] --通常分配的空间值应该和释放的空间值相同,但是如果存在延迟删除,分配值比释放值大 SELECT * FROM sys.[dm_db_session_space_usage]
F
F
数据库安全性
--所有的登录名,不管是Windows还是sqlserver身份验证,都可以在sys.[server_principals]目录视图中看到 SELECT * FROM sys.[server_principals]
F
--下面查询显示数据库中用户映射到登录名,还显示了每个数据库用户的默认架构 SELECT s.[name] AS loginname , d.[name] AS username , [default_schema_name] AS defaultschema FROM sys.[server_principals] s JOIN sys.[database_principals] d ON d.[sid] = s.[sid]
数据和架构
主体和架构
CREATE USER CREATE SCHEMA --取代了之前的 EXEC sys.[sp_adduser] @loginame = NULL, -- sysname @name_in_db = NULL, -- sysname @grpname = NULL -- sysname EXEC sys.[sp_grantdbaccess] @loginame = NULL, -- sysname @name_in_db = NULL -- sysname
F
默认架构
在sql2008中,新建数据库时,其中包括了几个架构,他们包括[INFORMATION_SCHEMA],dbo,guest
移动或复制数据库
F
drop database命令还会从实例中删除数据库的所有跟踪记录
F
sqlserver会编译一个新的日志文件,因为sp_detach_db创建的新日志文件会很小--小于1MB,所以这是收缩已经远远大于想要的日志文件的快速方法
备份,还原数据库
F
兼容性级别
F
除非将model数据库改变兼容性级别,否则sql2008中所有新建数据库的兼容级别都是100
--设置兼容级别 ALTER DATABASE [sss] SET COMPATIBILITY_LEVEL 100
F
第四章 日志记录和恢复
缓冲区管理器保证在将更改写入数据库之前,先写入事务日志
F
崩溃恢复,针对sqlserver重启
还原恢复,针对用户发出的restore database语句
recovery会在建立数据库快照,数据库镜像运行recovery
F
构造脏页表DPT
F
F
sys.[fn_dblog]信息更详细
--读取事务日志 DBCC LOG([sss]) USE [sss] SELECT * FROM sys.[fn_dblog](NULL,NULL)
DBCC LOGINFO
无论有多少个物理日志文件,在收缩日志的时候,sqlserver不是单独考虑每个日志文件大小,而是根据整个日志确定可压缩的大小
vlf大小(31KB*8KB)
虚拟日志文件,一个0.5mb的日志文件含有两个vlf(一个vlf的最小大小是31*8kb =0.2mb)
一个vlf的最小大小是0.2MB
8KB怀疑就是一个数据页
namespace InternalsViewer.Internals.TransactionLog
Log Data containing fragment of a page at a particular offset
《sql2005 技术内幕 存储引擎》
宋沄剑的图片应该有错
F
行以物理顺序列出,FSeqNo才是真正的逻辑顺序
F
4400000085601161有4个VLF都是相同的证明是在同一次日志增长里的,并且loginfo里没有其他的createLSN说明
事务日志只增长过一次
F
F
自动截断日志
将恢复模式设置为simple
从未进行过完整备份
F
sqlserver根据每分钟内可恢复10MB事务日志的估算来确定恢复间隔
用户线程调用日志管理器,日志管理器都会检查日志大小
如果数据库在自动截断模式时日志已达到70%,那么日志管理器会唤醒checkpoint线程
F
--查看 sys.[database_recovery_status] 视图的[last_log_backup_lsn]列,如果该列为空,数据库就是处于自动截断模式 SELECT * FROM sys.[database_recovery_status] WHERE [database_id]=DB_ID('sss')
进行数据库完整备份前
进行数据库完整备份之后
设置数据库为简单恢复模式之后,[last_log_backup_lsn]值变成null
ALTER DATABASE [sss] SET RECOVERY SIMPLE
F
压缩日志
auto_shrink选项每30分钟运行自动压缩进程,日志管理器累计自动压缩进程之间的30分钟间隔内所使用的最大日志空间量的统计信息,自动压缩进程将日志的压缩点标记为实际使用的最大日志空间的125%和日志的最小大小这两个数中较大的那个(最小大小是创建日志时的大小或已经被手动增大或压缩过的大小),如果有机会(备份并截断)的话,日志就会被压缩到这个大小
F
--统计各个数据库的事务日志文件已使用的百分比 SELECT [instance_name] AS 'DATABASE' , [cntr_value] AS 'LogFullPct' FROM sys.[dm_os_performance_counters] WHERE [counter_name] LIKE 'percent log used%' AND [instance_name] NOT IN ( '_total', 'mssqlsystemresource', 'MASTER', 'MODEL', 'TEMPDB', 'MSDB', 'ReportServer', 'ReportServerTempDB' ) AND [cntr_value] > 0 -- Author: <桦仔> -- Blog: <http://www.cnblogs.com/lyhabc/> -- Create date: <2014/4/18> -- Description: <统计各个数据库的总大小V2 不包含数据文件> -- ============================================= SET NOCOUNT ON USE master GO DECLARE @DBNAME NVARCHAR(MAX) DECLARE @SQL NVARCHAR(MAX) --临时表保存数据 CREATE TABLE #DataBaseServerData ( ID INT IDENTITY(1, 1) , DBNAME NVARCHAR(MAX) , Log_Total_MB DECIMAL(18, 1) NOT NULL , Log_FREE_SPACE_MB DECIMAL(18, 1) NOT NULL ) --游标 DECLARE @itemCur CURSOR SET @itemCur = CURSOR FOR SELECT name from SYS.[sysdatabases] WHERE [name] NOT IN ('MASTER','MODEL','TEMPDB','MSDB','ReportServer','ReportServerTempDB') AND [status]=65544 OPEN @itemCur FETCH NEXT FROM @itemCur INTO @DBNAME WHILE @@FETCH_STATUS = 0 BEGIN SET @SQL=N'USE ['+@DBNAME+'];'+CHAR(10) + 'INSERT [#DataBaseServerData] ( [DBNAME] , [Log_Total_MB] , [Log_FREE_SPACE_MB ] ) SELECT '''+@DBNAME+''', str(sum(convert(dec(17,2),sysfiles.size)) / 128,10,2) AS Total_MB, SUM(( database_files.size - FILEPROPERTY(database_files.name, ''SpaceUsed'') )) / 128.0 AS free_space_mb FROM dbo.sysfiles as sysfiles INNER JOIN sys.database_files as database_files ON sysfiles.[fileid]=database_files.[file_id] WHERE sysfiles.[groupid] =0 AND database_files.[type] = 1;' EXEC (@SQL) FETCH NEXT FROM @itemCur INTO @DBNAME END CLOSE @itemCur DEALLOCATE @itemCur SELECT * FROM [#DataBaseServerData] DROP TABLE [#DataBaseServerData]
备份和还原数据库
sql2008主要有4种备份类型:
完整备份
差异备份
日志备份
文件和文件组备份
F
备份线程只复制区
sql2008还支持一个日志标记的功能,他能让你在事务日志中放置参考点,如果数据库处于full模式,可以选择恢复到这些日志的标记之一
http://technet.microsoft.com/zh-cn/library/ms186865(SQL.105).aspx
http://msdn.microsoft.com/en-us/library/ms186858.aspx
F
最小日志记录只记录那些需要回滚事务的信息,但不支持时间点恢复
批量操作如下
select into
bulk insert
openrowset(bulk..)
insert into select
部分更新具有lob数据类型的列
update xx write
writetext,updatetext
create index
alter index rebuild 或 dbcc reindex
drop index
BCM BULK CHANGED MAP也称为最小记录映射ML MAP
最小化记录的缺点:sqlserver会强制在事务提交之前将数据页刷到磁盘,尤其这些页面的IO为随机IO,强制刷数据页面可能会非常昂贵,可以将他们与完整记录相比较,完整记录总是顺序IO,如果没有快速IO子系统的话,可能会很明显感觉最小记录比完整记录慢
由于在事务提交之前就要将数据刷到磁盘,那么就需要调用eager writer勤奋写入器不停刷盘
以insert select 为例,首先插入 insert select top(10000) 是一个大事务
新页面以最小日志记录,数据不会不停刷盘,如果这时候宕机,我还没有提交事务,那么sqlserver只需要在下次启动的时候
将已经刷盘的页面释放掉就可以了,如果不是宕机是rollback tran也是同样的道理
纵观下面的大容量操作命令,你会发现都是插入操作和新建索引操作,这些操作都是同样的道理,预先刷盘,回滚的时候就释放页面
select into
bulk insert
openrowset(bulk..)
insert into select
部分更新具有lob数据类型的列
update xx write
writetext,updatetext
create index
alter index rebuild 或 dbcc reindex
drop index
truncate命令除外
大容量日志模式下的大批量操作,会把数据放进去日志备份文件bak里面,因为不像完整模式,每条记录都有前影像和后影像
所有只能把大批量操作期间的数据放进去日志备份文件,从而导致
大容量日志模式下的大批量操作备份出来的日志文件比在full模式下的大批量操作备份出来的日志文件大
F
F
F
F
sqlserver可能需要在恢复完成后对元数据做些调整,所以直到完成恢复的所有阶段,才允许访问数据库,换言之,restore没有“快速”恢复这个选项
F
页面还原 ,suspect page msdb
使用页面还原之后必须进行日志还原,不是所有的已损坏页都可以用数据库联机还原
企业版才支持联机页面还原
F
在单个文件中可以还原的最多页数是1000
SELECT [redo_target_lsn] FROM sys.[master_files] WHERE [database_id]=5
with standby还原
必须用 with recovery还原最后一个日志(不会保存备用文件standby文件),才能让数据库完全可用
F
F
第五章 表
在一个真实的关系数据库中,表中的每一行都是唯一的并具有一个被称为主键的唯一标识符(与ANSI SQL标准相一致,sqlserver不需要你是一行唯一或声明一个主键,但是由于这两个概念对关系模型非常关键,因此建议你总是这样做)
F
兼容性视图也可以通过dbo架构访问,因此sys.sysobjects和dbo.sysobjects是同一个对象,对于分类视图和动态关联对象来说,必须指定sys架构来访问对象
F
--name在任何情况下都合法 CREATE TABLE [dbo].customer([name] CHAR(30))
F
--可以看一下会话是否有开启 [quoted_identifier] SELECT [quoted_identifier] FROM sys.[dm_exec_sessions] WHERE [session_id] = @@SPID
F
F
sql2005 sp2允许小数点之后的数据存放在可变空间中
sql2008默认为表除了master,model,tempdb,msdb之外的所有数据库启用了vardecimal storage format属性
虽然vardecimal存储格式可以降低数据的存储容量,但是却增加了额外的CPU开销为代价,一旦启用某个表的vardecimal属性,则表中所有decimal数据都存储为可变长度
vardecimal storage format属性是一种脱机操作,sqlserver独占锁定正在修改的表,直到所有decimal数据转换成新的格式。vardecimal存储格式已经不推荐使用了,因此我们不会介绍vardecimal数据的内部存储,对于新开发,建议使用sqlserver的压缩功能使可变字节的存储需求降到最低
F
日期和时间数据类型
F
date为3字节正数
所有包含时间信息的数据类型(time,datetime2,datetimeoffset)都允许在数据类型后添加一个1~7之间的数字来表示所保留字的方式来指定时间部分的精度,如果不指定精度,默认为7
SELECT CAST(CURRENT_TIMESTAMP AS TIME) SELECT CAST(CURRENT_TIMESTAMP AS TIME(2)) SELECT CAST(CURRENT_TIMESTAMP AS TIME(7)) --08:46:30.7200000 --08:46:30.73 --08:46:30.7300000
F
字符数据类型
SELECT [name],[max_length] FROM sys.[types] name max_length image 16 text 16 uniqueidentifier 16 date 3 time 5 datetime2 8 datetimeoffset 10 tinyint 1 smallint 2 int 4 smalldatetime 4 real 4 money 8 datetime 8 float 8 sql_variant 8016 ntext 16 bit 1 decimal 17 numeric 17 smallmoney 4 bigint 8 hierarchyid 892 geometry -1 geography -1 varbinary 8000 varchar 8000 binary 8000 char 8000 timestamp 8 nvarchar 8000 nchar 8000 xml -1 sysname 256
F
F
字符数据排序规则
sqlserver的系统表也遵守排序规则
resource数据库使用Latin1_General_CI_AI排序规则
F
SELECT * FROM sys.[fn_helpcollations]() --3885种排序规则,112种排序规则被废弃 SQL2012
由于排序规则决定数据在索引中出现的顺序,因此sqlserver不会接受由于你将数据库移动到不同的Windows版本上而造成的对排序规则变化的定义
Windows排序规则以族的形式出现,每族有18种排序规则,这18种主要是CI,BIN,AI,KS 假名,全半角,重音,二进制的不同
F
旧的排序规则是建立在Windows2000排序规则上的,而新的_100排序规则是建立在Windows2008中的排序规则基础上的 Latin1_General_100(sql2008)和Latin1_General(sql2000)是排序规则对
如果从sql2005用linked server链接sql2008,则应该避免使用新的_100排序规则,否则在访问时会遇到
非法的表格数据流排序规则错误TDS
F
--查看某种排序规则的代码页 SELECT COLLATIONPROPERTY('Latin1_General_CS_AS','CODEPAGE') AS '排序规则代码页' --排序规则代码页 --1252
不要使用仅支持unicode的排序规则作为服务器排序规则!!!
SELECT RANK=DENSE_RANK() OVER(ORDER BY colatedwork)
F
F
二进制排序规则,不存在二级权值,字符按照字符集中的代码点排序,因此使用前面实例中的Latin_General_BIN2
二进制排序,大写字母排在小写字母前面,这是ASCII标准
F
BIN是早期的二进制排序规则
BIN2是新的二进制排序规则,开发的时候尽量使用BIN2
转换称varbinary变成4100,这是因为PC架构是从小到大的,即最不重要的字节会存储在最前面
SQLSERVER排序规则有76种,其中1种被废弃
从sys.[fn_helpcollations]()看到SQL排序规则和哪种Windows排序规则相匹配
F
F
tertiary weights函数计算三级权重,然后重新排序
F
安装sqlserver时定义的排序规则,如果选择错了,必须重装sqlserver
在复选框里,binary提供BIN二进制排序,而binary-code point提供BIN2 二进制排序
F
F
使用sqlserver排序规则的陷阱
char,varchar数据类型优先级比nchar,nvarchar低,因此列转换成value类型,这种情况下可以使用索引
如果你使用SQL排序规则,不要混用varchar和nvarchar
如果列是nvarchar类型,则必须强制一种二进制排序规则,但是只有当用户能够接受一种区分大小写的查询时才可以
F
特殊数据类型
sql_variant数据类型可以保存除了text,ntext,image,xml,用户定义类型,max的可变长度,rowversion之外的任何数据类型
空间数据类型 sql2008提供了两种数据类型用于存储空间数据,geometry数据类型支持平面或欧几里德数据
geometry数据类型和sql标准版本1.1.0的开放地理信息联盟简单特性相一致,geography数据类型存储椭圆数据
例如全球卫星定位的经度和维度坐标,这些数据类型具有自己的访问和操作数据方法,也有自己特殊的扩展所有架构
F
SELECT ROWGUIDCOL FROM [dbo].[customer]
F
SELECT GETANSINULL('sss') 函数确定当前会话的默认可空性,当新列允许空值或该列或数据类型为空而且在表被创建或修改没有明确定义时,该函数返回1,强烈建议在建表时设置列为null或not null,这样可以消除二义性,同时可以保证你控制表的构建方式
F
sql2008引入了稀疏列的概念,当数据库允许很多列和很多行中存在null值,稀疏列通过利用更多的系统开销来检索not null值,从而降低null值的空间需求,因此当大部分数据都为null时,就可以体现出稀疏列的强大
用户定义数据类型
F
F
F
SELECT IDENTITYCOL FROM [dbo].[customer]
F
F
SELECT * FROM [INFORMATION_SCHEMA].[COLUMNS] SELECT [ORDINAL_POSITION] FROM [INFORMATION_SCHEMA].[COLUMNS] 提供[ORDINAL_POSITION]值显示列的原始位置,因此column_id不一定是该列的顺序位置,如果删除了某一列或添加了某一列
在sql2008中兼容性视图sys.sysindexes包含很多相同的信息,但是由于sql2005中引入的存储结构变化,因此他是不完整的
F
indexid在2~250或256~1005之间(251~255的值保留)由于一张表可以有999个非聚集索引
SELECT * FROM sys.[xml_indexes] XML索引
SELECT [hobt_id],[partition_id] FROM sys.[partitions] 里的[hobt_id]和[partition_id] 之间有一对一关系
F
SELECT OBJECT_NAME(p.[object_id]) AS NAME , p.[partition_id] , p.[partition_number] AS pnum , p.[rows] , a.[allocation_unit_id] AS au_id , a.[type_desc] AS page_type_desc , a.[total_pages] AS pages FROM sys.[partitions] p JOIN sys.[allocation_units] a ON p.[partition_id] = a.[container_id] WHERE [object_id] = OBJECT_ID('customer')
F
SELECT CONVERT(CHAR(8), OBJECT_NAME(i.object_id)) AS tablename , * FROM sys.[indexes] AS i INNER JOIN sys.[partitions] AS p ON [p].[object_id] = [i].[object_id] AND [p].[index_id] = [i].[index_id] INNER JOIN [sys].[system_internals_allocation_units] AS a ON a.[container_id] = [p].[partition_id] ORDER BY [i].[object_id]
F
数据页面
行偏移数组:看上去是数组形式,实际上是按顺序排列,定义行边界 (数组里的每个元素占用2字节)
数据页面头解释
metadata:该页所在对象ID
metadata:该页所在分区ID
metadata:该页所在分配单元的ID ,交换分区时候需要修改这个分配单元ID
freedata:该页面中的第一个可用空间的字节偏移量
Pminlen:行的固定长度部分的字节数
tornBits:一共有16个位 2字节:每位保存每个扇区的一位
fagBits:包含关于页面其他信息的2字节位图
F
F
想一下内存中的存储桶页面头部的buffer和hash存储桶肯定存在某种关联,然后使用key-value来查找存储桶中的页面
BUF @0x00000002708D36C0
bpage = 0x000000026BBE8000
buf和bpage都不是指向数据页面的物理地址
在vs里面找不到
F
F
数据行结构:只要数据是以非压缩形式存储的,我们将这种格式称为FixedVar格式
状态B字段中只使用一位,表示该记录是一条备份转发记录
F
F
F
CREATE FUNCTION convert_page_nums(@page_num binary(6)) RETURNS VARCHAR(11) AS BEGIN RETURN( CONVERT(VARCHAR(2),( CONVERT(INT,SUBSTRING(@page_num,6,1))* POWER(2,8) ) + (CONVERT(INT,SUBSTRING(@page_num,5,1))) ) + ':' + CONVERT(VARCHAR(11), (CONVERT(INT,SUBSTRING(@page_num,4,1)) * POWER(2,24)) + (CONVERT(INT,SUBSTRING(@page_num,3,1)) * POWER(2,16)) + (CONVERT(INT,SUBSTRING(@page_num,2,1)) * POWER(2,8)) + (CONVERT(INT,SUBSTRING(@page_num,1,1))) ) ) END SELECT dbo.convert_page_nums(0x6E0000000100); --SQL Server:将6字节的十六进制页面号转化成【文件号:页面号】格式函数 --http://www.cnblogs.com/xbf321/archive/2009/09/12/1565291.html
--使用未记录函数 sys.fn_PhysLocFormatter和一个未记录值%%physloc%%来返回结果行中的物理位置和表中的数据值 SELECT sys.fn_PhysLocFormatter(%%physloc%%) AS RID ,* FROM CUSTOMER --RID city region --(1:79:0) 1 2
%%physloc%%值不是关系引擎所能理解的,也就是在where子句中使用%%physloc%%,则sqlserver必须要检查哪些行位于%%physloc%%所指示的页面上,不能使用%%physloc%%来查找行,%%physloc%%作为sqlserver产品开发小组的一种调试功能而引入,不打算在产品应用程序中使用
F
F
SELECT minlen,maxlen FROM sysindexes minlen,maxlen只能在兼容性视图sysindexes里查询,所有目录视图也查不到 indexproperty()函数返回minlen值等于列长度( sys.COLUMNS 的max_length)加上4字节的和,其中不包括用于存储列数目的2字节,也不包括null位图 SELECT minlen , maxlen FROM sys.sysindexes WHERE id=OBJECT_ID('customer') SELECT INDEXPROPERTY(OBJECT_ID('customer'), NULL, 'minlen') AS '最小列长度' SELECT max_length+4 FROM sys.COLUMNS
F
syscolumn不再可靠
SELECT c.[name] AS columnname ,
c.[column_id] ,
pc.[max_inrow_length] ,
[pc].[system_type_id] ,
[pc].[leaf_offset]
FROM sys.[system_internals_partition_columns] pc
JOIN sys.[partitions] p ON p.[partition_id] = pc.[partition_id]
JOIN sys.[columns] c ON [column_id] = [partition_column_id]
AND c.[object_id] = p.[object_id]
WHERE p.[object_id] = OBJECT_ID('aa')
F
F
第一可变长度列 第二可变长度列 第三可变长度列
可变长度列偏移的长度
201
F
01111111110
从右到左
col10 col9 。。。。。id
‘a’ null 1
11111111100
从右到左
1 0 0
col10。。。。。 col1 id
‘b’ 2
F
F
日期和时间数据的存储
对于datetime和smalldatetime数据类型来说,日期值均被存储为0
F
对于datetimeoffset数据的列用2个字节存储timezone偏移,之所以用2字节是因为偏移量被存储为协调世界时UTC的小时和分钟数每部分一个字节
F
各种日期和时间制的转换
sql_variant数据类型存储
F
F
F
保证实体完整性要有主键
F
F
F
重建一张表或一个分区以修改压缩设置或删除碎片
被修改的列不能是text,image,ntext,rowversion,timestamp列
F
添加一个新列 with values
F
F
启用或禁用触发器
删除某一列时不会回收磁盘空间,除非你在表上建立聚集索引或重建聚集索引的方式回收空间
添加允许null的新列时,sqlserver修改只能是元数据操作
F
USE [sss] CREATE TABLE change ( col1 SMALLINT , col2 CHAR(10) , col3 CHAR(5) ) SELECT c.[name] AS column_name , c.[column_id] , pc.[max_inrow_length] , pc.[system_type_id] , pc.[leaf_offset] FROM sys.[system_internals_partition_columns] pc JOIN sys.[partitions] p ON p.[partition_id] = [pc].[partition_id] JOIN sys.[columns] c ON [column_id] = pc.[partition_column_id] AND c.[object_id] = p.[object_id] WHERE p.[object_id] = OBJECT_ID('change') --将smallint修改为int ALTER TABLE change ALTER COLUMN col1 INT --col1的位置值在行的更后面,偏移量4处没有任何行 SELECT c.[name] AS column_name , c.[column_id] , pc.[max_inrow_length] , pc.[system_type_id] , pc.[leaf_offset] FROM sys.[system_internals_partition_columns] pc JOIN sys.[partitions] p ON p.[partition_id] = [pc].[partition_id] JOIN sys.[columns] c ON [column_id] = pc.[partition_column_id] AND c.[object_id] = p.[object_id] WHERE p.[object_id] = OBJECT_ID('change')
F
无论修改数据类型还是修改数据类型的长度都非常麻烦 例如:int改bigint, char(10)改char(100)
USE [sss] --DROP TABLE [dbo].[bigchange] --建表 CREATE TABLE bigchange (col1 SMALLINT,col2 CHAR(2000),col3 CHAR(3000)) --插入测试数据 INSERT INTO [dbo].[bigchange] ( [col1], [col2], [col3] ) VALUES ( 1, -- col1 - smallint '2', -- col2 - char(5000) '3' -- col3 - char(1000) ) --查看行偏移 SELECT c.[name] AS column_name , c.[column_id] , pc.[max_inrow_length] , pc.[system_type_id] , pc.[leaf_offset] FROM sys.[system_internals_partition_columns] pc JOIN sys.[partitions] p ON p.[partition_id] = [pc].[partition_id] JOIN sys.[columns] c ON [column_id] = pc.[partition_column_id] AND c.[object_id] = p.[object_id] WHERE p.[object_id] = OBJECT_ID('bigchange') --column_name column_id max_inrow_length system_type_id leaf_offset --col1 1 2 52 4 --col2 2 2000 175 6 --col3 3 1000 175 2006 --改列长度 因为col3已经霸占列偏移位置 按道理 4+3000+3500=6500左右 ALTER TABLE [dbo].[bigchange] ALTER COLUMN [col2] CHAR(3500) --消息 1701,级别 16,状态 1,第 1 行 --创建或更改表 'bigchange' 失败,因为最小行大小是 11509,包括 7 字节的内部开销。而此值超出了允许的 8060 字节的最大表行大小。 --查看行偏移 SELECT c.[name] AS column_name , c.[column_id] , pc.[max_inrow_length] , pc.[system_type_id] , pc.[leaf_offset] FROM sys.[system_internals_partition_columns] pc JOIN sys.[partitions] p ON p.[partition_id] = [pc].[partition_id] JOIN sys.[columns] c ON [column_id] = pc.[partition_column_id] AND c.[object_id] = p.[object_id] WHERE p.[object_id] = OBJECT_ID('bigchange') --column_name column_id max_inrow_length system_type_id leaf_offset --col1 1 2 52 4 --col3 3 1000 175 2006 --col2 2 5000 175 3006 --column_name column_id max_inrow_length system_type_id leaf_offset --col1 1 2 52 4 --col3 3 3000 175 2006 --col2 2 3000 175 5006 --新行按照新的数据类型大小插入到页面,旧行不动,当update旧行,行长度改变导致位置需要改变 --有可能页拆分
没有办法修改表的逻辑列顺序
除非
1、不要用select * ,在select后面指定列名
2、按照列出现顺序创建视图
3、新建一张表,将旧表数据复制到新表,删除旧表,最后将新表命名为旧表的名称
不要忘记重新建立所有索引,约束,触发器
在SSMS里可以在某一特殊位置重新排列列顺序,但事实并非如此,在后台,SSMS实际利用第三种方法
并利用新索引,约束,触发器新建一张表
F
PFS页面结构
位4标记鬼影记录,堆表里没有鬼影记录,只有聚集索引叶子和非聚集索引才有鬼影记录
http://www.cnblogs.com/lyhabc/archive/2013/06/16/3138243.html
http://www.cnblogs.com/lyhabc/archive/2013/06/16/3138242.html
Sql Server 2012新特性 Online添加非空栏位.
高继伟的例子里,添加一个列 的步骤:1、add 一个int 类型的column 2、insert 默认值
pfs每隔8088个页面就是一个PFS页面
F
F
F
在堆表删除数据之后DBCC PAGE的打印格式一定要选择2转储这个页面,才能看到被删的数据
空间数据类型也是需要使用DBCC PAGE的打印格式一定要选择2才能看到空间数据
《SQL Server 简单模式下,误删除堆表记录如何恢复(绕过页眉校验)》张充
行偏移阵列里 2(0x2) -0(0x0)表示空间现在没有被使用而且不能被新行使用
--使用tablockx删除表记录可以避免堆中的空页面不回收 --估计sqlserver预计到在delete的时候有其他会话会使用页面,所以他不回收页面,有可能在delete的时候 --有insert操作,加TABLOCKX可以避免有其他会话对表进行更改,可以让--sqlserver放心回收页面 DELETE FROM change WITH (TABLOCKX) USE [sss] SELECT * FROM sys.[dm_db_partition_stats] WHERE [object_id]=OBJECT_ID('[dbo].[change]') --查看 sys.[dm_db_partition_stats]视图看一下堆表还有多少页面没有回收 SELECT [in_row_reserved_page_count], [lob_reserved_page_count], [row_overflow_reserved_page_count] FROM sys.[dm_db_partition_stats] WHERE [object_id]=OBJECT_ID('[dbo].[change]') SELECT * FROM change
F
F
sqlserver未来版本可能包括对堆中数据执行物理重组的机制,这样可以删除转发指针
F
在位更新 ?原位更新
sqlserver会构建delete和insert操作的行列表,这个列表如果比较小的话会存放在内存,大的话会存放在tempdb,该列表会按照键值和操作符进行排序,split/sort/collapse 运算符
F
第六章 索引 内部和管理
F
--一条被彻底废弃的存储过程 EXEC sys.[sp_addumpdevice] @devtype = '', -- varchar(20) @logicalname = NULL, -- sysname @physicalname = N'', -- nvarchar(260) @cntrltype = 0, -- smallint @devstatus = '' -- varchar(40)
sqlserver索引B树
可以使用多个CPU来创建和重建索引(MAXDOP),但是会造成更多逻辑碎片在重建索引的时候,建议还是单线程重建索引,虽然慢一些,但是碎片会减到最少
F
F
F
limited
DBCC SHOWCONTIG WITH FAST
如果索引的总页面不够10000页面,则sqlserver会将sampled转换为detailed
F
使用内置的DB_ID函数和OBJECT_ID函数要小心,如果sqlserver发现返回则扫描所有库和所有表
--分析索引的工具 SELECT * FROM [sys].[dm_db_index_physical_stats]() sql2000的DBCC SHOWCONTIG使用共享表锁S sql2005的DBCC SHOWCONTIG和[sys].[dm_db_index_physical_stats]()使用意向共享表锁IS --该锁与大部分锁兼容,一定要加锁,否则表架构修改或者行数的增加或减少就会影响统计结果
使用完全限定名避免出错
F
F
非聚集索引id(2~250或256~1005)
TRUNCATE TABLE [dbo].[DBCCResult] INSERT INTO DBCCResult EXEC ('DBCC IND(sss,Department,-1,1) ') SELECT * FROM [dbo].[DBCCResult] DBCC IND(数据库,表,输出内容,分区号)
在sql2008中一个表最多可以有1000个非聚集索引
F
F
从sqlserver7.0开始使用这种索引结构了
注意:在联接丛书中,聚集索引里面的隐藏唯一值写成uniqueifier,但是在数据页面里写成uniquifier
uniquifier
这个4字节的uniquefier整数值会复制到每个非聚集索引中
F
聚集索引键不要过宽,否则浪费非聚集索引的空间,聚集索引键最好不要修改,修改的话也要修改相应非聚集索引的值,产生碎片
唯一性 ,窄,静态(不要修改)
F
sql2005只能有249个非聚集索引
sql2008可以有999个非聚集索引
F
PRIMARY KEY和UNIQUE KEY约束是强制数据库实体完整性的方面
过滤非聚集索引
F
ignore_dup_key
statistics_norecompute:不自动更新统计信息
max_dop:
每个并行线程都会建立一个独立的树,当每个线程都结束时,树基本上被连接在一起
查看某个表的某个索引的统计信息是否自动更新和最后更新时间 EXEC sys.[sp_autostats] @tblname = N'change'--, -- nvarchar(776) --@flagc = '', -- varchar(10) --@indname = NULL -- sysname
F
物理索引结构
在将来版本中,sqlserver可能通过另一种机制进行强制唯一,不过由于向后兼容性问题,微软不太可能进行强制
非聚集索引结构
每个非聚集索引都会使用in-row data ,row-overflow data,lob data分配单元是否有错????
索引列不能是稀疏列
索引行不使用状态B 和Fsize值,固定长度数据的结束位置使用pminlen来确定,如果没有可变长度和可空类型值,则pminlen就是行结束位置
F
聚集索引结构
聚集索引和堆之间的唯一区别是:当没有unique约束的时候,sqlserver必须从系统内部保证唯一性,每个复制行需要一个附加的唯一标志值
F
如果非唯一,在兼容性视图sys.sysindexes会看到keycnt为2,因为加上了一个隐藏的key,为什麽在目录视图 sys.[indexes]里看不到这个keycnt,因为从sqlserver7.0开始一直沿用这种索引结构,所以才能在兼容性视图里看到,但是由于sql2005存储结构有很多变化,所以没有包含keycnt这一列
SELECT [keycnt] FROM sys.[sysindexes]
为什麽聚集索引的非叶级有一个引用页面的6字节指针而不是8字节,因为不需要保存行号
F
F
F
从叶级向上到根的顺序构建索引树
F
F
F
F
keyhashvalue是通过哈希公式派生出来的定长字符串,该数值在某些其他工具中用来代表行记录
keyhashvalue的产生:对于 一个建立在堆上的非聚集索引(c1和c2是索引列)哈希值将由c1列,c2列以及rid加起来生成
《sql2005 技术内幕 存储引擎》
最后显示的值被称为keyhashvalue,不真正存储在索引行中,他是在所有索引键列上使用哈希公式得到的固定长度字符串,6个字节
F
F
sqlserver将数据行的RID转换成fileid:pageid:slotnumber的格式,然后继续查找堆中相应的数据行
F
F
F
聚集键的key值被复制到非聚集索引的叶级中,如果聚集键更宽,则非聚集索引的叶级也会更宽
非唯一非聚集索引行
按照定义,书签必须是唯一的
为什麽非聚集索引可以不用定义为唯一??
因为如果是聚集索引上的非聚集索引,聚集索引有隐藏的uniquefier值
如果是堆上的非聚集索引,因为rowid是唯一的,所以依然可以定位到堆上的那一行
如果是重复值,无论聚集索引还是非聚集索引都会把重复的行都返回给你,例如返回5行重复的或者10行重复的
但是因为rowid和uniquefier是唯一的,这样可以保证无论堆和聚集索引都可以找到数据
F
include包含性列
F
过滤索引
1、当一列包含大部分null值而查询只查询非null值 和稀疏列结合使用尤为有用
2、允许null,但是有唯一约束
3、查询特定范围内的数据
特殊索引:1、计算列上的索引,2、视图上的索引,3、空间索引,4、全文索引,5、XML索引
F
--视图语句存储在sys.[syscomments] SELECT * FROM sys.[syscomments]
set选项
允许的函数
架构绑定
符合上面3个条件,才能使用固化的计算列和索引视图
--下面的set选项要设置为on才能建立索引视图 SET [concat_null_yields_null] ON SET QUOTED_IDENTIFIER ON SET [ansi_nulls] ON SET [ansi_padding] ON SET [ansi_warnings] ON SET NUMERIC_ROUNDABORT OFF SET ARITHABORT ON
函数一定要确定性函数
F
--确定函数的确定性 SELECT OBJECTPROPERTY(OBJECT_ID('functionname'),'isdeterministic')
如果函数包含float和real表达式,则函数包含float和real数据类型值的表达式或函数被认为是不确定的
架构绑定
如果视图所依据的表的所有者对自己的表进行修改,一个用户必须被授予表的references权限才能在该表上创建一个具有架构绑定的视图
计算列索引
在计算列上建立索引,计算列的数据类型不能是LOB数据类型text,varchar(max),xml
计算列可以为空,除非你加上isnull() 在建立计算列的时候,在计算列上建立索引必须要正确设置前面的6个set选项
F
USE [sss] CREATE TABLE t2(a INT,b DATETIME,c AS DATENAME(mm,b)) CREATE INDEX i2 ON [dbo].[t2]([c]) --消息 2729,级别 16,状态 1,第 1 行 --不能在索引或统计信息中使用 表'dbo.t2' 的列 'c',也不能将该列用作分区键,因为它不具有确定性。
datename根据语言的不同而不同,是不确定的
--是否计算列 SELECT COLUMNPROPERTY(OBJECT_ID('t2'),'c','iscomputed') --是否确定性 SELECT COLUMNPROPERTY(OBJECT_ID('t2'),'c','isdeterministics') --是否可索引 SELECT COLUMNPROPERTY(OBJECT_ID('t2'),'c','isndexable') --是否是精确值 SELECT COLUMNPROPERTY(OBJECT_ID('t2'),'c','isprecise')
加入persisted固化计算列是因为为了允许在基表float或real类型的列的计算列上建立索引
F
在final列上建立索引失败的原因是包含real类型的值是不确定的和不持久的
ALTER TABLE [dbo].[t2] ADD d as DATENAME(mm,b) PERSISTED ; --消息 4936,级别 16,状态 1,第 1 行 --无法持久化表 't2' 中的计算列 'd',因为此列不具有确定性。 --real和float才行
索引视图
F
如果索引视图定义包含group by,则select语句一定要包含count_big(*),返回一个bigint,8字节
F
--查看一个视图是否占用存储空间 SELECT si.[name] AS index_name , ps.[used_page_count] , ps.[reserved_page_count] , ps.[row_count] FROM sys.[dm_db_partition_stats] AS ps JOIN sys.[indexes] AS si ON [si].[object_id] = [ps].[object_id] WHERE [ps].[object_id] = OBJECT_ID('dbo.testview') CREATE VIEW testview AS SELECT 1 AS a SELECT a FROM [dbo].[testview]
可以在索引视图上建立多个非聚集索引,在更新基表的时候同时会更新索引视图
F
NOEXPAND查询提示
全文索引
能搜索表中字符和二进制值
空间索引
空间索引是作为内部表存储的聚集索引,除存储分解空间值之外,空间索引和常规索引具有完全相同的结构
XML索引
一个主XML索引是一个聚集索引并作为内部表进行存储,辅助XML索引是主XML索引上的一个非聚集索引
空间索引,XML索引都是B树
--查看系统中的内部表 无论是否使用更改跟踪,数据库中一定会有syscommittab表 USE [CT_DB] --USE [sss] SELECT * FROM sys.[internal_tables]
F
过滤索引,如果不涉及到过滤列值的修改就不需要更新过滤索引
对聚集索引和堆的测试
http://technet.microsoft.com/library/Cc917672
F
写入页面时会加闩锁,即使insert回滚,页面拆分也不会回滚
F
F
F
从堆中删除行
F
F
从B树删除行
--看一下该空间是否依然属于堆表 SELECT si.[name] AS index_name , ps.[used_page_count] , ps.[reserved_page_count] , ps.[row_count] FROM sys.[dm_db_partition_stats] AS ps JOIN sys.[indexes] AS si ON [si].[object_id] = [ps].[object_id] WHERE [ps].[object_id] = OBJECT_ID('dbo.testview')
F
鬼影:使用鬼滚的效率更高,对于回滚delete操作只需要将鬼影那一位改变一下,鬼影记录还用于行版本控制
ghost-cleanup thread
逻辑删除记录有两种方法
1、修改行偏移
2、鬼影
行偏移改为0不是将行移动到页头,0指示
行偏移阵列里 2(0x2) -0(0x0)表示空间现在没有被使用而且不能被新行使用
实际上记录还在
鬼影有两个作用
1、删除索引的时候不需要马上重排索引,降低开销,将重排操作推迟到ghost cleanup thread清理时,并将行删除
2、快照隔离的堆,select语句怎麽知道行已经被删除,每次更新的时候都将最新行版本发到tempdb,包括delete
如果使用行偏移的方法,由于行偏移是不发送到tempdb的(行版本为什麽叫行版本,只发送数据行到tempdb,不发送页头,行偏移页尾到tempdb),所以需要在行记录设置一个标志位ghost,使select行版本的时候知道这个行版本已经delete了,从而不能select出来
使用undocumented 的跟踪标志661禁用鬼影清除线程
--使用存储过程sys.[sp_clean_db_free_space]强制删除某个库中的鬼影记录 EXEC sys.[sp_clean_db_free_space] @dbname = NULL, -- sysname @cleaning_delay = 0 -- int --使用sys.[sp_clean_db_file_free_space] 对某个库中的某个文件的鬼影记录进行删除 EXEC sys.[sp_clean_db_file_free_space] @dbname = NULL, -- sysname @fileid = 0, -- int @cleaning_delay = 0 -- int
《http://www.cnblogs.com/lyhabc/archive/2013/06/16/3138214.html》
参考paul大牛的文章:
http://www.sqlskills.com/blogs/paul/inside-the-storage-engine-ghost-cleanup-in-depth/
You are here: Home >> Example Scripts >> Inside the Storage Engine: Ghost cleanup in depth
Inside the Storage Engine: Ghost cleanup in depth
F
F
鬼影记录出现的地方:1、快照隔离的堆 2、聚集索引的叶子页面 3、非聚集索引的叶子页面
聚集索引和非聚集索引的非叶子页面都不会出现鬼影记录
非叶子页面都是逻辑指针 :fileid ,pageid ,没有rowid
聚集索引的非聚集索引:file,page,键 6字节
堆上的非聚集索引:file,page,rowid 8字节
回收页
删除行后,整个页会被ghost后台线程重新分配
如果某页是表中剩下的唯一一个页面,则该页面不会被重新分配,一个表中至少会包含一个页面,即使该表是一个空表
F
最好在不要在需要经常修改的列上建立聚集索引
F
而这个pointer大小为9 byte(header占一byte,RID占8byte,RID的构成:4个字节的pageID,2个字节的fileID,2个字节的slotID)
转发存根 :1个字节 即header
F
update in place
非update in place :必要时可能会在tempdb建立列表
F
碎片
内部碎片:(通常被称为物理碎片或页密度)是指索引页面(叶级和非叶级)上有浪费空间的情况
外部碎片:(通常称为逻辑碎片或区碎片)是指包含聚集或非聚集索引叶级的页面或区没按照最有效的顺序排序,页面的逻辑顺序和物理顺序相同
F
中间级索引页上的行数永远都不会小于两行,无论 fillfactor 的值有多小
PAD_INDEX = { ON | OFF } 适用范围:SQL Server 2008 到 SQL Server 2014。 指定索引填充。 默认为 OFF。 ON fillfactor 指定的可用空间百分比应用于索引的中间级页。 OFF 或不指定 fillfactor 考虑到中间级页上的键集,将中间级页填充到接近其容量的程度,以留出足够的空间,使之至少能够容纳索引的最大的一行。 PAD_INDEX 选项只有在指定了 FILLFACTOR 时才有用,因为 PAD_INDEX 使用由 FILLFACTOR 指定的百分比。 如果为 FILLFACTOR 指定的百分比不够大,无法容纳一行,数据库引擎将在内部覆盖该百分比以允许最小值。 中间级索引页上的行数永远都不会小于两行,无论 fillfactor 的值有多小。 在向后兼容的语法中,WITH PAD_INDEX 等效于 WITH PAD_INDEX = ON。
F
F
F
SELECT [forwarded_record_count] , [ghost_record_count] , [version_ghost_record_count] FROM SYS.[dm_db_index_physical_stats]()
[ghost_record_count]:索引鬼影记录
在鬼影记录的位置不能插入任何新记录,因此如果有很多鬼影记录,则表会有很多内部碎片
(即表分散在更多页面上并且花费更长时间进行扫描),内部碎片页密度,扫描的时候要跳过鬼影记录
性能下降,页面上没有空间插入新行来避免外部碎片
[version_ghost_record_count]:快照隔离级别的堆的鬼影记录,直到所有相关事务提交或回滚后,鬼影才会被清除
F
alter index支持分区索引,因此您可以选择只对某个特殊分区进行碎片整理,同时该命令还允许你控制LOB数据是否受碎片整理的影响
重组索引默认压缩lob页面,默认值为ON
SQL2000中,用户可以压缩表中lob的唯一方法是卸载和重新加载lob数据,sql2005以后的lob压缩具有低密度区
注意:混合区不会对页面进行碎片整理
F
--评估重组索引的进度 SELECT [percent_complete] , [estimated_completion_time] FROM sys.[dm_exec_requests] WHERE [session_id] = 6
F
F
F
第七章 特殊存储
在第5章,标准行是以一种被称为FixedVar的格式存储的,SQLSERVER提供了存储数据的另一种格式,被称为列描述符(CD column described),FixedVar的格式和CD格式都可以存储大于8KB页面的特殊值
行溢出只针对变长数据列
F
varchar,nvarchar,sqlvariant和clr定义数据类型都可以存储在行溢出
之前的bigchange表使用变长列就不会受到长度限制了
--建表 CREATE TABLE bigchange (col1 SMALLINT,col2 CHAR(2000),col3 CHAR(3000)) --消息 1701,级别 16,状态 1,第 1 行 --创建或更改表 'bigchange' 失败,因为最小行大小是 11509,包括 7 字节的内部开销。而此值超出了允许的 8060 字节的最大表行大小。
F
每种分配单元都会有IAM页面
行溢出指针的前16个字节
B树中的级别,针对lob数据
24字节分两部分:前16字节跟lob指针一样的长度和结构,后8字节:fileid:pageid:slotid
lob指针16字节
http://tech.it168.com/a2010/0907/1100/000001100333_all.shtml
实际上我们从name字段内容之后阅读就可以了,即0000d1 07000000 00dc0000 00010001 00
是不是有点像缩略版的行溢出信息?
F
每个表有1024列的限制,但是使用稀疏列不受1024列的限制
F
个别列需要存储8000以上的字节,则应该使用lob(text,image,ntext)或max数据类型
lob
一个lob页面甚至可以同时有text,ntext,image数据
F
comment = [Textpointer] Slot 2 Column 2 Offset 0x15 Length 16
TextTimeStamp = 160825540608 RowId = (1:14550:2)
0A05C11C: c3bad2ce c3bad2ce c3bad2ce c3bad2ce ................
0A05C12C: c3bad2ce c3bad2ce c3bad2ce c3bad2ce ................
列偏移:15
长度:16
Type:3(DATA)和Type:0(SMALL_ROOT)
409页面类型为4 根节点
Blob row at: Page (1:408) Slot 0 Length: 196 Type: 2 (INTERNAL)
Blob Id: 28967305216 Level: 0 MaxLinks: 501 CurLinks: 11
Child 0 at Page (1:403) Slot 0 Size: 8040 Offset: 8040
Child 1 at Page (1:404) Slot 0 Size: 8040 Offset: 16080
408页面类型为3 子节点
Blob row at: Page (1:409) Slot 0 Length: 8054 Type: 3 (DATA)
Blob Id:28967305216
000000005815A06E: 00000002 01960000 00000002 01970000 ................
000000005815A07E: 00000002 01980000 00000002 01990000 ................
000000005815A08E: 00000002 019a0000 00000002 019b0000 ................
F
pagetype为3表示text_mixed页面
pagetype为4表示text_data页面
text in row选项
--查看text in row选项是否打开 SELECT [name],[text_in_row_limit] FROM sys.[tables] WHERE [name]='change'
F
F
F
max说明符
F
sqlserver为LOB数据分配页面时,使用两种分配策略
1、对于大小不足64KB的数据来说,随机分配一个页面,该页面来自大型对象IAM某部分的一个区,但是这些页面不一定是连续
2、对于大小超过64KB的数据来说,会使用一次只追加一个区的页面分配器并在区内连续写入页面
--如果发现lob数据变得很零碎,可以利用ALTER INDEX 的一个选项对lob数据进行碎片整理 --LOB_COMPACTION默认处于开启状态,因此你只需要保证不将其关闭就可以了 ALTER INDEX xx ON xx REORGANIZE WITH LOB_COMPACTION
文件流数据 filestream数据
lob数据在缓存中占用非常大的缓冲区
更新lob会导致大量数据库碎片
数据库文件会变得非常大
文件系统中存储的数据称为文件流
文件流数据的优点
lob数据存储在文件系统中,但是在数据库中有一个48字节的文件指针指向文件流
lob数据和结构数据同样有事务
lob数据可通过TSQL和NTFS流API访问,从而提高最大性能
lob大小只受NTFS卷大小限制,不受lob对象的2GB限制
文件流的缺点
对包含文件流数据的数据库不能使用数据库镜像
数据库快照不能包括文件流文件组
文件流数据不能被sqlserver加密
F
EXEC sys.[sp_configure] @configname = 'filestream access level', -- varchar(35) @configvalue = 1 -- int RECONFIGURE --访问文件流数据 --0 表示不允许访问文件流 --1 表示可以使用TSQL访问文件流数据 --2 表示可以使用TSQL和Win32 API访问文件流数据
F
行数据有一个默认文件组,文件流数据有一个默认文件组
CREATE DATABASE MyFilestreamDB ON PRIMARY (NAME=ROWDATA1,FILENAME='D:\MSSQL\Data\ROWDATA1.MDF'), FILEGROUP FILESTREAMGROUP1 CONTAINS FILESTREAM DEFAULT (NAME=FSDATA1,FILENAME='D:\MSSQL\Data\FILESTREAM1'), FILEGROUP FILESTREAMGROUP2 CONTAINS FILESTREAM (NAME=FSDATA2,FILENAME='D:\MSSQL\Data\FILESTREAM2') LOG ON (NAME=FSDBLOG,FILENAME='D:\MSSQL\Data\FSDB_LOG.LDF')
USE MyFilestreamDB CREATE TABLE MyFILESTREAMDB.DBO.RECORDS ( ID UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE , SERIALNUMBER INTEGER UNIQUE , CHART_PRIMARY VARBINARY(MAX) FILESTREAM NULL , CHART_SEONDARY VARBINARY(MAX) FILESTREAM NULL ) FILESTREAM_ON FILESTREAMGROUP1
文件夹名称将是GUID
F
当表删除时,会有垃圾收集线程删除文件和文件夹
sqlserver使用开放的文件句柄,使得在表存在时可以删除filestream数据
数据可以使用标准TSQL插入
F
USE MyFilestreamDB INSERT INTO [dbo].[RECORDS] SELECT NEWID() , 24 , CAST(REPLICATE(CONVERT(VARCHAR(MAX), 'base data'), 10000) AS VARBINARY(MAX)) , 0x --值0x是一个空二进制字符串,和null不同,filestream列中有非null值的每一行都有一个文件,即使是零长度的值也是如此
F
filestream数据更新时总是通过先delete后insert方法执行,所以可以看到存储更新列的目录中有一个新行
文件数据流数据操作支持的隔离级别
文件流和事务
同一事务的两个写操作访问相同的文件流数据会发生冲突
F
在事务日志备份和还原时使用$FSLOG文件夹中的数据
数据被删除,表被truncate和删除不会向$FSLOG文件夹添加文件,但是sqlserver的事务日志会记录删除操作,同时有一个新的系统表记录已经被删除的数据信息
文件流数据的垃圾收集
F
5秒钟的垃圾收集
文件流数据的元数据
F
SELECT [CHART_PRIMARY].PathName() FROM [dbo].[RECORDS] \\JOE\SQL2012\v02-A60EC2F8-2B24-11DF-9CC3-AF2E56D89593\MyFilestreamDB\dbo\RECORDS\CHART_PRIMARY\D3AF4CAF-33E0-4044-9401-B7C7FAC16B14\VolumeHint-HarddiskVolume2 --返回UNC格式的
USE MyFilestreamDB INSERT INTO [dbo].[RECORDS] SELECT NEWID() , 28 , CAST(REPLICATE(CONVERT(VARCHAR(MAX), 'base data'), 10000) AS VARBINARY(MAX)) , 0x DELETE [dbo].[RECORDS] WHERE [SERIALNUMBER]=26 SELECT [CHART_PRIMARY].PathName() FROM [dbo].[RECORDS] \\JOE\SQL2012\v02-A60EC2F8-2B24-11DF-9CC3-AF2E56D89593\MyFilestreamDB\dbo\RECORDS\CHART_PRIMARY\D3AF4CAF-33E0-4044-9401-B7C7FAC16B14\VolumeHint-HarddiskVolume2 CREATE TABLE DBCCResult ( PageFID NVARCHAR(200), PagePID NVARCHAR(200), IAMFID NVARCHAR(200), IAMPID NVARCHAR(200), ObjectID NVARCHAR(200), IndexID NVARCHAR(200), PartitionNumber NVARCHAR(200), PartitionID NVARCHAR(200), iam_chain_type NVARCHAR(200), PageType NVARCHAR(200), IndexLevel NVARCHAR(200), NextPageFID NVARCHAR(200), NextPagePID NVARCHAR(200), PrevPageFID NVARCHAR(200), PrevPagePID NVARCHAR(200) ) INSERT INTO DBCCResult EXEC ('DBCC IND(MyFilestreamDB,RECORDS,-1) ') SELECT * FROM [dbo].[DBCCResult] DBCC TRACEON(3604,-1) GO DBCC PAGE(MyFilestreamDB,1,168,2) GO
PAGE: (1:168) BUFFER: BUF @0x00000002FDF56E40 bpage = 0x00000002EC99E000 bhash = 0x0000000000000000 bpageno = (1:168) bdbid = 14 breferences = 0 bcputicks = 0 bsampleCount = 0 bUse1 = 13154 bstat = 0xb blog = 0x15acc bnext = 0x0000000000000000 PAGE HEADER: Page @0x00000002EC99E000 m_pageId = (1:168) m_headerVersion = 1 m_type = 2 m_typeFlagBits = 0x0 m_level = 0 m_flagBits = 0x8000 m_objId (AllocUnitId.idObj) = 87 m_indexId (AllocUnitId.idInd) = 256 Metadata: AllocUnitId = 72057594043629568 Metadata: PartitionId = 72057594039173120 Metadata: IndexId = 3 Metadata: ObjectId = 245575913 m_prevPage = (0:0) m_nextPage = (0:0) pminlen = 25 m_slotCnt = 2 m_freeCnt = 8036 m_freeData = 208 m_reservedCnt = 0 m_lsn = (40:226:30) m_xactReserved = 0 m_xdesId = (0:1248) m_ghostRecCnt = 0 m_tornBits = 0 DB Frag ID = 1 Allocation Status GAM (1:2) = ALLOCATED SGAM (1:3) = ALLOCATED PFS (1:1) = 0x60 MIXED_EXT ALLOCATED 0_PCT_FULL DIFF (1:6) = CHANGED ML (1:7) = NOT MIN_LOGGED DATA: Memory Dump @0x00000000164BA000 00000000164BA000: 01020000 00800001 00000000 00001900 00000000 .................... 00000000164BA014: 00000200 57000000 641fd000 a8000000 01000000 ....W...d........... 00000000164BA028: 28000000 e2000000 1e000000 e0040000 00000000 (................... 00000000164BA03C: 00000000 01000000 00000000 00000000 00000000 .................... 00000000164BA050: 00000000 00000000 00000000 00000000 1adf7043 ..................pC 00000000164BA064: 0a052fbb 49a10cb3 9de4e0fa bfa30000 00010000 ../.I............... 00000000164BA078: 00020000 1a7464af 55345b62 4d9293a7 454687cb .....td.U4[bM...EF.. 00000000164BA08C: 35a30000 00010000 00020000 16af4caf d3e03344 5.............L...3D 00000000164BA0A0: 409401b7 c7fac16b 14a30000 00010000 00020000 @......k............ 00000000164BA0B4: 16d2460e aacce08b 408e18f7 a19a77bd 6ea30000 ..F.....@.....w.n... 00000000164BA0C8: 00010001 00020000 00000000 3cb6afc0 01004600 ............<.....F. 00000000164BA0DC: 73007000 5f006400 72006f00 70006d00 65007200 s.p._.d.r.o.p.m.e.r. 00000000164BA0F0: 67006500 70007500 6c006c00 73007500 62007300 g.e.p.u.l.l.s.u.b.s. 00000000164BA104: 63007200 69007000 74006900 6f006e00 26040000 c.r.i.p.t.i.o.n.&... 00000000164BA118: 00005035 f1c00100 32007300 70005f00 64007200 ..P5....2.s.p._.d.r. 00000000164BA12C: 6f007000 72006500 6d006f00 74006500 6c006f00 o.p.r.e.m.o.t.e.l.o. 00000000164BA140: 67006900 6e002604 00000000 9f5467c4 01002200 g.i.n.&......Tg...". 00000000164BA154: 73007000 5f006400 73006e00 69006e00 66006f00 s.p._.d.s.n.i.n.f.o. 00000000164BA168: 26040000 00007d23 7cc40100 36007300 70005f00 &.....}#|...6.s.p._. 00000000164BA17C: 66007500 6c006c00 74006500 78007400 5f006400 f.u.l.l.t.e.x.t._.d. 00000000164BA190: 61007400 61006200 61007300 65002604 00000000 a.t.a.b.a.s.e.&..... 00000000164BA1A4: 1a3793c3 01007600 73007000 5f006600 75006c00 .7....v.s.p._.f.u.l. 00000000164BA1B8: 6c007400 65007800 74005f00 73006500 6d006100 l.t.e.x.t._.s.e.m.a. 00000000164BA1CC: 6e007400 69006300 5f007200 65006700 69007300 n.t.i.c._.r.e.g.i.s. 00000000164BA1E0: 74006500 72005f00 6c006100 6e006700 75006100 t.e.r._.l.a.n.g.u.a. 00000000164BA1F4: 67006500 5f007300 74006100 74006900 73007400 g.e._.s.t.a.t.i.s.t. 00000000164BA208: 69006300 73005f00 64006200 26040000 00007a63 i.c.s._.d.b.&.....zc 00000000164BA21C: 59c50100 5e007300 70005f00 66006900 6c006500 Y...^.s.p._.f.i.l.e. 00000000164BA230: 73007400 72006500 61006d00 5f007200 65006300 s.t.r.e.a.m._.r.e.c. 00000000164BA244: 61006c00 63007500 6c006100 74006500 5f006300 a.l.c.u.l.a.t.e._.c. 00000000164BA258: 6f006e00 74006100 69006e00 65007200 5f007300 o.n.t.a.i.n.e.r._.s. 00000000164BA26C: 69007a00 65002604 00000000 2c970fc6 01004400 i.z.e.&.....,.....D. 00000000164BA280: 73007000 5f006700 65006e00 65007200 61007400 s.p._.g.e.n.e.r.a.t. 00000000164BA294: 65005f00 61006700 65006e00 74005f00 70006100 e._.a.g.e.n.t._.p.a. 00000000164BA2A8: 72006100 6d006500 74006500 72002604 00000000 r.a.m.e.t.e.r.&..... 00000000164BA2BC: 0d5b30c6 01003c00 73007000 5f006600 6f007200 .[0...<.s.p._.f.o.r. 00000000164BA2D0: 65006900 67006e00 5f006b00 65007900 73005f00 e.i.g.n._.k.e.y.s._. 00000000164BA2E4: 72006f00 77007300 65007400 33002604 00000000 r.o.w.s.e.t.3.&..... 00000000164BA2F8: 53a188c6 01005600 73007000 5f006500 6e006100 S.....V.s.p._.e.n.a. 00000000164BA30C: 62006c00 65005f00 68006500 74006500 72006f00 b.l.e._.h.e.t.e.r.o. 00000000164BA320: 67006500 6e006500 6f007500 73005f00 73007500 g.e.n.e.o.u.s._.s.u. 00000000164BA334: 62007300 63007200 69007000 74006900 6f006e00 b.s.c.r.i.p.t.i.o.n. 00000000164BA348: 26040000 00009a52 b2c60100 38007300 70005f00 &......R....8.s.p._. 00000000164BA35C: 64007200 6f007000 6d006500 72006700 65007000 d.r.o.p.m.e.r.g.e.p. 00000000164BA370: 61007200 74006900 74006900 6f006e00 26040000 a.r.t.i.t.i.o.n.&... 00000000164BA384: 0000b759 11c70100 48007300 70005f00 66007500 ...Y....H.s.p._.f.u. 00000000164BA398: 6c006c00 74006500 78007400 5f007200 65006300 l.l.t.e.x.t._.r.e.c. 00000000164BA3AC: 79006300 6c006500 5f006300 72006100 77006c00 y.c.l.e._.c.r.a.w.l. 00000000164BA3C0: 5f006c00 6f006700 26040000 000047fe 12c70100 _.l.o.g.&.....G..... 00000000164BA3D4: 32007300 70005f00 67006500 6e006500 72006100 2.s.p._.g.e.n.e.r.a. 00000000164BA3E8: 74006500 66006900 6c007400 65007200 73002604 t.e.f.i.l.t.e.r.s.&. 00000000164BA3FC: 00000000 f4e47dc7 01003400 73007000 5f006600 ......}...4.s.p._.f. 00000000164BA410: 75006c00 6c007400 65007800 74005f00 63006100 u.l.l.t.e.x.t._.c.a. 00000000164BA424: 74006100 6c006f00 67002604 00000000 58e25ac8 t.a.l.o.g.&.....X.Z. 00000000164BA438: 01002400 73007000 5f006400 72006f00 70007400 ..$.s.p._.d.r.o.p.t. 00000000164BA44C: 79007000 65002604 00000000 bb5a69cd 01004c00 y.p.e.&......Zi...L. 00000000164BA460: 73007000 5f006500 78007000 69007200 65006400 s.p._.e.x.p.i.r.e.d. 00000000164BA474: 5f007300 75006200 73006300 72006900 70007400 _.s.u.b.s.c.r.i.p.t. 00000000164BA488: 69006f00 6e005f00 63006c00 65006100 6e007500 i.o.n._.c.l.e.a.n.u. 00000000164BA49C: 70002604 00000000 fa1348ce 01003800 73007000 p.&.......H...8.s.p. 00000000164BA4B0: 5f006700 65007400 6d006500 72006700 65006400 _.g.e.t.m.e.r.g.e.d. 00000000164BA4C4: 65006c00 65007400 65007400 79007000 65002604 e.l.e.t.e.t.y.p.e.&. 00000000164BA4D8: 00000000 e19c23cf 01005a00 73007000 5f006700 ......#...Z.s.p._.g. 00000000164BA4EC: 65007400 5f006d00 65007200 67006500 70007500 e.t._.m.e.r.g.e.p.u. 00000000164BA500: 62006c00 69007300 68006500 64006100 72007400 b.l.i.s.h.e.d.a.r.t. 00000000164BA514: 69006300 6c006500 70007200 6f007000 65007200 i.c.l.e.p.r.o.p.e.r. 00000000164BA528: 74006900 65007300 26040000 000020dc 36cf0100 t.i.e.s.&..... .6... 00000000164BA53C: 3a007300 70005f00 65006e00 75006d00 63007500 :.s.p._.e.n.u.m.c.u. 00000000164BA550: 73007400 6f006d00 72006500 73006f00 6c007600 s.t.o.m.r.e.s.o.l.v. 00000000164BA564: 65007200 73002604 00000000 6cbc9ed0 01002200 e.r.s.&.....l.....". 00000000164BA578: 73007000 5f006500 6e007500 6d006400 73006e00 s.p._.e.n.u.m.d.s.n. 00000000164BA58C: 26040000 00003b24 acd00100 32007300 70005f00 &.....;$....2.s.p._. 00000000164BA5A0: 67006500 74005f00 64006900 73007400 72006900 g.e.t._.d.i.s.t.r.i. 00000000164BA5B4: 62007500 74006f00 72002604 00000000 ccf73fd1 b.u.t.o.r.&.......?. 00000000164BA5C8: 01003200 73007000 5f006400 72006f00 70007000 ..2.s.p._.d.r.o.p.p. 00000000164BA5DC: 75006200 6c006900 63006100 74006900 6f006e00 u.b.l.i.c.a.t.i.o.n. 00000000164BA5F0: 26040000 00000e32 4cd10100 44007300 70005f00 &......2L...D.s.p._. 00000000164BA604: 67006500 74005f00 72006500 64006900 72006500 g.e.t._.r.e.d.i.r.e. 00000000164BA618: 63007400 65006400 5f007000 75006200 6c006900 c.t.e.d._.p.u.b.l.i. 00000000164BA62C: 73006800 65007200 26040000 0000e0d3 99d20100 s.h.e.r.&........... 00000000164BA640: 34007300 70005f00 66007500 6c006c00 74006500 4.s.p._.f.u.l.l.t.e. 00000000164BA654: 78007400 5f007300 65007200 76006900 63006500 x.t._.s.e.r.v.i.c.e. 00000000164BA668: 26040000 00001454 efd30100 38007300 70005f00 &......T....8.s.p._. 00000000164BA67C: 65006e00 61006200 6c006500 61006700 65006e00 e.n.a.b.l.e.a.g.e.n. 00000000164BA690: 74006f00 66006600 6c006f00 61006400 26040000 t.o.f.f.l.o.a.d.&... 00000000164BA6A4: 0000d840 11d40100 5a007300 70005f00 66006900 ...@....Z.s.p._.f.i. 00000000164BA6B8: 6c006500 73007400 72006500 61006d00 5f006600 l.e.s.t.r.e.a.m._.f. 00000000164BA6CC: 6f007200 63006500 5f006700 61007200 62006100 o.r.c.e._.g.a.r.b.a. 00000000164BA6E0: 67006500 5f006300 6f006c00 6c006500 63007400 g.e._.c.o.l.l.e.c.t. 00000000164BA6F4: 69006f00 6e002604 00000000 865485d4 01002800 i.o.n.&......T....(. 00000000164BA708: 73007000 5f006400 72006f00 70007300 65007200 s.p._.d.r.o.p.s.e.r. 00000000164BA71C: 76006500 72002604 00000000 1a27a3d4 01003a00 v.e.r.&......'....:. 00000000164BA730: 73007000 5f006600 6f007200 65006900 67006e00 s.p._.f.o.r.e.i.g.n. 00000000164BA744: 5f006b00 65007900 73005f00 72006f00 77007300 _.k.e.y.s._.r.o.w.s. 00000000164BA758: 65007400 26040000 00000e95 d5d40100 4c007300 e.t.&...........L.s. 00000000164BA76C: 70005f00 66007500 6c006c00 74006500 78007400 p._.f.u.l.l.t.e.x.t. 00000000164BA780: 5f006c00 6f006100 64005f00 74006800 65007300 _.l.o.a.d._.t.h.e.s. 00000000164BA794: 61007500 72007500 73005f00 66006900 6c006500 a.u.r.u.s._.f.i.l.e. 00000000164BA7A8: 26040000 00000efe e6d40100 60007300 70005f00 &...........`.s.p._. 00000000164BA7BC: 67006500 74005f00 6a006f00 62005f00 73007400 g.e.t._.j.o.b._.s.t. 00000000164BA7D0: 61007400 75007300 5f006d00 65007200 67006500 a.t.u.s._.m.e.r.g.e. 00000000164BA7E4: 73007500 62007300 63007200 69007000 74006900 s.u.b.s.c.r.i.p.t.i. 00000000164BA7F8: 6f006e00 5f006100 67006500 6e007400 26040000 o.n._.a.g.e.n.t.&... 00000000164BA80C: 00006bd0 a0d50100 32007300 70005f00 64007200 ..k.....2.s.p._.d.r. 00000000164BA820: 6f007000 6d006500 72006700 65006600 69006c00 o.p.m.e.r.g.e.f.i.l. 00000000164BA834: 74006500 72002604 00000000 3e7fbdd5 01004a00 t.e.r.&.....>.....J. 00000000164BA848: 73007000 5f006400 72006f00 70006d00 65007200 s.p._.d.r.o.p.m.e.r. 00000000164BA85C: 67006500 61006c00 74006500 72006e00 61007400 g.e.a.l.t.e.r.n.a.t. 00000000164BA870: 65007000 75006200 6c006900 73006800 65007200 e.p.u.b.l.i.s.h.e.r. 00000000164BA884: 26040000 0000c4b0 8bd80100 3e007300 70005f00 &...........>.s.p._. 00000000164BA898: 64007200 6f007000 6d006500 72006700 65007300 d.r.o.p.m.e.r.g.e.s. 00000000164BA8AC: 75006200 73006300 72006900 70007400 69006f00 u.b.s.c.r.i.p.t.i.o. 00000000164BA8C0: 6e002604 00000000 2548b5d8 01002800 73007000 n.&.....%H....(.s.p. 00000000164BA8D4: 5f006400 72006f00 70006400 65007600 69006300 _.d.r.o.p.d.e.v.i.c. 00000000164BA8E8: 65002604 00000000 427f99d9 01002800 73007000 e.&.....B.....(.s.p. 00000000164BA8FC: 5f006500 78006500 63007500 74006500 73007100 _.e.x.e.c.u.t.e.s.q. 00000000164BA910: 6c002604 00000000 95981dda 01004e00 73007000 l.&...........N.s.p. 00000000164BA924: 5f006500 6e007500 6d006500 72006100 74006500 _.e.n.u.m.e.r.a.t.e. 00000000164BA938: 70006500 6e006400 69006e00 67007300 63006800 p.e.n.d.i.n.g.s.c.h. 00000000164BA94C: 65006d00 61006300 68006100 6e006700 65007300 e.m.a.c.h.a.n.g.e.s. 00000000164BA960: 26040000 0000ca5e 8cdc0100 46007300 70005f00 &......^....F.s.p._. 00000000164BA974: 67006500 74006400 65006600 61007500 6c007400 g.e.t.d.e.f.a.u.l.t. 00000000164BA988: 64006100 74006100 74007900 70006500 6d006100 d.a.t.a.t.y.p.e.m.a. 00000000164BA99C: 70007000 69006e00 67002604 00000000 c791b4dd p.p.i.n.g.&......... 00000000164BA9B0: 01003400 73007000 5f006400 72006f00 70007300 ..4.s.p._.d.r.o.p.s. 00000000164BA9C4: 75006200 73006300 72006900 70007400 69006f00 u.b.s.c.r.i.p.t.i.o. 00000000164BA9D8: 6e002604 00000000 ca4ed0dd 01002e00 73007000 n.&......N......s.p. 00000000164BA9EC: 5f006500 6e007500 6d006500 72007200 6f007200 _.e.n.u.m.e.r.r.o.r. 00000000164BAA00: 6c006f00 67007300 26040000 00003919 1ede0100 l.o.g.s.&.....9..... 00000000164BAA14: 36007300 70005f00 64007200 6f007000 73007200 6.s.p._.d.r.o.p.s.r. 00000000164BAA28: 76007200 6f006c00 65006d00 65006d00 62006500 v.r.o.l.e.m.e.m.b.e. 00000000164BAA3C: 72002604 00000000 a39ca9df 01004e00 73007000 r.&...........N.s.p. 00000000164BAA50: 5f006700 65007400 5f004f00 72006100 63006c00 _.g.e.t._.O.r.a.c.l. 00000000164BAA64: 65005f00 70007500 62006c00 69007300 68006500 e._.p.u.b.l.i.s.h.e. 00000000164BAA78: 72005f00 6d006500 74006100 64006100 74006100 r._.m.e.t.a.d.a.t.a. 00000000164BAA8C: 26040000 0000d3c1 bbdf0100 30007300 70005f00 &...........0.s.p._. 00000000164BAAA0: 64007200 6f007000 72006f00 6c006500 6d006500 d.r.o.p.r.o.l.e.m.e. 00000000164BAAB4: 6d006200 65007200 26040000 00002572 58e00100 m.b.e.r.&.....%rX... 00000000164BAAC8: 36007300 70005f00 67006500 74005000 72006f00 6.s.p._.g.e.t.P.r.o. 00000000164BAADC: 63006500 73007300 6f007200 55007300 61006700 c.e.s.s.o.r.U.s.a.g. 00000000164BAAF0: 65002604 00000000 e995a7e0 01003a00 73007000 e.&...........:.s.p. 00000000164BAB04: 5f006500 6e007500 6d006600 75006c00 6c007300 _.e.n.u.m.f.u.l.l.s. 00000000164BAB18: 75006200 73006300 72006900 62006500 72007300 u.b.s.c.r.i.b.e.r.s. 00000000164BAB2C: 26040000 00000377 43e10100 1e007300 70005f00 &......wC.....s.p._. 00000000164BAB40: 66006b00 65007900 73002604 00000000 369565e1 f.k.e.y.s.&.....6.e. 00000000164BAB54: 01002400 73007000 5f006400 72006f00 70007200 ..$.s.p._.d.r.o.p.r. 00000000164BAB68: 6f006c00 65002604 00000000 7967f5e2 01004200 o.l.e.&.....yg....B. 00000000164BAB7C: 73007000 5f006400 72006f00 70006400 79006e00 s.p._.d.r.o.p.d.y.n. 00000000164BAB90: 61006d00 69006300 73006e00 61007000 73006800 a.m.i.c.s.n.a.p.s.h. 00000000164BABA4: 6f007400 5f006a00 6f006200 26040000 00003d61 o.t._.j.o.b.&.....=a 00000000164BABB8: 46e50100 4c007300 70005f00 67006500 74007100 F...L.s.p._.g.e.t.q. 00000000164BABCC: 75006500 75006500 64006100 72007400 69006300 u.e.u.e.d.a.r.t.i.c. 00000000164BABE0: 6c006500 73007900 6e006300 74007200 61006e00 l.e.s.y.n.c.t.r.a.n. 00000000164BABF4: 69006e00 66006f00 26040000 0000a5f3 4de50100 i.n.f.o.&.......M... 00000000164BAC08: 2a007300 70005f00 64007200 6f007000 6d006500 *.s.p._.d.r.o.p.m.e. 00000000164BAC1C: 73007300 61006700 65002604 00000000 958050e5 s.s.a.g.e.&.......P. 00000000164BAC30: 01005c00 73007000 5f004600 75007a00 7a007900 ..\.s.p._.F.u.z.z.y. 00000000164BAC44: 4c006f00 6f006b00 75007000 54006100 62006c00 L.o.o.k.u.p.T.a.b.l. 00000000164BAC58: 65004d00 61006900 6e007400 65006e00 61006e00 e.M.a.i.n.t.e.n.a.n. 00000000164BAC6C: 63006500 55006e00 69006e00 73007400 61006c00 c.e.U.n.i.n.s.t.a.l. 00000000164BAC80: 6c002604 00000000 a98c5ce5 01003c00 73007000 l.&.......\...<.s.p. 00000000164BAC94: 5f006600 75006c00 6c007400 65007800 74005f00 _.f.u.l.l.t.e.x.t._. 00000000164BACA8: 6b006500 79006d00 61007000 70006900 6e006700 k.e.y.m.a.p.p.i.n.g. 00000000164BACBC: 73002604 00000000 5bc461e5 01003400 73007000 s.&.....[.a...4.s.p. 00000000164BACD0: 5f006400 72006f00 70006d00 65007200 67006500 _.d.r.o.p.m.e.r.g.e. 00000000164BACE4: 61007200 74006900 63006c00 65002604 00000000 a.r.t.i.c.l.e.&..... 00000000164BACF8: f1340ae7 01003200 73007000 5f006400 72006f00 .4....2.s.p._.d.r.o. 00000000164BAD0C: 70006400 69007300 74007200 69006200 75007400 p.d.i.s.t.r.i.b.u.t. 00000000164BAD20: 6f007200 26040000 000031c5 aee70100 3c007300 o.r.&.....1.....<.s. 00000000164BAD34: 70005f00 65006e00 75006d00 5f006f00 6c006500 p._.e.n.u.m._.o.l.e. 00000000164BAD48: 64006200 5f007000 72006f00 76006900 64006500 d.b._.p.r.o.v.i.d.e. 00000000164BAD5C: 72007300 26040000 0000b83c 1be80100 3c007300 r.s.&......<....<.s. 00000000164BAD70: 70005f00 64007200 6f007000 72006500 70006c00 p._.d.r.o.p.r.e.p.l. 00000000164BAD84: 73007900 6d006d00 65007400 72006900 63006b00 s.y.m.m.e.t.r.i.c.k. 00000000164BAD98: 65007900 26040000 000060b7 1ee80100 24007300 e.y.&.....`.....$.s. 00000000164BADAC: 70005f00 64007200 6f007000 75007300 65007200 p._.d.r.o.p.u.s.e.r. 00000000164BADC0: 26040000 00004845 95e80100 34007300 70005f00 &.....HE....4.s.p._. 00000000164BADD4: 66006900 72007300 74006f00 6e006c00 79005f00 f.i.r.s.t.o.n.l.y._. 00000000164BADE8: 62006900 74006d00 61007000 26040000 0000ddbe b.i.t.m.a.p.&....... 00000000164BADFC: 65ec0100 30007300 70005f00 66007500 6c006c00 e...0.s.p._.f.u.l.l. 00000000164BAE10: 74006500 78007400 5f007400 61006200 6c006500 t.e.x.t._.t.a.b.l.e. 00000000164BAE24: 26040000 00007063 32ed0100 42007300 70005f00 &.....pc2...B.s.p._. 00000000164BAE38: 66006f00 72006500 69006700 6e005f00 6b006500 f.o.r.e.i.g.n._.k.e. 00000000164BAE4C: 79007300 5f007200 6f007700 73006500 74005f00 y.s._.r.o.w.s.e.t._. 00000000164BAE60: 72006d00 74002604 00000000 3fe0eded 01002600 r.m.t.&.....?.....&. 00000000164BAE74: 73007000 5f006400 72006f00 70006c00 6f006700 s.p._.d.r.o.p.l.o.g. 00000000164BAE88: 69006e00 26040000 00006031 92ee0100 3c007300 i.n.&.....`1....<.s. 00000000164BAE9C: 70005f00 64007200 6f007000 65007800 74006500 p._.d.r.o.p.e.x.t.e. 00000000164BAEB0: 6e006400 65006400 70007200 6f007000 65007200 n.d.e.d.p.r.o.p.e.r. 00000000164BAEC4: 74007900 26040000 0000fb74 a0ee0100 42007300 t.y.&......t....B.s. 00000000164BAED8: 70005f00 66007500 6c006c00 74006500 78007400 p._.f.u.l.l.t.e.x.t. 00000000164BAEEC: 5f007000 65006e00 64006900 6e006700 63006800 _.p.e.n.d.i.n.g.c.h. 00000000164BAF00: 61006e00 67006500 73002604 00000000 27bf15ef a.n.g.e.s.&.....'... 00000000164BAF14: 01003800 73007000 5f006400 72006f00 70006400 ..8.s.p._.d.r.o.p.d. 00000000164BAF28: 69007300 74007200 69006200 75007400 69006f00 i.s.t.r.i.b.u.t.i.o. 00000000164BAF3C: 6e006400 62002604 00000000 99f756f0 01004c00 n.d.b.&.......V...L. 00000000164BAF50: 73007000 5f006600 6c007500 73006800 5f006300 s.p._.f.l.u.s.h._.c. 00000000164BAF64: 6f006d00 6d006900 74005f00 74006100 62006c00 o.m.m.i.t._.t.a.b.l. 00000000164BAF78: 65005f00 6f006e00 5f006400 65006d00 61006e00 e._.o.n._.d.e.m.a.n. 00000000164BAF8C: 64002604 00000000 4901b8f0 01003600 73007000 d.&.....I.....6.s.p. 00000000164BAFA0: 5f006400 72006f00 70006400 69007300 74007000 _.d.r.o.p.d.i.s.t.p. 00000000164BAFB4: 75006200 6c006900 73006800 65007200 26040000 u.b.l.i.s.h.e.r.&... 00000000164BAFC8: 00001467 f0f10100 3c007300 70005f00 64007200 ...g....<.s.p._.d.r. 00000000164BAFDC: 6f007000 70007500 6c006c00 73007500 62007300 o.p.p.u.l.l.s.u.b.s. 00000000164BAFF0: 63007200 69007000 74006900 6f006e00 26040000 c.r.i.p.t.i.o.n.&... 00000000164BB004: 00005491 07f20100 2a007300 70005f00 66006f00 ..T.....*.s.p._.f.o. 00000000164BB018: 72006500 69006700 6e006b00 65007900 73002604 r.e.i.g.n.k.e.y.s.&. 00000000164BB02C: 00000000 0d5231f2 01003800 73007000 5f006600 .....R1...8.s.p._.f. 00000000164BB040: 6c007500 73006800 5f006300 6f006d00 6d006900 l.u.s.h._.c.o.m.m.i. 00000000164BB054: 74005f00 74006100 62006c00 65002604 00000000 t._.t.a.b.l.e.&..... 00000000164BB068: 740e33f2 01007a00 73007000 5f006600 75006c00 t.3...z.s.p._.f.u.l. 00000000164BB07C: 6c007400 65007800 74005f00 73006500 6d006100 l.t.e.x.t._.s.e.m.a. 00000000164BB090: 6e007400 69006300 5f007500 6e007200 65006700 n.t.i.c._.u.n.r.e.g. 00000000164BB0A4: 69007300 74006500 72005f00 6c006100 6e006700 i.s.t.e.r._.l.a.n.g. 00000000164BB0B8: 75006100 67006500 5f007300 74006100 74006900 u.a.g.e._.s.t.a.t.i. 00000000164BB0CC: 73007400 69006300 73005f00 64006200 26040000 s.t.i.c.s._.d.b.&... 00000000164BB0E0: 0000afd6 d1f20100 2e007300 70005f00 64007200 ..........s.p._.d.r. 00000000164BB0F4: 6f007000 70007500 62006c00 69007300 68006500 o.p.p.u.b.l.i.s.h.e. 00000000164BB108: 72002604 00000000 c05f32f3 01003c00 73007000 r.&......_2...<.s.p. 00000000164BB11C: 5f006400 72006f00 70006d00 65007200 67006500 _.d.r.o.p.m.e.r.g.e. 00000000164BB130: 6c006f00 67007300 65007400 74006900 6e006700 l.o.g.s.e.t.t.i.n.g. 00000000164BB144: 73002604 00000000 06cb52f3 01003400 73007000 s.&.......R...4.s.p. 00000000164BB158: 5f006600 75006c00 6c007400 65007800 74005f00 _.f.u.l.l.t.e.x.t._. 00000000164BB16C: 67006500 74006400 61007400 61002604 00000000 g.e.t.d.a.t.a.&..... 00000000164BB180: fee227f4 01003400 73007000 5f006500 6e006100 ..'...4.s.p._.e.n.a. 00000000164BB194: 62006c00 65005f00 73007100 6c005f00 64006500 b.l.e._.s.q.l._.d.e. 00000000164BB1A8: 62007500 67002604 00000000 06989bf4 01003200 b.u.g.&...........2. 00000000164BB1BC: 73007000 5f006600 75006c00 6c007400 65007800 s.p._.f.u.l.l.t.e.x. 00000000164BB1D0: 74005f00 63006f00 6c007500 6d006e00 26040000 t._.c.o.l.u.m.n.&... 00000000164BB1E4: 0000dba5 a2f40100 3e007300 70005f00 67006500 ........>.s.p._.g.e. 00000000164BB1F8: 74006100 67006500 6e007400 70006100 72006100 t.a.g.e.n.t.p.a.r.a. 00000000164BB20C: 6d006500 74006500 72006c00 69007300 74002604 m.e.t.e.r.l.i.s.t.&. 00000000164BB220: 00000000 47dacef5 01002200 73007000 5f006500 ....G.....".s.p._.e. 00000000164BB234: 78006500 63007500 74006500 26040000 0000a02e x.e.c.u.t.e.&....... 00000000164BB248: 6ef60100 34007300 70005f00 67006500 74007000 n...4.s.p._.g.e.t.p. 00000000164BB25C: 75006200 6c006900 73006800 65007200 6c006900 u.b.l.i.s.h.e.r.l.i. 00000000164BB270: 6e006b00 26040000 00008e9a 87f60100 38007300 n.k.&...........8.s. 00000000164BB284: 70005f00 64007200 6f007000 6c006900 6e006b00 p._.d.r.o.p.l.i.n.k. 00000000164BB298: 65006400 73007200 76006c00 6f006700 69006e00 e.d.s.r.v.l.o.g.i.n. 00000000164BB2AC: 26040000 0000bb63 b9f60100 28007300 70005f00 &......c....(.s.p._. 00000000164BB2C0: 67006500 74006100 70007000 6c006f00 63006b00 g.e.t.a.p.p.l.o.c.k. 00000000164BB2D4: 26040000 00006ccb a3f70100 3c007300 70005f00 &.....l.....<.s.p._. 00000000164BB2E8: 65006e00 75006d00 6f006c00 65006400 62006400 e.n.u.m.o.l.e.d.b.d. 00000000164BB2FC: 61007400 61007300 6f007500 72006300 65007300 a.t.a.s.o.u.r.c.e.s. 00000000164BB310: 26040000 00001e52 d2f80100 3c007300 70005f00 &......R....<.s.p._. 00000000164BB324: 66006f00 72006500 69006700 6e005f00 6b006500 f.o.r.e.i.g.n._.k.e. 00000000164BB338: 79007300 5f007200 6f007700 73006500 74003200 y.s._.r.o.w.s.e.t.2. 00000000164BB34C: 26040000 0000fed7 b5f90100 68007300 70005f00 &...........h.s.p._. 00000000164BB360: 65007300 74006900 6d006100 74006500 64005f00 e.s.t.i.m.a.t.e.d._. 00000000164BB374: 72006f00 77007300 69007a00 65005f00 72006500 r.o.w.s.i.z.e._.r.e. 00000000164BB388: 64007500 63007400 69006f00 6e005f00 66006f00 d.u.c.t.i.o.n._.f.o. 00000000164BB39C: 72005f00 76006100 72006400 65006300 69006d00 r._.v.a.r.d.e.c.i.m. 00000000164BB3B0: 61006c00 26040000 00004918 63fa0100 3c007300 a.l.&.....I.c...<.s. 00000000164BB3C4: 70005f00 64007200 6f007000 6d006500 72006700 p._.d.r.o.p.m.e.r.g. 00000000164BB3D8: 65007000 75006200 6c006900 63006100 74006900 e.p.u.b.l.i.c.a.t.i. 00000000164BB3EC: 6f006e00 26040000 0000db0a f7fa0100 56007300 o.n.&...........V.s. 00000000164BB400: 70005f00 65007300 74006900 6d006100 74006500 p._.e.s.t.i.m.a.t.e. 00000000164BB414: 5f006400 61007400 61005f00 63006f00 6d007000 _.d.a.t.a._.c.o.m.p. 00000000164BB428: 72006500 73007300 69006f00 6e005f00 73006100 r.e.s.s.i.o.n._.s.a. 00000000164BB43C: 76006900 6e006700 73002604 00000000 4a2761fb v.i.n.g.s.&.....J'a. 00000000164BB450: 01005800 73007000 5f004600 75007a00 7a007900 ..X.s.p._.F.u.z.z.y. 00000000164BB464: 4c006f00 6f006b00 75007000 54006100 62006c00 L.o.o.k.u.p.T.a.b.l. 00000000164BB478: 65004d00 61006900 6e007400 65006e00 61006e00 e.M.a.i.n.t.e.n.a.n. 00000000164BB48C: 63006500 49006e00 73007400 61006c00 6c002604 c.e.I.n.s.t.a.l.l.&. 00000000164BB4A0: 00000000 85cefafb 01003000 73007000 5f006400 ..........0.s.p._.d. 00000000164BB4B4: 72006f00 70007300 75006200 73006300 72006900 r.o.p.s.u.b.s.c.r.i. 00000000164BB4C8: 62006500 72002604 00000000 0294c1fc 01002a00 b.e.r.&...........*. 00000000164BB4DC: 73007000 5f006400 72006f00 70006f00 72007000 s.p._.d.r.o.p.o.r.p. 00000000164BB4F0: 68006100 6e007300 26040000 0000a66c 46fe0100 h.a.n.s.&......lF... 00000000164BB504: 2c007300 70005f00 67006500 74006200 69006e00 ,.s.p._.g.e.t.b.i.n. 00000000164BB518: 64007400 6f006b00 65006e00 26040000 00005447 d.t.o.k.e.n.&.....TG 00000000164BB52C: a5ff0100 56007300 70005f00 46007500 7a007a00 ....V.s.p._.F.u.z.z. 00000000164BB540: 79004c00 6f006f00 6b007500 70005400 61006200 y.L.o.o.k.u.p.T.a.b. 00000000164BB554: 6c006500 4d006100 69006e00 74006500 6e006100 l.e.M.a.i.n.t.e.n.a. 00000000164BB568: 6e006300 65004900 6e007600 6f006b00 65002604 n.c.e.I.n.v.o.k.e.&. 00000000164BB57C: 00000000 89ebd0ff 01003800 73007000 5f006700 ..........8.s.p._.g. 00000000164BB590: 65007400 5f007100 75006500 72007900 5f007400 e.t._.q.u.e.r.y._.t. 00000000164BB5A4: 65006d00 70006c00 61007400 65000000 6d006900 e.m.p.l.a.t.e...m.i. 00000000164BB5B8: 63007300 6e006100 70007300 68006f00 74005f00 c.s.n.a.p.s.h.o.t._. 00000000164BB5CC: 6a006f00 62002604 00000000 1c071fe3 01002600 j.o.b.&...........&. 00000000164BB5E0: 73007000 5f006800 65006c00 70006900 6e006400 s.p._.h.e.l.p.i.n.d. 00000000164BB5F4: 65007800 26040000 00006c6f 32e30100 28007300 e.x.&.....lo2...(.s. 00000000164BB608: 70005f00 68006500 6c007000 64006500 76006900 p._.h.e.l.p.d.e.v.i. 00000000164BB61C: 63006500 26040000 0000879d 51e30100 3c007300 c.e.&.......Q...<.s. 00000000164BB630: 70005f00 68006500 6c007000 6d006500 72006700 p._.h.e.l.p.m.e.r.g. 00000000164BB644: 65007000 75006200 6c006900 63006100 74006900 e.p.u.b.l.i.c.a.t.i. 00000000164BB658: 6f006e00 26040000 0000d3d9 dde30100 38007300 o.n.&...........8.s. 00000000164BB66C: 70005f00 68006500 6c007000 64006900 73007400 p._.h.e.l.p.d.i.s.t. 00000000164BB680: 72006900 62007500 74006900 6f006e00 64006200 r.i.b.u.t.i.o.n.d.b. 00000000164BB694: 26040000 0000a49e 32e40100 3c007300 70005f00 &.......2...<.s.p._. 00000000164BB6A8: 68006500 6c007000 70007500 6c006c00 73007500 h.e.l.p.p.u.l.l.s.u. 00000000164BB6BC: 62007300 63007200 69007000 74006900 6f006e00 b.s.c.r.i.p.t.i.o.n. 00000000164BB6D0: 26040000 000083e9 5fe40100 38007300 70005f00 &......._...8.s.p._. 00000000164BB6E4: 68006500 6c007000 5f006100 67006500 6e007400 h.e.l.p._.a.g.e.n.t. 00000000164BB6F8: 5f007000 72006f00 66006900 6c006500 26040000 _.p.r.o.f.i.l.e.&... 00000000164BB70C: 00009939 82e40100 36007300 70005f00 68006500 ...9....6.s.p._.h.e. 00000000164BB720: 6c007000 71007200 65006100 64006500 72005f00 l.p.q.r.e.a.d.e.r._. 00000000164BB734: 61006700 65006e00 74002604 00000000 5929f1e4 a.g.e.n.t.&.....Y).. 00000000164BB748: 01004400 73007000 5f006700 72006100 6e007400 ..D.s.p._.g.r.a.n.t. 00000000164BB75C: 5f007000 75006200 6c006900 63006100 74006900 _.p.u.b.l.i.c.a.t.i. 00000000164BB770: 6f006e00 5f006100 63006300 65007300 73002604 o.n._.a.c.c.e.s.s.&. 00000000164BB784: 00000000 10c634e5 01003800 73007000 5f006800 ......4...8.s.p._.h. 00000000164BB798: 65006c00 70006c00 69006e00 6b006500 64007300 e.l.p.l.i.n.k.e.d.s. 00000000164BB7AC: 72007600 6c006f00 67006900 6e002604 00000000 r.v.l.o.g.i.n.&..... 00000000164BB7C0: 3d6146e5 01004c00 73007000 5f006700 65007400 =aF...L.s.p._.g.e.t. 00000000164BB7D4: 71007500 65007500 65006400 61007200 74006900 q.u.e.u.e.d.a.r.t.i. 00000000164BB7E8: 63006c00 65007300 79006e00 63007400 72006100 c.l.e.s.y.n.c.t.r.a. 00000000164BB7FC: 6e006900 6e006600 6f002604 00000000 a5f34de5 n.i.n.f.o.&.......M. 00000000164BB810: 01002a00 73007000 5f006400 72006f00 70006d00 ..*.s.p._.d.r.o.p.m. 00000000164BB824: 65007300 73006100 67006500 26040000 00009580 e.s.s.a.g.e.&....... 00000000164BB838: 50e50100 5c007300 70005f00 46007500 7a007a00 P...\.s.p._.F.u.z.z. 00000000164BB84C: 79004c00 6f006f00 6b007500 70005400 61006200 y.L.o.o.k.u.p.T.a.b. 00000000164BB860: 6c006500 4d006100 69006e00 74006500 6e006100 l.e.M.a.i.n.t.e.n.a. 00000000164BB874: 6e006300 65005500 6e006900 6e007300 74006100 n.c.e.U.n.i.n.s.t.a. 00000000164BB888: 6c006c00 26040000 0000a98c 5ce50100 3c007300 l.l.&.......\...<.s. 00000000164BB89C: 70005f00 66007500 6c006c00 74006500 78007400 p._.f.u.l.l.t.e.x.t. 00000000164BB8B0: 5f006b00 65007900 6d006100 70007000 69006e00 _.k.e.y.m.a.p.p.i.n. 00000000164BB8C4: 67007300 26040000 00005bc4 61e50100 34007300 g.s.&.....[.a...4.s. 00000000164BB8D8: 70005f00 64007200 6f007000 6d006500 72006700 p._.d.r.o.p.m.e.r.g. 00000000164BB8EC: 65006100 72007400 69006300 6c006500 26040000 e.a.r.t.i.c.l.e.&... 00000000164BB900: 00005726 b3e50100 4c007300 70005f00 68006500 ..W&....L.s.p._.h.e. 00000000164BB914: 6c007000 5f006600 75006c00 6c007400 65007800 l.p._.f.u.l.l.t.e.x. 00000000164BB928: 74005f00 63006f00 6c007500 6d006e00 73005f00 t._.c.o.l.u.m.n.s._. 00000000164BB93C: 63007500 72007300 6f007200 26040000 0000c4d5 c.u.r.s.o.r.&....... 00000000164BB950: 02e60100 42007300 70005f00 68006500 6c007000 ....B.s.p._.h.e.l.p. 00000000164BB964: 5f007000 75006200 6c006900 63006100 74006900 _.p.u.b.l.i.c.a.t.i. 00000000164BB978: 6f006e00 5f006100 63006300 65007300 73002604 o.n._.a.c.c.e.s.s.&. 00000000164BB98C: 00000000 c46b07e6 01003200 73007000 5f006700 .....k....2.s.p._.g. 00000000164BB9A0: 65007400 74006f00 70006f00 6c006f00 67007900 e.t.t.o.p.o.l.o.g.y. 00000000164BB9B4: 69006e00 66006f00 26040000 0000f134 0ae70100 i.n.f.o.&......4.... 00000000164BB9C8: 32007300 70005f00 64007200 6f007000 64006900 2.s.p._.d.r.o.p.d.i. 00000000164BB9DC: 73007400 72006900 62007500 74006f00 72002604 s.t.r.i.b.u.t.o.r.&. 00000000164BB9F0: 00000000 07b724e7 01005600 73007000 5f006800 ......$...V.s.p._.h. 00000000164BBA04: 65006c00 70005f00 6c006f00 67005f00 73006800 e.l.p._.l.o.g._.s.h. 00000000164BBA18: 69007000 70006900 6e006700 5f006d00 6f006e00 i.p.p.i.n.g._.m.o.n. 00000000164BBA2C: 69007400 6f007200 5f007000 72006900 6d006100 i.t.o.r._.p.r.i.m.a. 00000000164BBA40: 72007900 26040000 000031c5 aee70100 3c007300 r.y.&.....1.....<.s. 00000000164BBA54: 70005f00 65006e00 75006d00 5f006f00 6c006500 p._.e.n.u.m._.o.l.e. 00000000164BBA68: 64006200 5f007000 72006f00 76006900 64006500 d.b._.p.r.o.v.i.d.e. 00000000164BBA7C: 72007300 26040000 0000b83c 1be80100 3c007300 r.s.&......<....<.s. 00000000164BBA90: 70005f00 64007200 6f007000 72006500 70006c00 p._.d.r.o.p.r.e.p.l. 00000000164BBAA4: 73007900 6d006d00 65007400 72006900 63006b00 s.y.m.m.e.t.r.i.c.k. 00000000164BBAB8: 65007900 26040000 000060b7 1ee80100 24007300 e.y.&.....`.....$.s. 00000000164BBACC: 70005f00 64007200 6f007000 75007300 65007200 p._.d.r.o.p.u.s.e.r. 00000000164BBAE0: 26040000 00004845 95e80100 34007300 70005f00 &.....HE....4.s.p._. 00000000164BBAF4: 66006900 72007300 74006f00 6e006c00 79005f00 f.i.r.s.t.o.n.l.y._. 00000000164BBB08: 62006900 74006d00 61007000 26040000 00009fd4 b.i.t.m.a.p.&....... 00000000164BBB1C: f9e80100 2e007300 70005f00 68006500 6c007000 ......s.p._.h.e.l.p. 00000000164BBB30: 66006900 6c006500 67007200 6f007500 70002604 f.i.l.e.g.r.o.u.p.&. 00000000164BBB44: 00000000 33dafae8 01004600 73007000 5f006800 ....3.....F.s.p._.h. 00000000164BBB58: 65006c00 70006d00 65007200 67006500 70007500 e.l.p.m.e.r.g.e.p.u. 00000000164BBB6C: 6c006c00 73007500 62007300 63007200 69007000 l.l.s.u.b.s.c.r.i.p. 00000000164BBB80: 74006900 6f006e00 26040000 0000a3d4 bae90100 t.i.o.n.&........... 00000000164BBB94: 3a007300 70005f00 68006500 6c007000 70007500 :.s.p._.h.e.l.p.p.u. 00000000164BBBA8: 62006c00 69006300 61007400 69006f00 6e007300 b.l.i.c.a.t.i.o.n.s. 00000000164BBBBC: 79006e00 63002604 00000000 cbc748eb 01005c00 y.n.c.&.......H...\. 00000000164BBBD0: 73007000 5f006800 65006c00 70005f00 6c006f00 s.p._.h.e.l.p._.l.o. 00000000164BBBE4: 67005f00 73006800 69007000 70006900 6e006700 g._.s.h.i.p.p.i.n.g. 00000000164BBBF8: 5f007300 65006300 6f006e00 64006100 72007900 _.s.e.c.o.n.d.a.r.y. 00000000164BBC0C: 5f006400 61007400 61006200 61007300 65002604 _.d.a.t.a.b.a.s.e.&. 00000000164BBC20: 00000000 2c6361ec 01003200 73007000 5f006800 ....,ca...2.s.p._.h. 00000000164BBC34: 65006c00 70006400 69007300 74007200 69006200 e.l.p.d.i.s.t.r.i.b. 00000000164BBC48: 75007400 6f007200 26040000 0000ddbe 65ec0100 u.t.o.r.&.......e... 00000000164BBC5C: 30007300 70005f00 66007500 6c006c00 74006500 0.s.p._.f.u.l.l.t.e. 00000000164BBC70: 78007400 5f007400 61006200 6c006500 26040000 x.t._.t.a.b.l.e.&... 00000000164BBC84: 00007063 32ed0100 42007300 70005f00 66006f00 ..pc2...B.s.p._.f.o. 00000000164BBC98: 72006500 69006700 6e005f00 6b006500 79007300 r.e.i.g.n._.k.e.y.s. 00000000164BBCAC: 5f007200 6f007700 73006500 74005f00 72006d00 _.r.o.w.s.e.t._.r.m. 00000000164BBCC0: 74002604 00000000 d47738ed 01002e00 73007000 t.&......w8.....s.p. 00000000164BBCD4: 5f006700 65007400 73006300 68006500 6d006100 _.g.e.t.s.c.h.e.m.a. 00000000164BBCE8: 6c006f00 63006b00 26040000 00003fe0 eded0100 l.o.c.k.&.....?..... 00000000164BBCFC: 26007300 70005f00 64007200 6f007000 6c006f00 &.s.p._.d.r.o.p.l.o. 00000000164BBD10: 67006900 6e002604 00000000 603192ee 01003c00 g.i.n.&.....`1....<. 00000000164BBD24: 73007000 5f006400 72006f00 70006500 78007400 s.p._.d.r.o.p.e.x.t. 00000000164BBD38: 65006e00 64006500 64007000 72006f00 70006500 e.n.d.e.d.p.r.o.p.e. 00000000164BBD4C: 72007400 79002604 00000000 fb74a0ee 01004200 r.t.y.&......t....B. 00000000164BBD60: 73007000 5f006600 75006c00 6c007400 65007800 s.p._.f.u.l.l.t.e.x. 00000000164BBD74: 74005f00 70006500 6e006400 69006e00 67006300 t._.p.e.n.d.i.n.g.c. 00000000164BBD88: 68006100 6e006700 65007300 26040000 00006b29 h.a.n.g.e.s.&.....k) 00000000164BBD9C: f1ee0100 48007300 70005f00 68006500 6c007000 ....H.s.p._.h.e.l.p. 00000000164BBDB0: 64006900 73007400 72006900 62007500 74006f00 d.i.s.t.r.i.b.u.t.o. 00000000164BBDC4: 72005f00 70007200 6f007000 65007200 74006900 r._.p.r.o.p.e.r.t.i. 00000000164BBDD8: 65007300 26040000 0000a673 0eef0100 32007300 e.s.&......s....2.s. 00000000164BBDEC: 70005f00 68006500 6c007000 64006200 66006900 p._.h.e.l.p.d.b.f.i. 00000000164BBE00: 78006500 64007200 6f006c00 65002604 00000000 x.e.d.r.o.l.e.&..... 00000000164BBE14: 27bf15ef 01003800 73007000 5f006400 72006f00 '.....8.s.p._.d.r.o. 00000000164BBE28: 70006400 69007300 74007200 69006200 75007400 p.d.i.s.t.r.i.b.u.t. 00000000164BBE3C: 69006f00 6e006400 62002604 00000000 99f756f0 i.o.n.d.b.&.......V. 00000000164BBE50: 01004c00 73007000 5f006600 6c007500 73006800 ..L.s.p._.f.l.u.s.h. 00000000164BBE64: 5f006300 6f006d00 6d006900 74005f00 74006100 _.c.o.m.m.i.t._.t.a. 00000000164BBE78: 62006c00 65005f00 6f006e00 5f006400 65006d00 b.l.e._.o.n._.d.e.m. 00000000164BBE8C: 61006e00 64002604 00000000 4901b8f0 01003600 a.n.d.&.....I.....6. 00000000164BBEA0: 73007000 5f006400 72006f00 70006400 69007300 s.p._.d.r.o.p.d.i.s. 00000000164BBEB4: 74007000 75006200 6c006900 73006800 65007200 t.p.u.b.l.i.s.h.e.r. 00000000164BBEC8: 26040000 0000bf88 54f10100 34007300 70005f00 &.......T...4.s.p._. 00000000164BBEDC: 68006500 6c007000 65007800 74006500 6e006400 h.e.l.p.e.x.t.e.n.d. 00000000164BBEF0: 65006400 70007200 6f006300 26040000 00001467 e.d.p.r.o.c.&......g 00000000164BBF04: f0f10100 3c007300 70005f00 64007200 6f007000 ....<.s.p._.d.r.o.p. 00000000164BBF18: 70007500 6c006c00 73007500 62007300 63007200 p.u.l.l.s.u.b.s.c.r. 00000000164BBF2C: 69007000 74006900 6f006e00 26040000 00005491 i.p.t.i.o.n.&.....T. 00000000164BBF40: 07f20100 2a007300 7000b00b 4012bc0a 9e046009 ....*.s.p...@.....` 00000000164BBF54: f814ac12 e011f005 7a153e0a d604a807 8c05c803 ........z.>......... 00000000164BBF68: 7202260c 24154614 f40d3406 62109e01 8003c80e r.&.$.F...4.b....... 00000000164BBF7C: 5c07820c 46116801 ae11fa03 0010b602 1013240e \...F.h...........$. 00000000164BBF90: 2207420f 2a102c0b c00d1402 a0065204 ea081e12 ".B.*.,.......R..... 00000000164BBFA4: 4c13f013 d412f20a da091209 6a053005 240d6806 L........ . j.0.$.h. 00000000164BBFB8: 7a11f202 46019c0d 2e04a609 9e14080a fa068c0a z...F...... ........ 00000000164BBFCC: 4a0b600d 1401c40f dc10be05 ce14fc0b 8408ce00 J.`................. 00000000164BBFE0: b4134803 0a110808 be0c3a08 660e7412 8c0e9a00 ..H.......:.f.t..... 00000000164BBFF4: 6e0bf20c 0a0f8e0f b4009800 n........... OFFSET TABLE: Row - Offset 1 (0x1) - 180 (0xb4) 0 (0x0) - 152 (0x98) DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
SELECT * FROM sys.[database_files] --type 为2 类型为filestream SELECT * FROM sys.[filegroups] --type 为FD 类型为filestream_data_filegroup SELECT * FROM sys.[data_spaces] ----type 为FD 类型为filestream_data_filegroup SELECT * FROM sys.[tables] --[filestream_data_space_id]为2 SELECT * FROM sys.[columns] --[is_filestream]为1
--旧的存储过程不显示文件流信息 EXEC sys.[sp_helpdb] @dbname = 'MyFilestreamDB' -- sysname EXEC sys.[sp_help] 'RECORDS' -- sysname
F
--查看删除filestream数据的系统表数据 SELECT name FROM sys.[internal_tables] WHERE [name] LIKE '%tombstone%' --查询 为filestream_tombstone_2073058421 USE [MyFilestreamDB] SELECT * FROM filestream_tombstone_2073058421
filestream白皮书
http://msdn.microsoft.com/library/hh461480
http://sqlserverinternals.com/companion/
使用fsutil关闭对最后访问时间的跟踪
tcp/ip缓冲区大小64KB
F
稀疏列
使用稀疏列的代价是:需要更多的系统开销来存储和检索非null值
sql2008中的稀疏列允许我们为一行存储非常大的合适列,因此,稀疏列有时也称为宽表功能
表中列数限制是30000个,非稀疏列是1024列(计算列被认为是非稀疏列)
由于稀疏向量包括附加系统开销,因此其他行的最大字节数会降低
稀疏列不能是聚集索引和主键一部分,稀疏列的表不能压缩
F
将非稀疏列转换成稀疏列,或将稀疏列转换为非稀疏列
将非稀疏列转换成稀疏列会将增加字节开销
F
稀疏列不能有默认值
稀疏列不能与某种规则绑定
计算列不能标记为稀疏
稀疏列不能是聚集索引或堆的一个分区键,但可以是非聚集索引的分区键
稀疏列应该跟过滤索引一起使用
select * 机制称为column_set结构,column_set是一种无类型的xml表示法
一个表只能定义一个column_set
F
USE [sss] CREATE TABLE lots_of_sparse_columns (id INT IDENTITY, col1 INT SPARSE, sparse_column_set XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ); INSERT INTO [dbo].[lots_of_sparse_columns] ( [col1], [sparse_column_set] ) SELECT 11,'<col1>12</col1>' --消息 360,级别 16,状态 1,第 1 行 --INSERT、UPDATE 或 MERGE 语句的目标列列表不能同时包含稀疏列和包含稀疏列的列集。请重写该语句以包括稀疏列或列集,但不能同时包括这两者。
F
稀疏列存储方式
columnname,value
F
sqlserver利用行中一种称为稀疏向量的结构跟踪稀疏列的物理存储
稀疏向量后面只有版本信息,通常和快照隔离一起使用,没有元数据记录稀疏向量列,null位图也没有记录稀疏向量列,但是行中变长列数量包含稀疏向量列
F
稀疏列元数据
F
--检查是否是稀疏列 SELECT [is_sparse] , [is_column_set] FROM sys.[columns] SELECT COLUMNPROPERTY(OBJECT_ID('aaa'),'a','IsSparse')
SELECT [name],[is_sparse],[is_computed] FROM sys.[columns] WHERE OBJECT_NAME(OBJECT_ID('aaa')) LIKE '%sparse%'
F
F
一般的建议是当你系统提供至少20%~40%的空间节省时,应该考虑稀疏列
F
数据压缩
行压缩:可以压缩单独列数据,从而只使用所需的最小空间总量
页压缩:通过维护包含公有前缀或重复值的项来压缩页面上的数据,sqlserver同样始终应用行压缩
vardecimal
sql2005 sp3引入的一种简单压缩格式,decimal和numeric是完全等价
--数据库开启EXEC sys.[sp_db_vardecimal_storage_format] @dbname = NULL, -- sysname @vardecimal_storage_format = '' -- varchar(3) --表开启 EXEC sys.[sp_tableoption] @TableNamePattern = N'', -- nvarchar(776) @OptionName = '', -- varchar(35) @OptionValue = '' -- varchar(12)
sql2008自动开启vardecimal存储格式
每个变长列都有与之相关的2字节额外开销,行偏移
在sql2008中,用于启用vardecimal存储的表选项和数据库选项都已经被废弃,你应该使用行压缩
F
建表或建索引的时候可以启用压缩,或者使用alter table或alter index命令(只作用在某个索引)启用压缩
如果表被分区,则可以选择只压缩某一个分区区间
F
压缩分区
--如果需要为分区表的各个分区设置不同的压缩选项,可以使用以下的语句:(SQL Server 2008可以对不同的分区使用不同的压缩选项,这一点对于数据仓库应用是非常重要的,因为数据仓库的事实表通常都会有一个或数个热分区,这些分区中的数据经常需要更新,为了避免数据压缩给这些分区上的数据更新带来额外的处理载荷,可以对这些分区关闭压缩选项) CREATE TABLE PartitionedTable (col1 int, col2 varchar(200)) ON PS1 (col1) WITH ( DATA_COMPRESSION = ROW ON PARTITIONS(1), DATA_COMPRESSION = PAGE ON PARTITION(2 TO 4));
--启用行压缩,并测试使用的页面数目 ALTER TABLE [dbo].Employees_ROWCOMPRESSED REBUILD WITH (DATA_COMPRESSION=ROW) GO SELECT OBJECT_NAME([object_id]) AS NAME , [rows] , [data_pages] , [data_compression_desc] FROM SYS.[partitions] P JOIN SYS.[allocation_units] AU ON [P].[partition_id] = [AU].[container_id] WHERE [object_id] = OBJECT_ID('Employees_ROWCOMPRESSED')
行压缩不能在有稀疏列的表中使用
如果表或索引已分区,则可以只在某个分区区间中启用
企业版才有行压缩
行压缩不改变表或索引的行最大长度
从sql7.0只有的FixedVar格式
sql2008引入的CD格式,列说明符
F
CD记录的存储结构
F
长数据区域:大于8字节的列数据都存储在长数据区域中,可能包含lob数据指针和行溢出指针
F
F
0x21 :00100001
F
页压缩
只有企业版支持页压缩
对表进行页压缩,则会自动启用行压缩
压缩B树时,只有叶子节点可以进行页压缩
可以在表或索引的某个分区区间进行页压缩
新行被添加时,页压缩得到维护
F
--启用页压缩,并测试使用的页面数目 ALTER TABLE [dbo].Employees_PAGECOMPRESSED REBUILD WITH (DATA_COMPRESSION=PAGE) GO SELECT OBJECT_NAME([object_id]) AS NAME , [rows] , [data_pages] , [data_compression_desc] FROM SYS.[partitions] P JOIN SYS.[allocation_units] AU ON [P].[partition_id] = [AU].[container_id] WHERE [object_id] = OBJECT_ID('Employees_PAGECOMPRESSED')
sqlserver利用公有值以两种不同方式对页面进行压缩:列前缀压缩和字典压缩
F
请记住压缩行以CD记录格式存储,因此CD阵列值用一个特殊的编码表示值实际上为NULL
如果替代值为<><>并且编码不表示null,则该该值和前缀完全匹配
sqlserver会创建一个锚记录的行来存储列的锚值
如果没有找到有用的前缀,则锚记录中的值为null,同时该列中的所有值按原样存储
1、前缀压缩
2、字典压缩
F
如果页面上的数据根本没有模式,则可能页面既没有锚记录也没有字典
CI记录在页尾的行偏移中没有对应项,但他始终位于相同的位置
此外在页头的m_typeFlagBits为0x80表示该页面已被页压缩
m_pageId = (1:77) m_headerVersion = 1 m_type = 1
m_typeFlagBits = 0x0 m_level = 0
只有Employees_PAGECOMPRESSED表所在页的m_typeFlagBits 设置为0x80
F
CI记录结构
pagemodcount跟踪页面的修改,在确定是否应该对页面压缩进行重新评估以及构建一条新CI记录时使用
--[rowmodctr]:跟踪行数据的变化 统计信息 SELECT [rowmodctr] FROM sys.[sysindexes]
锚记录似乎和页上的CD记录完全相同,包括记录标题,CD ARRAY,一个短数据区域和一个长数据区域,存储在数据区域中的值是每一列的公共前缀值
字典包含3部分,字典数量,每个字典项的偏移,实际字典数据
记住,每一个字典项都是一个字节串,在标准数据行中用一个符号替代,该符号只是一个从0到N的整数值,此外,字节串和数据类型无关,即他们只是字节,在sqlserver确定将哪些重复出现的值存储在字典中之后,将首先按照数据长度对列表进行排序,接下来按照数值进行排序,然后按照顺序分配这些符号
0x5:00000101 位0始终为0,位2 为1表示有一个字典
字典永远不会真正存储符号值,符号值只存储在需要使用字典的数据记录中,由于符号值是简单的整数
F
对于压缩页来说,DBCC会显示CI记录和其中关于锚记录的详细信息,使用格式3,DBCC PAGE会显示字典项的详细信息
行压缩
--启用行压缩,并测试使用的页面数目 SELECT * INTO Employees_ROWCOMPRESSED FROM [AdventureWorks].[dbo].[Employee_Demo_Heap] WHERE 1=0 SELECT * FROM [dbo].Employees_ROWCOMPRESSED INSERT INTO [dbo].Employees_ROWCOMPRESSED ( [EmployeeID] , [NationalIDNumber] , [ContactID] , [LoginID] , [ManagerID] , [Title] , [BirthDate] , [MaritalStatus] , [Gender] , [HireDate] , [ModifiedDate] ) SELECT TOP 1 [EmployeeID] , [NationalIDNumber] , [ContactID] , [LoginID] , [ManagerID] , [Title] , [BirthDate] , [MaritalStatus] , [Gender] , [HireDate] , [ModifiedDate] FROM [AdventureWorks].[dbo].[Employee_Demo_Heap] SELECT * FROM [dbo].Employees_ROWCOMPRESSED ALTER TABLE [dbo].Employees_ROWCOMPRESSED REBUILD WITH (DATA_COMPRESSION=ROW) GO SELECT OBJECT_NAME([object_id]) AS NAME , [rows] , [data_pages] , [data_compression_desc] FROM SYS.[partitions] P JOIN SYS.[allocation_units] AU ON [P].[partition_id] = [AU].[container_id] WHERE [object_id] = OBJECT_ID('Employees_ROWCOMPRESSED') TRUNCATE TABLE [dbo].[DBCCResult] INSERT INTO DBCCResult EXEC ('DBCC IND(sss,Employees_ROWCOMPRESSED,-1) ') SELECT * FROM [dbo].[DBCCResult] DBCC TRACEON(3604,-1) GO DBCC PAGE([sss],1,384,3) GO ---------------------------- DBCC TRACEON(3604,-1) GO DBCC PAGE([sss],1,384,2) GO
输出格式为2
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 PAGE: (1:384) BUFFER: BUF @0x00000002FDA7EC40 bpage = 0x00000002E9B04000 bhash = 0x0000000000000000 bpageno = (1:384) bdbid = 10 breferences = 0 bcputicks = 0 bsampleCount = 0 bUse1 = 43223 bstat = 0x10b blog = 0x121c bnext = 0x0000000000000000 PAGE HEADER: Page @0x00000002E9B04000 m_pageId = (1:384) m_headerVersion = 1 m_type = 1 m_typeFlagBits = 0x0 m_level = 0 m_flagBits = 0x0 m_objId (AllocUnitId.idObj) = 195 m_indexId (AllocUnitId.idInd) = 256 Metadata: AllocUnitId = 72057594050707456 Metadata: PartitionId = 72057594044612608 Metadata: IndexId = 0 Metadata: ObjectId = 1422628111 m_prevPage = (0:0) m_nextPage = (0:0) pminlen = 8 m_slotCnt = 1 m_freeCnt = 7992 m_freeData = 198 m_reservedCnt = 0 m_lsn = (288:25896:68) m_xactReserved = 0 m_xdesId = (0:0) m_ghostRecCnt = 0 m_tornBits = 0 DB Frag ID = 1 Allocation Status GAM (1:2) = ALLOCATED SGAM (1:3) = NOT ALLOCATED PFS (1:1) = 0x41 ALLOCATED 50_PCT_FULL DIFF (1:6) = CHANGED ML (1:7) = NOT MIN_LOGGED DATA: Memory Dump @0x000000001393A000 000000001393A000: 01010000 00000001 00000000 00000800 00000000 .................... 000000001393A014: 00000100 c3000000 381fc600 80010000 01000000 ........8........... 000000001393A028: 20010000 28650000 44000000 00000000 00000000 ...(e..D........... 000000001393A03C: 00000000 01000000 00000000 00000000 00000000 .................... 000000001393A050: 00000000 00000000 00000000 00000000 210ba2a3 ................!... 000000001393A064: a2278218 8184b990 e7400000 00004d4d 8089cb00 .'.......@....MM.... 000000001393A078: 00000080 95350000 00000103 0009001e 003b0031 .....5....... ...;.1 000000001393A08C: 34343137 38303710 61647665 6e747572 652d776f 4417807.adventure-wo 000000001393A0A0: 726b735c 67757931 1050726f 64756374 696f6e20 rks\guy1.Production 000000001393A0B4: 54656368 6e696369 616e202d 20574336 30100000 Technician - WC60... 000000001393A0C8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A0DC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A0F0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A104: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A118: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A12C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A140: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A154: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A168: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A17C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A190: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A1A4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A1B8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A1CC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A1E0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A1F4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A208: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A21C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A230: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A244: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A258: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A26C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A280: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A294: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A2A8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A2BC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A2D0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A2E4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A2F8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A30C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A320: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A334: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A348: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A35C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A370: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A384: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A398: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A3AC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A3C0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A3D4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A3E8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A3FC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A410: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A424: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A438: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A44C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A460: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A474: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A488: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A49C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A4B0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A4C4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A4D8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A4EC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A500: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A514: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A528: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A53C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A550: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A564: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A578: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A58C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A5A0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A5B4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A5C8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A5DC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A5F0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A604: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A618: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A62C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A640: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A654: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A668: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A67C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A690: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A6A4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A6B8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A6CC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A6E0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A6F4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A708: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A71C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A730: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A744: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A758: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A76C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A780: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A794: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A7A8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A7BC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A7D0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A7E4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A7F8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A80C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A820: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A834: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A848: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A85C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A870: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A884: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A898: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A8AC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A8C0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A8D4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A8E8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A8FC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A910: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A924: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A938: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A94C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A960: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A974: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A988: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A99C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A9B0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A9C4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A9D8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393A9EC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AA00: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AA14: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AA28: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AA3C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AA50: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AA64: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AA78: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AA8C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AAA0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AAB4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AAC8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AADC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AAF0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AB04: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AB18: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AB2C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AB40: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AB54: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AB68: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AB7C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AB90: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ABA4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ABB8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ABCC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ABE0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ABF4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AC08: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AC1C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AC30: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AC44: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AC58: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AC6C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AC80: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AC94: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ACA8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ACBC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ACD0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ACE4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ACF8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AD0C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AD20: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AD34: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AD48: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AD5C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AD70: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AD84: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AD98: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ADAC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ADC0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ADD4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ADE8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393ADFC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AE10: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AE24: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AE38: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AE4C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AE60: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AE74: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AE88: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AE9C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AEB0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AEC4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AED8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AEEC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AF00: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AF14: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AF28: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AF3C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AF50: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AF64: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AF78: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AF8C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AFA0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AFB4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AFC8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AFDC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393AFF0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B004: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B018: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B02C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B040: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B054: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B068: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B07C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B090: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B0A4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B0B8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B0CC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B0E0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B0F4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B108: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B11C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B130: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B144: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B158: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B16C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B180: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B194: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B1A8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B1BC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B1D0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B1E4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B1F8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B20C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B220: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B234: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B248: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B25C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B270: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B284: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B298: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B2AC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B2C0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B2D4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B2E8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B2FC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B310: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B324: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B338: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B34C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B360: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B374: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B388: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B39C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B3B0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B3C4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B3D8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B3EC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B400: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B414: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B428: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B43C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B450: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B464: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B478: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B48C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B4A0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B4B4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B4C8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B4DC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B4F0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B504: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B518: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B52C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B540: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B554: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B568: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B57C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B590: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B5A4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B5B8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B5CC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B5E0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B5F4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B608: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B61C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B630: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B644: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B658: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B66C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B680: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B694: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B6A8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B6BC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B6D0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B6E4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B6F8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B70C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B720: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B734: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B748: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B75C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B770: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B784: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B798: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B7AC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B7C0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B7D4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B7E8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B7FC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B810: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B824: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B838: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B84C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B860: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B874: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B888: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B89C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B8B0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B8C4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B8D8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B8EC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B900: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B914: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B928: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B93C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B950: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B964: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B978: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B98C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B9A0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B9B4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B9C8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B9DC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393B9F0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BA04: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BA18: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BA2C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BA40: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BA54: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BA68: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BA7C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BA90: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BAA4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BAB8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BACC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BAE0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BAF4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BB08: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BB1C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BB30: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BB44: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BB58: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BB6C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BB80: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BB94: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BBA8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BBBC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BBD0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BBE4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BBF8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BC0C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BC20: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BC34: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BC48: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BC5C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BC70: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BC84: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BC98: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BCAC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BCC0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BCD4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BCE8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BCFC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BD10: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BD24: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BD38: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BD4C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BD60: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BD74: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BD88: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BD9C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BDB0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BDC4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BDD8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BDEC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BE00: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BE14: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BE28: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BE3C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BE50: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BE64: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BE78: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BE8C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BEA0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BEB4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BEC8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BEDC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BEF0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BF04: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BF18: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BF2C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BF40: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BF54: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BF68: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BF7C: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BF90: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BFA4: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BFB8: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BFCC: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BFE0: 21212121 21212121 21212121 21212121 21212121 !!!!!!!!!!!!!!!!!!!! 000000001393BFF4: 21212121 21212121 21216000 !!!!!!!!!!`. OFFSET TABLE: Row - Offset 0 (0x0) - 96 (0x60) DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。