Any suggestions? Export (0) Print
Expand All

What's New in Database Engine


Updated: December 1, 2015

Applies To: SQL Server 2016 Preview

needhelp Need help?  MSDN forum  |  stackoverflow  |  Log an issue or suggestion at Microsoft Connect

This topic summarizes the enhancements introduced in the SQL Server 2016 release of the SQL Server Database Engine. The new features and enhancements increase the power and productivity of architects, developers, and administrators who design, develop, and maintain data storage systems.

To review what is new in the other SQL Server components, see What's New in SQL Server 2016, November Update.

[CTP 3.0] This release has supportability and performance improvements.

  • A read-only nonclustered columnstore index is updateable after upgrade. A rebuild of the index is not required to make it updateable.

  • There are performance improvements for analytics queries on columnstore indexes, especially for aggregates and string predicates.

  • DMVs and XEvents have supportability improvements.

For more details, see these topics in the Columnstore Indexes Guide section of Books Online:

[CTP 2.0] This release offers several new improvements for columnstore indexes including updateable nonclustered columnstore indexes, columnstore indexes on in-memory tables, and many more new features for operational analytics.

In SQL Server 2016 Community Technology Preview 3 (CTP 3.0), enhancements to In-Memory OLTP make adopting the feature to achieve performance benefits easier, in new as well as existing applications. Scaling improvements allow putting more data in memory-optimized tables and achieve higher throughput in order to support bigger workloads.


Do you want to try out SQL Server 2016? Sign up for Microsoft Azure, and then go Here to spin up a Virtual Machine with SQL Server 2016 already installed. You can delete the Virtual Machine when you’re finished.

[CTP 3.0]

Transact-SQL Improvements:

  •  Query Surface Area in Native Modules for:

    Natively compiled inline table-valued functions (TVFs)

    EXECUTE AS CALLER support - the EXECUTE AS clause is no longer required for native modules

    Built-in security functions and increased support for built-in math functions

  • Support with memory-optimized tables for:

    FOREIGN KEY constraints between memory-optimized tables

    CHECK constraints

    UNIQUE constraints

    Triggers (AFTER) for INSERT/UPDATE/DELETE operations. Triggers on memory-optimized tables are natively compiled, and thus use WITH NATIVE_COMPILATION.

Cross-feature support:

[CTP 2.0]

Transact-SQL Improvements:

Performance and Scaling improvements:

Enhancements in SQL Server Management Studio:

Cross-feature support:

  •  Using Multiple Active Result Sets (MARS) connections can now access memory-optimized tables and natively compiled stored procedures

  • Transparent Data Encryption support. If a database is configured for ENCRYPTION, files in the MEMORY_OPTIMIZED_DATA filegroup are now also encrypted.

For more information, see In-Memory OLTP (In-Memory Optimization).

[CTP 2.0] Management Studio provides the ability to view the live execution plan of an active query. This live query plan provides real-time insights into the query execution process as the controls flow from one query plan operator to another. For more information, see Live Query Statistics.

Arrow icon used with Back to Top link In This Topic

[CTP 2.0] Query store is a new feature that provides DBAs with insight on query plan choice and performance. It simplifies performance troubleshooting by enabling you to quickly find performance differences caused by changes in query plans. The feature automatically captures a history of queries, plans, and runtime statistics, and retains these for your review. It separates data by time windows, allowing you to see database usage patterns and understand when query plan changes happened on the server. The query store presents information by using a Management Studio dialog box, and lets you force the query to one of the selected query plans. For more information, see Monitoring Performance By Using the Query Store.

