BDI-B308-TechEdChina2013

  • 格式:pdf
  • 大小:1.53 MB
  • 文档页数:30

DBI-B308
SQL Server 2014新一代列存储技术
王琦
议程
•列存储索引结构概述
数据表
平行分区——Row Group
垂直分区——Segment
每一个Segment进行压缩注:上图未演示压缩编码和重排序的过程
查询语句只读取命中的列
从命中的字段中筛选所需的Segment
列存储索引结构
•Segment 包含某一列中的一组行
•相同一组行对应的Segments组成row group
•Segments经过压缩•Segment是磁盘和内存数据交换的最小单元
Segments
C1C2C3C5C6
C4
Row
group
议程
•新版本的改进
新一代列存储索引:聚集&可更新•提高数据仓库查询效率
–速度提高100倍以上
•无需行版本存储的基础表
–节省空间
•数据可以进行插入、更新、或者删除操作–简化管理
•无需其它索引
–节省空间并简化管理
•支持更多的数据类型
–消除了SQL Server 2012非聚集列存储索引的诸多限制
归档压缩(Archival Compression)
•在列存储技术现有的压缩基础之上再进行一层压缩•大幅压缩数据库容量
–可按分区进行压缩,在索引创建和重建的过程中进行配置
Demo
压缩对比
压缩类型大小(KB)压缩比例未压缩2023824100.00%行压缩89024843.99%页压缩35156017.37%
列存储1659688.2%列存储归档压缩75856 3.75%
500000
1000000
1500000
2000000
2500000
大小(KB)
Size in KB
议程
•可更新
•CREATE CLUSTERED COLUMNSTORE –将数据组织并压缩为列存储
•BULK INSERT
–创建新的列存储Row Groups
•INSERT
–数据以行版本的形式存放在Row Store 中(堆)
–当Row Store 足够大时,自动创建新的列存储的Row
Group
•DELETE
–被删掉的行在Deleted Bitmap中被标记出来•UPDATE
–Delete + insert
•确保绝大部分数据采用列存储的格式Column Store
Deleted
Bitmap Partition
•CREATE CLUSTERED COLUMNSTORE –将数据组织并压缩为列存储
•BULK INSERT
–创建新的列存储Row Groups
•INSERT
–数据以行版本的形式存放在Row Store 中(堆)
–当Row Store 足够大时,自动创建新的列存储的Row
Group
•DELETE
–被删掉的行在Deleted Bitmap中被标记出来•UPDATE
–Delete + insert
•确保绝大部分数据采用列存储的格式Column Store
Deleted
Bitmap Partition
插入数据
•Insert
–在Row Store中收集行版本数据
–每一个Row Store 包含100万条数据
•Bulk insert
–如果Bulk insert的数据量超过10万条,则将直接转换为列存储•Tuple Mover
–负责将达到100万条数据的Row Store转换为列存储
–默认每5 分钟运行一次
–可以通过ALTER INDEX <name> ON <table> REORGANIZE语句触发
Bulk Insert注意事项
•Tuple Mover 针对Bulk Insert的阈值为10万条数据
•由于Bulk Insert导致没有写满100万条数据的列存储Row Groups不会自动进行合并
–每批插入9万条数据:每批插入数据时不会触发Tuple Mover,最终会形成较大的Segments,性能较好
–每批插入12万条数据:最终形成多个只包含12万条数据的Segments, 性能会受到影响
–通过索引的重建可以修复这种碎片,但重建过程对资源消耗较大•进行Bulk Insert的时候请考虑每批写入的条数
Demo
事务隔离级别&锁
•事务隔离级别:
–READ UNCOMMITTED
–READ COMMITTED
–REPEATABLE READ
–SERIALIZABLE
–READ_COMMITED_SNAPSHOT •锁
–默认为Row Group 级别的锁
–无法使用提示(hints)
Demo
议程
•可更新
•其它增强
Batch处理模式•SQL Server 2012
–一些引擎的限制可能导致查询无法使用
Batch模式,转而使用Row模式•SQL Server 2014
–支持所有类型的JOIN
•OUTER JOIN
•Semi-join: IN, NOT IN
–UNION ALL
–混合Batch和Row两种模式的查询计划
创建列存储索引
•对内存要求较高
–对内存的要求与列的数量、数据量以及并行度有关
•并行度处理的最小单位是segment
–Segments越多,并行度的潜力越大
•内存不足可能会制约并行度
–修改max server memory 选项
–将REQUEST_MAX_MEMORY_GRANT_PERCENT 设置为50–降低并行度: (MAXDOP = 1);
是否需要非聚集列存储索引
•Yes, 如果需要用到约束或触发器
–如果有B树强制主外键约束,则创建聚集列存储索引将会失败–此时可以创建非聚集列存储索引
–无法执行更新操作
•No, 如果不需要用到约束或触发器
–创建数据表并添加聚集列存储索引
–无需创建其它索引
–可以进行insert / update / delete 操作
–实现海量数据的快速查询
其它需要考虑的地方
•使用聚集列存储索引时无需其它索引
–节省空间,简化维护工作
•使用非聚集列存储索引时也不需要其它索引,–除非创建传统的聚集索引
•聚集列存储索引和非聚集列存储索引均支持分区–便于对数据的生命周期进行管理
–归档历史数据
–尤其是针对无法进行删除操作的非聚集列存储索引
议程
•可更新
•其它增强•总结
课程总结
•实现快速查询的关键技术
–列存储索引+ Batch 模式= 卓越的性能•聚集列存储索引
–大幅节省空间,降低I/O, 减少对内存的需求–可更新,便于创建和管理
•Batch 模式
–通过SQL Server引擎快速处理数据
–不再需要折中方案
Thanks。