PASS Summit 2016 SQL Server on Linux

The Team

Goals for the port to Linux

The goal is for SQL Server on Linux to match the performance on Windows, only the core relational engine will be ported initially

In-memory OLTP and Columnstore will be included in the first release

Monthly private previews, next month will be the last private preview, after that will be the public preview with the current plan being GA mid-2017

Initially on Redhat Linux/Ubuntu/Docker,SuSE support to follow

Failover clustering for FCI will be provided via Pacemaker which is the standard failover tool packaged with Redhat Linux and should support other Linux variants so less porting work required by the Microsoft team!

A failover demo was performed with an app that kept trying to reconnect and had a short blip whilst the failover occurred

There will be a standard "script" type interface to support stop/start actions for clustering.


yum install (or aptget), then run a setup script to accept the license and set the sa password

Currently only 1 instance per host, use containers if more are needed, do not forget to map container TCP/IP port to host port!

Current features supported

Always on Availability Groups will NOT be initally supported as this stores metadata inside Window Cluster Services and this needs to be untangled before it can be supported

Filestream IS supported but NOT Filetable as that is outside the relational engine

Full Text Search and AD integration will NOT be initially supported but are to follow

Surprise(!),CLR IS supported via full .NET Framework, compile on Windows/copy file to Linux though, this was demo'ed

SQL Agent should be in the next private preview, code is done.

Taking a backup on Windows, copying the file to Linux and restoring WAS demo'ed with no backup file conversation or conversion options needed!

Porting method

SQLOS is NOT a Platform Agnostic, tied to Windows API!

Options for porting were:

Option chosen was using Microsoft Research project Drawbridge, run Win32 sub system in process, just port lower level API calls

SQL Server on Linux will include a Platform Abstraction Layer (PAL) so the same SQL Server binaries just run(!), incliuding Service Packs.

This means the SQL Server developers during day to day work just QA as normal on Windows, then handover for final set of testing on Linux

There will be seperate Host Extension Layers for Windows and Linux.

Some latency sensitive calls go via a more direct path to the Host Extention e.g. readfile/writefile, IO completion marked in Host Extension, SQLOSv2 then automatically picks that up.

SQLOSv2 has been pushed down in the stack

Bonus Items

Only completed the day before the talk - SQL Server DMVs via a mounted filesystem like /proc!

Also for DBAs who like to view everything via T-SQL,/proc visible in sys.dm_linux_proc% DMVs! Saves having to logon to the host.