[CTP 3.0] Removing some restrictions for Query Store including adding support for performance monitoring supported for natively compiled code from In-Memory OLTP workloads. For more information, see Using the Query Store with In-Memory OLTP.

  • Stored plan is semantically equivalent to one that is produced when SET SHOWPLAN_XML is set to ON with one difference: plans in Query Store are always split and stored per individual statement.

  • Runtime statistics collection is controlled with sys.sp_xtp_control_query_exec_stats and is not enabled by default.

  • is_natively_compiled field added to sys.query_store_plan to help finding queries generated by the native code compilation.

  • Plan forcing for queries from natively compiled modules is available and forced plans are honored during module recompilation. For disk-based workloads, Query Store does not guarantee success of plan forcing operation as some plan shapes cannot be forced.

  • Memory grants metrics within sys.query_store_runtime_stats are not populated for natively compiled queries; their values are always 0.

Improving implementation of time-based cleanup (configured with STALE_QUERY_THRESHOLD_DAYS) to run in multiple transactions, holding database lock for a shorter period of time and thus minimize impact on customer workload.

In This Topic

[CTP 3.0]In CTP 3.0, temporal tables have been enhanced as follows:

  • Support for using temporal system-versioning with In-Memory OLTP. For more information, see System-Versioned Temporal Tables with Memory-Optimized Tables

  • Direct ALTER for system-versioned temporal tables enables modifying table schema without introducing maintenance windows. Columns can be added, altered or dropped while SYSTEM_VERSIONING is ON, including support for adding or removing the HIDDEN property to or from a period column.

  • Support for temporal querying clause FOR SYSTEM_TIME ALL that enables users to query entire data history easily without specifying period boundaries

  • Optimized CONTAINED IN implementation with minimized locking on current table. This optimizes analysis queries on historical data.

[CTP 2.3]You can mark one or both period columns with the HIDDEN flag so that these columns will not appear in query results unless a period column is expressly specified in the query.

[CTP 2.0] A temporal table is a new type of table that provides correct information about stored facts at any point in time. Each temporal table consists of two tables actually, one for the current data and one for the historical data. The system ensures that when the data changes in the table with the current data the previous values are stored in the historical table. Querying constructs are provided to hide this complexity from users. For more information, see Temporal Tables.

[CTP 2.0] SQL Server backup to URL using the Microsoft Azure Blob storage service now supports using block blobs instead of page blobs. Block blobs have a size limitation of 200GB per blob, whereas page blobs have a size limitation per blob of 1 TB. With block blobs, you can stripe your backup set across multiple blobs resulting in a maximum backup size is 12.8 TB. Backup to page blobs does not support striping. In addition, block blobs have superior performance and a lower cost. As a result, striped backups for large databases can experience significantly decreased backup and restore times from Microsoft Azure.

There are two steps required to stripe your backup set to block blobs. First, you must obtain a Shared Access Signature (SAS) token to a container in your Azure Storage account. This SAS token is used to create a SQL Credential and then this SAS token is used when the Azure container is specified as the backup device. One way to obtain this SAS token is to use Azure PowerShell commands. Then you use the same Transact-SQL or PowerShell backup commands without specifying the WITH CREDENTIAL clause that was formerly required when using backup to URL. For examples, see Code Examples.


For SQL Server 2016 Community Technology Preview 3 (CTP 3.0), the new backup to URL functionality does not yet have corresponding UI support in SQL Server Management Studio.

[CTP 2.0] SQL Server backup to URL now supports using Azure snapshots to backup databases in which all database files are stored using the Microsoft Azure Blob storage service. For more information, see File-Snapshot Backups for Database Files in Azure.

[CTP 2.0] In SQL Server 2016 Community Technology Preview 3 (CTP 3.0) SQL Server Managed Backup to Microsoft Azure uses the new block blob storage for backup files. There are also several changes and enhancements to Managed Backup.

  • Support for both automated and custom scheduling of backups.

  • Support backups for system databases.

  • Support for databases that are using the Simple recovery model.

For more information, see SQL Server Managed Backup to Microsoft Azure


For SQL Server 2016 Community Technology Preview 3 (CTP 3.0), these new managed backup features do not yet have corresponding UI support in SQL Server Management Studio.

