摘要:
接下来说说返回的RowLogo Content列,例子中返回了三个列。这些列包含了数据操作的“有效工作负载(Playload)”记录。根据不同操作类型有效负载的内容也是不同的,但是它必须包含足够的信息,能让相应的数据操作在恢复时能被REDO和UNDO。对于每一个INSERT而言,它包含了插入行的所有 阅读全文
摘要:
SQL Server 的事务日志包含所有数据修改的操作记录。分析日志一般作为解决某些问题的最后手段,如查看某些意外的修改。理解和分析日志内容是件非常困难的事情,fn_dblog通常会输出非常多的数据,查看也比较困难。我尝试用一些实例帮助大家更好地分析和理解日志。 SQL Server 使用Write 阅读全文
摘要:
页并发访问的保护:闩锁 在多线程并发情况下,需要防止读线程读到写线程正在写的资源,在编程中,通过使用互斥器(Mutexes), 信号量(Semaphore), 临界区(Critical Section)和事件(Event Object)来保护资源,而这些机制在SQL Server中被统一表示为 闩锁 阅读全文
摘要:
查询执行的内存授予(Query Execution Memory Grant) 有些操作符需要较多的内存才能完成操作。例如,SORT、HASH、HAS聚合等。执行计划通过操作符需要处理数据量的预估值(通过统计信息获得的预估行数)、操作符类型和列大小来获得所需要的内存总量。这个执行计划的内存总量,也叫 阅读全文
摘要:
查询执行的总图: 根据总图的流程,详细说明每个部分: 1. 请求(Request) SQL Server是C/S架构的平台。与它交互的唯一方式就是发送包含数据库命令的请求。应用程序和数据库之前的通信协议叫做TDS(Tabular Data Stream)协议。应用程序可以使用以下几种实现了TDS协议 阅读全文
摘要:
在前一篇博文数据压缩简要的基础上,我希望把数据压缩评估自动化。于是有了这篇博文。 白皮书推荐对符合如下条件的大型表和索引使用页压缩: 表或索引的扫描操作占到所有操作的75%及以上时 表或索引的更新操作占到所有操作的20%及以下时 注意,这是白皮书中的结论和建议,只做参考,最为最佳实践的考虑点之一。 阅读全文
摘要:
1. 决定压缩哪些对象 通过sp_estimate_data_compression_savings 评估在ROW和PAGE压缩时分别节省的空间量。 表包含如下数据模式时,会有较好的压缩效果: 数字类型的列和固定长度的字符类型数据,但两者的大多数值都不会用到此类型的所有字节。如INT列的值大多数少于 阅读全文
摘要:
什么是临界点? 注意,我要说的问题是非聚集索引的执行计划从Seek+Lookup变成Table/Clustered Index Scan的临界点。SQL Server的访问数据的IO最小单元是页。 我们知道聚集索引的叶级是数据页,非聚集索引的叶级是指向数据行的指针。所以通过聚集索引获取数据时,就是直 阅读全文
摘要:
什么是SIX锁? 官方文档锁模式中说到: 意向排他共享 (SIX):保护针对层次结构中某些(而并非所有)低层资源请求或获取的共享锁以及针对某些(而并非所有)低层资源请求或获取的意向排他锁。 顶级资源允许使用并发 IS 锁。 例如,获取表上的 SIX 锁也将获取正在修改的页上的意向排他锁以及修改的行上 阅读全文
摘要:
测试和分析依据上文件最小化日志的判断逻辑,对常见的BULK INSERT和INSERT INTO...SELECT做测试和分析 创建测试环境和基准--创建表tb_source并插入10000条数据use mastergocreate database test;alter database test... 阅读全文