SQL Server 2016 CTP2.3 的关键特性

SQL Server 2016 CTP2.3 的关键特性

 

数据库方面的增强

Row Level Security已经支持In-memory OLTP 表。用户现在可以对内存优化表实施row-level security策略。

另外SCHEMABINDING、predicate 函数和内联表值函数都要包含NATIVE_COMPILATION编译选项。

原生编译的存储过程(Natively Compiled Stored Procedure)。
https://www.cnblogs.com/lyhabc/p/6155429.html
与传统的存储过程相比,原生编译的存储过程在建立时就编译成机器代码了,而不是在第一次运行时。
语法上和之前版本的CREATE PROC语句的主要区别就是增加一个WITH NATIVE_COMPILATION选项以及DELAYED_DURABILITY = { OFF | ON }选项。前者不言自明,
后者由你决定是否以可能的数据丢失换取更快的写操作速度。基本原理是后台进程缓存transaction log,每集齐60KB才写入存储

使用NATIVE_COMPILATION编译选项的UDFs用户定义函数可以在本地模块和交换查询中使用,就像内存优化表和磁盘表。

没有使用NATIVE_COMPILATION编译选项的UDFs用户定义函数只能使用交换查询。

In-memory OLTP已经支持下面的内置安全函数,增加了对RLS的支持

  • IS_MEMBER({‘group’ | ‘role’})
  • IS_ROLEMEMBER (‘role’ [, ‘database_principal’])
  • IS_SRVROLEMEMBER (‘role’ [, ‘login’])
  • ORIGINAL_LOGIN()
  • SESSION_USER
  • CURRENT_USER
  • SUSER_ID([‘login’])
  • SUSER_SID([‘login’] [, Param2])
  • SUSER_SNAME([server_user_sid])
  • SYSTEM_USER
  • SUSER_NAME
  • USER
  • USER_ID([‘user’])
  • USER_NAME([id])
  • CONTEXT_INFO()

 

另一个核心引擎扩展提升就是:基于NUMA节点或CPU的动态分区线程安全内存对象

这一改进将会使在NUMA硬件上能应付更高的并行负载。线程安全内存对象(type CmemThread)会根据负载特征和争用情况针对NUMA节点或CPU进行分区动态提升。

在SQL2012和SQL2014,需要打开跟踪标志TF 8048 来提升CPU分区里的分区节点里的内存对象。这个改进不但不需要跟踪标志,并且可以根据CPU争用情况动态调节分区。

model数据库已经改变新建数据库策略,新建数据库的初始数据文件大小和日志大小是8MB,增量都为64MB,为了对齐1个PFS (a range of 8088 pages = 64MB))

https://blogs.msdn.microsoft.com/sql_server_team/new-defaults-for-model-and-user-databases-in-sql-server-2016/

 

CTP2.3包含了对In-memory数据仓库(列式存储 columnStore)的性能优化,NCCI现在可以经由触发器来创建,也可以允许使用CDC和更改跟踪(Change Tracking)。

为了更好的分析列存储索引,在sys.dm_db_column_store_row_group_physical_stats这个DMV里添加了三个列:transition_to_compressed_state,transition_to_compressed_state_desc,has_vertipaq_optimization

Nonclustered Columnstore Index (NCCI)
Clustered Columnstore Index (CCI)

 

 

SQL Server Analysis Service (SSAS)的增强

DAX查询性能提升,优化Tabular 引擎。‘

DirectQuery 增强,现在DirectQuery 可以用更好的性能来生成更简单的查询。

DAX对变量的支持,变量可以存储一个表达式的结果作为命名变量,因此可以传递一个参数到其他的measure 表达式。

一旦变量表达式的结果值被计算,值不会被改变,即使这个变量引用了另一个表达式。

 

SQL Server Reporting Services (SSRS)的增强

Report Builder已经包含了modern 主题。

对于最新的浏览器,报表渲染已经支持HTML5 标准。

 

 

SQL Server Integration Service (SSIS)的增强

oData v4 协议支持,SSIS 错误列支持,高级日志级别支持。

之前SSIS目录只提供了四种日志级别:None, Basic, Performance ,Verbose

新的高级日志级别移除了之前不够灵活性的日志级别

新机制:当events 触发的时候可以收集event 上下文

新的ssis_logreader 角色,允许访问所有视图相关的SSISDB 操作日志

新的日志自定义级别定义日志和events 收集

允许event 上下文的收集,例如变量值,任务属性,连接字符串

 

 

Master Data Service(MDS)的增强

添加了三个特性

Many to many 的继承层次

商业规则管理的Excel 插件

合并冲突

 

查询执行的增强

增强 memory grant usage(内存授予使用率)诊断

增加了下面的扩展事件XEvents 来更好地诊断内存授予使用和问题。

Showplan xml 增加了每个线程和迭代器的memory grant usage扩展(在RunTimeCountersPerThread节点里)

query_memory_grant_blocking
query_memory_grant_resource_semaphores
query_memory_grant_usage (details on ideal vs granted vs used memory)



DBCC CHECKDB增强

1、验证持久化的计算列和过滤索引

2、当验证一个有上千分区的大表的时候,对DBCC CHECKDB做了性能提升,速度会加快

 

 

 

SQL Server 2016 ->> T-SQL新特性

https://www.cnblogs.com/jenrrychen/p/6083657.html?utm_source=itdadao&utm_medium=referral

 