In This Topic

[CTP 2.0] In general, you do not need to use trace flag 4199 in SQL Server 2016 Community Technology Preview 3 (CTP 3.0) since most of the query optimizer behaviors controlled by this trace flag are enabled unconditionally under the latest compativility level (130) in SQL Server 2016 Community Technology Preview 3 (CTP 3.0).

In This Topic

There are several enhancements to TempDB:

  • Trace Flags 1117 and 1118 are not required for tempdb anymore. If there are multiple tempdb database files all files will grow at the same time depending on growth settings. In addition, all allocations in tempdb will use uniform extents.

  • By default, setup adds as many tempdb files as the CPU count or 8, whichever is lower.

  • During setup, you can configure the number of tempdb database files, initial size, autogrowth and directory placement using the new UI input control on the Database Engine Configuration - TempDB section of SQL Server Installation Wizard.

  • The default initial size is 8MB and the default autogrowth is 64MB.

  • You can specify multiple volumes for tempdb database files. If multiple directories are specified tempdb data files will be spread across the directories in a round-robin fashion.

[CTP 2.0] Format query results as JSON by adding the FOR JSON clause to a SELECT statement. Use the FOR JSON clause, for example, to delegate the formatting of JSON output from your client applications to SQL Server. Here's a sample query that uses the FOR JSON clause.


SELECT name, surname
FROM emp


   { "name": "John" },
   { "name": "Jane", "surname": "Doe" }

For more info, see Format Query Results as JSON with FOR JSON (SQL Server).

[CTP 3.0] Convert JSON data to rows and columns by calling the OPENJSON rowset provider function. Use OPENJSON to import JSON data into SQL Server, or convert JSON data to rows and columns for an app or service that can't currently consume JSON directly. Here's an example that uses OPENJSON with the default schema.


SELECT * FROM OPENJSON('{"name":"John","surname":"Doe","age":45}')










For more info, see Convert JSON Data to Rows and Columns with OPENJSON (SQL Server).

[CTP 3.0] The built-in support for JSON also now includes the following built-in functions

For more info, see Query JSON Data with Built-in Functions (SQL Server).

Test drive built-in JSON support with the AdventureWorks sample database. To get the AdventureWorks sample database, download at least the database file and the samples and scripts file from here. After you restore the sample database to an instance of SQL Server 2016, unzip the samples file and open the "JSON Sample Queries procedures views and indexes.sql" file from the JSON folder. Run the scripts in this file to reformat some existing data as JSON data, run sample queries and reports over the JSON data, index the JSON data, and import and export JSON.

PolyBase allows you to use T-SQL statements to access data stored in Hadoop or Azure Blob Storage and query it in an adhoc fashion. It also lets you query semi-structured data and join the results with relational data sets stored in SQL Server. PolyBase is optimized for data warehousing workloads and intended for analytical query scenarios.

In SQL16 CTP2.4, the PolyBase feature will support all SQL Server collations.

For more information, see PolyBase.

[CTP 2.0] Stretch Database is a new feature in SQL Server 2016 Community Technology Preview 3 (CTP 3.0) that leverages resources in Windows Azure to store and query archival data. Stretch Database automatically archives eligible rows from Stretch-enabled tables and uses computational resources in Azure to offload queries over the archived rows. For more info, see Stretch Database.

[CTP 2.2] Stretch Database now includes the following features and enhancements.

  • You can now add security policies to a table that has been configured for Stretch Database. You can also configure a table that uses Row-Level Security for Stretch Database.

  • Stretch Database Advisor is now available as a component of SQL Server 2016 Upgrade Advisor Preview 1. You can download Upgrade Advisor Preview 1 here or you can install it by using the Web Platform Installer. Stretch Database Advisor helps you to adopt Stretch Database by analyzing existing database tables based on adjustable table size thresholds to identify candidates for Stretch Database. For more info, see Identify databases and tables for Stretch Database by running Stretch Database Advisor.

