误区30日谈6-10
--误区#6a:NULL 位图并不是任何时候都会用到
--解释: 正确,对应非聚集索引来说 ,NULL值不会被索引
--扩展:NULL 位图是为了确定行中的哪一列是 NULL值,哪一列不是。这样做的目的是当 Select语句后包含存在NULL值的列时,避免了存储引擎去读所有的行来查看是否是 NULL,从而提升了性能
--扩展: 就算表中不存在允许 NULL的列,NULL 位图对于数据行来说会一直存在 (数据行指的是堆或是聚集索引的叶子节点 )。但对于索引行来说(所谓的索引行也就是聚集索引和非聚集索引的非叶子节点以及非聚集索引的叶子节点) NULL位图就不是一直有效了。
--误区#6b: NULL 位图仅仅被用于可空列
--答案: 错误
--解释:NULL 位图用来映射记录中每一列 ,即使不可为空列也没映射
--误区#6c: 给表中添加额外一列时会立即导致 SQL Server对表中数据的修改
--答案: 错误
--解释: 当添加列不可为空时才会导致数据条目修改
--http://www.cnblogs.com/CareySon/archive/2012/10/24/2736576.html
--误区#7: 一个数据库可以存在多个镜像
--答案: 错误
--解释: 一个数据库只能有一个镜像 ,但可以发布订阅到多个订阅的 ,也可日志传送到多个服务器实例上
--扩展:SQL SERVER 2012 后一个主数据库可以有多个从数据库 (1个同步个异步)
--http://www.cnblogs.com/CareySon/archive/2012/10/24/2737438.html
--误区#8: 在线索引操作不会使得相关的索引加锁
--答案: 错误
--解释: 在线索引操作会在操作开始时和操作结束时对资源上短暂的锁。这有可能导致严重的阻塞问题。
--在线索引操作开始时,会在被整理的资源上加一个共享的表锁 ,这个表锁在会在新的索引创建时、老索引进行版本扫描时一直持续。
--当在线索引操作完成后,新建立的索引和老的索引上面都需要加一个构架修改锁( SCH_M锁)来完成最终操作。
--http://www.cnblogs.com/CareySon/archive/2012/10/25/2738334.html
--误区#9: 数据库文件收缩不会影响性能
--答案: 错误
--解释: 收缩数据库文件唯一不影响性能的情况是文件末尾有剩余空间的情况下,收缩文件指定了 TruncateOnly选项。
--收缩数据库文件造成的影响
--1>收缩时造成大量IO操作
--2>收缩操作产生大量日志影响日志传送
--3>数据移动会传递给镜像,导致镜像问题 +网络问题
--4>收缩后数据文件再次增长影响性能
--5>收缩导致大量索引碎片
--扩展: 应禁用数据库自动收缩选项
--误区数据库镜像在故障发生后,马上就能发现
--答案: 错误
--解释: 由于数据库镜像故障检测的机制和频率不同 ,导致不同的故障被检查到的间隔也不同
--故障: 镜像中的主体实例崩溃,从而镜像服务器每秒一次的 PING就无法返回值,从而知道主体服务器上不再有这个进程侦听相应的 TCP端口,这种情况下,镜像服务器几乎瞬间就能发现故障。
--故障: 主体服务器的操作系统崩溃 ,此时主体服务器不再响应镜像服务器的 PING,从而在镜像服务器PING超时后发现错误。这个超时的阈值默认是秒。但你也可以延长这个时间,这时,故障发生时间完全取决于 PING的超时时间。
--故障: 主体的日志磁盘不可用,此时 SQL SERVER仍然会发起IO请求,但秒 IO等待无法写入日志后发现日志磁盘不可用,最终秒后宣告磁盘日志不可用,从而让镜像服务器上线。 SQL SERVER是十分有耐心的 ,比如拿锁来说,SQL SERVER对于锁会无限等待,除非遇到死锁才进行干预。
--故障: 损坏页有可能完全不会引发故障,如果查询报了或是错误,镜像技术完全不会关注 (SQL SERVER 2008之后这个问题得到修复: SQL Server 2008: Automatic Page Repair with Database Mirroring),如果数据回滚的过程中遇到错误或是错误,数据库立刻会变为质疑状态,也就是日志和数据不统一。这也会导致镜像失败。
--http://www.cnblogs.com/CareySon/archive/2012/10/28/2743122.html