运维特性
1、分区表支持直接truncate分区数据
假设TruncatePartitionTest 表是分区表,一共有10个分区
(1)truncate 分区号1到分区号6,一共6个分区的数据
TRUNCATE TABLE dbo.TruncatePartitionTest
WITH (PARTITIONS(1 TO 6)
(2)truncate 分区号1的数据
TRUNCATE TABLE dbo.TruncatePartitionTest
WITH (PARTITIONS(1));
(3)truncate 分区号1和分区号3的数据
TRUNCATE TABLE dbo.TruncatePartitionTest
WITH (PARTITIONS(1,3));
特性缺点:因为是直接truncate分区数据,如果truncate 出错无法反悔,不像以前交换分区再truncate中间表数据,交换分区出错可以再回切回去原表,中间表的数据也可以多保留几天,以免清理多了数据无法反悔


性能特性
1、增强的in-memory 特性,通过内存优化表提高30倍事务处理速度,比起基于磁盘的关系数据库和实时分析处理速度超过100倍
特性缺点:内存要足够大,比表实际占用磁盘空间要大,表启动会很慢,要把所有数据load入内存,表才可用,有丢数据风险
2、Query Store,能够捕获当前和历史执行计划和执行指标,让您可以非常容易的监控和排查查询性能问题
特性用途:有点像测试里面的回归测试,开启Query Store之后,会存储数据库中的语句所用的执行计划,当发现某个语句突然变慢,可以查看这个语句是否使用了别的执行计划而不是之前一直在用的执行计划导致性能变差
因为保存了语句使用过的执行计划,可以利用以前的执行计划做回归测试,检验SQL Server是否使用了错误的执行计划


安全特性
1、行级数据安全/行级加密,没用过,不做评价
2、动态数据掩码
特性用途:可以在建表时或建表后,对表中某些字段进行混淆,实际不修改表中数据,估计是在引擎层做了一些处理,比如邮箱、电话等字段,建表后再对某字段加数据掩码对性能没有影响,瞬间完成的,可以随时对字段去掉掩码,只对赋予了db_datareader角色用户(生产环境中的只读用户)或对表只有select权限的用户生效
3、新增Temporal Tables功能(时态表),temporal时间的,记录了表历史上任何时间点的数据改动,数据库引擎维护对生产表的一个历史记录表

生产表:版本表,时态表

历史表:版本视图
特性用途:审计数据改动或者误操作的情况下进行数据恢复,类似于chang tracking、CDC之类数据改动历史记录
特性缺点:对生产表有要求,而且操作繁琐,
(1)生产表必须有主键
(2)生产表必须要 存在两个记录有效时间范围的字段
(3)只能记录update语句和delete语句
(4)跟chang tracking一样,分区表要关闭Temporal Tables才能切换分区
(5)业务不能更新主键,否则将会导致生产表和历史表的记录错乱
(6)生产表不能有计算字段
(7)不能对生产表使用truncate table 和drop table,除非关掉Temporal Tables功能

https://blog.csdn.net/king14bhhb/article/details/135607274
在ANSL-SQL2011中提出了Temporal的概念,Oracle ,SQLServer,DB2等大的数据库厂商也先后实现了这个标准。
这里我们先介绍一下什么是时态表,时态表(Temporal Table)是一张随时间变化的表,其实这是句废话,因为所有的表都随着时间变化,那时态表的意义在那里呢,
时态表有一个功能就是可以返回当时表的状态(数据),回溯数据,也就是说我们可以查询任意时间点的数据,有点类似快照,
只不过这个快照是根据我们提供的时间筛选出来的,也就是说时态表做到的是时间旅行,旨在保存数据更改的完整历史记录,从而实现轻松的时间点回溯。

Temporal table相比普通的表会做多一个history table,把所有修改删除(update&delete)的结果存起来,所以任何数据都不会丢失,要找回也比较容易
有点类似WAL日志,但是WAL存储的是操作本身,而Temporal table存储的是操作结果,和普通的表很像,只不过是每一条记录提供了一个有效期的状态

时态表的实现原理
时态表是有一对表而不是一个表,当前表和历史表。这两个表都包含2个额外的datetime字段用来定义每个行的可用期限
当前表包含了每个行的当前值。历史表包含每个行的之前的值,starttime,endtime表示行的可用期限。
期限开始列:数据库引擎把行的开始时间记录在这个列上,称为SysStartTime。
期限结束列:数据库引擎把行的结束时间记录在这个列上,称为SysEndTime
时态表的意义
1、审核/审计所有数据更改并在必要时执行数据取证
2、重建过去任何时间的数据状态
3、计算一段时间内的趋势
4、从意外的数据更改和应用程序错误中恢复

 

 


数据修复特性
1、 DBCC CHECKDB增强,对DBCC CHECKDB做了性能提升,速度会加快,可以验证持久化计算列和过滤索引,这次增强还包括DBCC CHECKDB对一个非常大的分区数量达到上千个的分区表的性能增强

 

高可用特性
1、AlwaysOn 增强,更多的同步副本,以前版本只能2个同步副本,现在支持3个同步副本
2、AlwaysOn 增强,不需要Windows域环境就可以搭建AlwaysOn,要使用Windows 2016系统


开发特性
1、增加DROP IF EXISTS 语法,DROP <TABLE|PROCEDURE|VIEW|FUNCTION|TRIGGER> IF EXISTS <name>
特性用途:简化IF EXISTS(SELECT * FROM sys.objects WHERE name = '' AND .....)
2、原生JSON支持,增加了JSON数据类型和一些JSON处理函数
3、两个新的字符串函数 STRING_SPLIT和 STRING_ESCAPE,前者是个表函数,输入text和分隔符就可以分割字符串变成表返回,后者是为了帮助json格式的数据转义特殊字符,比如斜杠
特性用途:不需要再像以前要自己写分割函数
4、从SQL2016开始,SQL Server管理器SSMS要单独下载安装,安装包不提供SSMS

 

posted @ 2015-09-04 22:01  桦仔  阅读(1198)  评论(0编辑  收藏  举报