[CTP 3.0] Stretch Database now includes the following features and enhancements.

  • In SQL Server Management Studio

    • New context menu options on databases and tables reflect new Stretch Database functionality.

    • You can enable Stretch Database for individual tables.

    • You can pause or disable data migration at the table level.

    • The visual Stretch Database Monitor lets you monitor the current status of data migration, including the ability to pause the migration at the table level.

  • In the Enable Stretch Database Wizard

    • The updated and simplified Wizard reduces the number of steps required to enable or reconfigure Stretch Database.

    • The Wizard enables Stretch Database for you at the server level, if you have administrator rights.

    • You can create a new Azure SQL Database server or use an existing SQL Database server to store the remote data.

    • When you're selecting tables, the Wizard now provides better validation, warning, and error messages.

  • Other

    • To improve support for AlwaysOn, Stretch Database now uses database scoped credentials.

    • To improve support for AlwaysEncrypted, you can now enable Stretch Database on a table with columns that are using AlwaysEncrypted.

    • Joins between tables that are configured for Stretch perform better.

  • Test drive Stretch Database with the AdventureWorks sample database. To get the AdventureWorks sample database, download at least the database file and the samples and scripts file from here. After you restore the sample database to an instance of SQL Server 2016, unzip the samples file and open the Stretch DB Samples file from the Stretch DB folder. Run the scripts in this file to check the space used by your data before and after you enable Stretch Database, to track the progress of data migration, and to confirm that you can continue to query existing data and insert new data both during and after data migration.

[CTP 3.1] Stretch Database now includes the following features and enhancements.

  • Stretch Database is now compatible with AlwaysOn. You can enable Stretch on a database that already belongs to an AlwaysOn availability group. You can also add a database that's already enabled for Stretch to an AlwaysOn availability group.

  • You can use a federated service account for the on premises SQL Server to communicate with the remote Azure SQL Database server when certain conditions are true. In CTP 3.1, this option is not available in the Enable Database for Stretch wizard. You have to use the ALTER DATABASE statement to enable Stretch Database with this option. In CTP 3.1, this feature also requires a trace flag. For more info, see ALTER DATABASE SET Options (Transact-SQL).

  • You can now unmigrate the data that Stretch Database has migrated to Azure. In CTP 3.1, this feature requires a trace flag. For more info, see Unmigrate remote data (Stretch Database).

[CTP 2.0] Numerous enhancements support the features described in the other sections of this topic. The following additional enhancements are available.

The TRUNCATE TABLE statement now permits the truncation of specified partitions. For more information, see TRUNCATE TABLE (Transact-SQL).

ALTER TABLE (Transact-SQL) now allows many alter column actions to be performed while the table remains available.

The full-text index DMV sys.dm_fts_index_keywords_position_by_document (Transact-SQL) returns the location of keywords in documents. This DMV has also been added in SQL Server 2012 SP2 and SQL Server 2014 SP1.

A new query hint NO_PERFORMANCE_SPOOL can prevent a spool operator from being added to query plans. This can improve performance when many concurrent queries are running with spool operations. For more information, see Query Hints (Transact-SQL).

[CTP 2.0]The FORMATMESSAGE (Transact-SQL) statement is enhances to accept a msg_string argument.


[CTP 3.0] A MAXDOP option has been added to DBCC CHECKTABLE (Transact-SQL), DBCC CHECKDB (Transact-SQL), and DBCC CHECKFILEGROUP (Transact-SQL) to specify the degree of parallelism.

[CTP 3.0] SESSION_CONTEXT can now be set. Includes the SESSION_CONTEXT function, CURRENT_TRANSACTION_ID function, and the sp_set_session_context procedure.

[CTP 3.0] Advanced Analytics Extensions allow users to execute scripts written in a supported language such as R. Transact-SQL supports R by introducing the sp_execute_external_script (Transact-SQL) stored procedure, and the external scripts enabled Server Configuration Option. For more information, see SQL Server R Services.

[CTP 3.0] The CREATE USER syntax is enhanced with the ALLOW_ENCRYPTED_VALUE_MODIFICATIONS option to support the Always Encrypted feature. For more information see Migrate Sensitive Data Protected by Always Encrypted.

[CTP 3.1] The COMPRESS (Transact-SQL) and DECOMPRESS (Transact-SQL) functions convert values into and out of the GZIP algorithm.

[CTP 3.1] The DATEDIFF_BIG (Transact-SQL) and AT TIME ZONE (Transact-SQL) functions and the sys.time_zone_info (Transact-SQL) view are added to support date and time interactions.

[CTP 2.0] Two new views support row level security. For more information, see sys.security_predicates (Transact-SQL) and sys.security_policies (Transact-SQL).

Seven new views support the Query Store feature. For more information, see Query Store Catalog Views (Transact-SQL).

24 new columns are added to sys.dm_exec_query_stats (Transact-SQL) provide information about memory grants.

Two new query hints (MIN_GRANT_PERCENT and MAX_GRANT_PERCENT) are added to specify memory grants. See Query Hints (Transact-SQL).

[CTP 2.2] sys.dm_exec_session_wait_stats (Transact-SQL) provides a per session report similar to the server wide sys.dm_os_wait_stats (Transact-SQL).

[CTP 2.3] sys.dm_exec_function_stats (Transact-SQL) provides execution statistics regarding scalar valued functions.

[CTP 2.0] Row-level security introduces predicate based access control. It features a flexible, centralized, predicate-based evaluation that can take into consideration metadata (such as labels) or any other criteria the administrator determines as appropriate. The predicate is used as a criterion to determine whether or not the user has the appropriate access to the data based on user attributes. Label based access control can be implemented by using predicate based access control. For more information, see Row-Level Security.

[CTP 2.3] Row-level security is supported for memory-optimized tables.

[CTP 3.0] Row-level security adds support for block predicates. SESSION_CONTEXT can now be set for use in a security policy.

[CTP 2.0] With Always Encrypted, SQL Server can perform operations on encrypted data, and best of all the encryption key resides with the application inside the customer’s trusted environment and not on the server. Always Encrypted secures customer data so DBAs do not have access to plain text data. Encryption and decryption of data happens transparently at the driver level minimizing changes that have to be made to existing applications. For more information, see Always Encrypted (Database Engine).

[CTP 3.0] Management Studio enhancements related to dialog boxes, and the Always Encrypted Wizard.

[CTP 3.0] Elimination of some restrictions.

[CTP 3.0] The word DEFINITION was removed from column master keys. The CREATE COLUMN MASTER KEY DEFINITION statement becomes CREATE COLUMN MASTER KEY. sys.column_master_key_definitions is renamed to sys.column_master_keys. The column_master_key_definition_id column in sys.column_encryption_key_values is now column_master_key_id.

[CTP 3.0] The COLUMN MASTER KEY argument of CREATE COLUMN ENCRYPTION KEY (Transact-SQL) has been renamed to COLUMN_MASTER_KEY.

[CTP 3.0] Built-in support for using column master keys stored in hardware security modules (HSMs) that provide Crypto API (CAPI) or Cryptography API - Next Generation (CNG).

[CTP 3.0] The CREATE USER syntax is enhanced with the ALLOW_ENCRYPTED_VALUE_MODIFICATIONS option to support the Always Encrypted feature. For more information see Migrate Sensitive Data Protected by Always Encrypted.

[CTP 2.0] Dynamic data masking limits sensitive data exposure by masking it to non-privileged users. Dynamic data masking helps prevent unauthorized access to sensitive data by enabling customers to designate how much of the sensitive data to reveal with minimal impact on the application layer. It’s a policy-based security feature that hides the sensitive data in the result set of a query over designated database fields, while the data in the database is not changed. For more information, see Dynamic Data Masking.

[CTP 3.0] Adds a random data mask for numeric data. Adds support for all data types, memory optimized tables, SELECT INTO and INSERT INTO operations, import/export support, cursors, and syntax highlighting support in Management Studio. Adds a data mask called random.

[CTP 2.0] The ALTER ANY SECURITY POLICY permission is available as part of the implementation of row level security.

The ALTER ANY MASK and UNMASK permissions are available as part of the implementation of dynamic data masking.


The ALTER ANY EXTERNAL DATA SOURCE and ALTER ANY EXTERNAL FILE FORMAT permissions are visible in SQL Server 2016 Community Technology Preview 3 (CTP 3.0) but only apply to the Analytics Platform System (SQL Data Warehouse).

[CTP 3.0] The EXECUTE ANY EXTERNAL SCRIPT permissions are available as part of the support for R scripts.

[CTP 2.0] Transparent Data Encryption has been enhanced with support for Intel AES-NI hardware acceleration of encryption. This will reduce the CPU overhead of turning on Transparent Data Encryption.

In This Topic

[CTP 2.3] The default encryption for endpoints is changed from RC4 to AES.

[CTP 2.0] Load-balancing of read-intent connection requests is now supported across a set of read-only replicas. The previous behavior always directed connections to the first available read-only replica in the routing list. For more information, see Configure load-balancing across read-only replicas.

The number of replicas that support automatic failover has been increased from two to three.

Group Managed Service Accounts are now supported for AlwaysOn Failover Clusters. For more information, see Group Managed Service Accounts. For Windows Server 2012 R2, an update is required to avoid temporary downtime after a password change. To obtain the update, see gMSA-based services can't log on after a password change in a Windows Server 2012 R2 domain.

AlwaysOn Availability Groups supports distributed transactions and the DTC on Windows Server 2016. For more information, see SQL Server 2016 Support for DTC and AlwaysOn Availability Groups.

You can now configure AlwaysOn Availability Groups to failover when a database goes offline. This change requires the setting the DB_FAILOVER option to ON in the CREATE AVAILABILITY GROUP (Transact-SQL) or ALTER AVAILABILITY GROUP (Transact-SQL) statements.

[CTP 2.2] AlwaysOn now supports encrypted databases. The Availability Group wizards now prompt you for a password for any databases that contain a database master key when you create a new Availability Group or when you add databases or add replicas to an existing Availability Group.

In This Topic

[CTP 3.0] Replication of memory-optimized tables are now supported. For more information, see Replication to Memory-Optimized Table Subscribers.

[CTP 3.0] Replication is now supported to Azure SQL Database. For more information, see Replication to SQL Database.

[CTP 2.0] SQL Server Management Studio supports the Active Directory Authentication Library (ADAL) which is under development for connecting to Microsoft Azure. This replaces the certificate-based authentication used in SQL Server 2014 Management Studio.

SQL Server Management Studio installation requires installing .NET 4.6 as a pre-requisite. .NET 4.6 will be automatically installed by setup when SQL Server Management Studio is selected as an installation choice.  

[CTP 3.0] A new query result grid option supports keeping Carriage Return/Line Feed (newline characters) when copying or saving text from the results grid. Set this from the Tools/Options menu.

In This Topic

[CTP 2.2] SQL Server 2016 Upgrade Advisor Preview 1 is a standalone tool that enables users of prior versions to run a set of upgrade rules against their SQL Server database to pinpoint breaking and behavior changes and deprecated features as well as providing help with the adoption of new features such as Stretch Database.

You can download Upgrade Advisor Preview 1 here or you can install it by using the Web Platform Installer.

needhelp Need help?  MSDN forum  |  stackoverflow  |  Log an issue or suggestion at Microsoft Connect

Community Additions

© 2015 Microsoft