SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server on Linux についての個人的な所感

leave a comment

SQL Server on Linux がリリースされて 1 か月以上経過しました。
SNS 等でも SQL Server on Linux について意見が上がってきています。
SQL Server on Linux についての個人的な所感を一度書いてみたいと思います。

■SQL Server on Linux

SQL Server on Linux は Linux 上で動作する SQL Server となります。
Linux 向けの SQL Server を新規に開発したかというと、そういうことではありません。
「Windows 版の SQL Server を Linux 上で実行する」というアプローチが基本となっています。
次の図は、SQL Server on Linux のアーキテクチャを説明する際に使用されるものとなります。
image
SQL Server on Linux は、SQL Platform Abstraction Layer (SQL PAL) という抽象層を挟んで、SQL Server を実行するアーキテクチャとなっています。
(詳細については、SQL Server on Linux: How? Introduction を参照してください)
簡単に書いてしまうと、このアーキテクチャを用いることで「Windows のバイナリを Linux 上で実行する」ことを可能としています。
Windows 10 では、「Windows Subsystem for Linux」(WSL) を使用することで、Windows 上で Linux を実行することができ、これを実現するために「Drawbridge」を使用しています。
SQL Server on Linux では、この Drawbridge とは逆で、「Linux 上で SQL Server を実行するために必要となる Windows を動作させる」というアプローチをとっています。
そのため、SQL Server を動作させるために不要な OS の機能については実装されていないかと思います。
SQL Server on Linux では、「.sfp」(Single File Package) というファイル形式がとられており、このファイルが、SQL PAL 上で実行されているサンドボックス化されたファイルとなっています。
SQL Server では、第二世代 (7.0 / 2000) の SQL Server で User Mode Scheduler (UMS) 、第三世代 (2005 以降) では、SQLOS という SQL Server 内でスケジューラーを持っており、SQL Server 内のスレッドの管理は、SQL Server が持っているスケジューラーで実行するようになっています。
今回、実装された Linux 上で Windows を実行する仕組みが、すべての Windows プログラムで使用できるかというとそういうことはなく、SQL Server のような内部スケジューラーを持っており、スケジューラーが抽象化されているような仕組みでないと導入するのは難しいのではないでしょうか。
Windows 版と Linux 版は同一のバイナリが使用されていますので、SQL Server の修正については両プラットフォームともにタイムラグなく提供が行われれることになるのではないでしょうか。
実際、SQL Server 2017 Cumulative Update 1 については、Windows / Linux の両バージョンが同日に提供されていますので、これについては今後も同一の提供になるかと。
 

■SQL Server on Linux のライセンス形態

SQL Server on Linux のライセンスについては、SQL Server – 価格とライセンス に記載されています。
SQL Server という製品を購入することで、Windows または、Linux のどちらかで実行することができる SQL Server を利用することが可能なライセンスとなっています。
SQL Server on Linux は、OSS ではありません。
Microsoft が提供している有償の商用データベースであり、Microsoft から有償サポートを受けることができる製品となります。
無償で使用できるのは、次の 2 種類となります。

  • 本番環境でも利用できる Express Edition
  • 開発目的でのみ利用できる Developer Edition

SQL Server Express Edition では、次の表 のようなリソースの制限がありますので、無償版を使用する場合には、ハードウェアリソースの上限がこれで問題ないかを検討する必要があります。
image
SQL Server 2016 SP1 以降は

  • データ圧縮
  • パーティショニング
  • 列ストアインデックス
  • In-Memory OLTP
  • Always Encrypted
  • 詳細な監査

というような、性能やセキュリティに関連した機能を全エディションで使用することができるようになっています。
これらの機能を有効に活用することで、実データとして、 10GB 以上のデータを格納することもでき、パフォーマンスを向上させるための機能と組み合わせることも可能となっていますので、無償のエディションでも様々な使い方をすることができるようになっています。
 

■SQL Server on Linux を適用対象となりえる箇所は?

Linux 上のデータベースとしては、Oracle / DB2 / MySQL / PostgreSQL あたりと比較されることが多いのではないでしょうか。
MySQL Community Edition (CE) / PostgreSQL と SQL Server を比較した場合、OSS / 商用データベースの違いがあります。

  • データベースのライセンス費用は抑えたい
  • ソースコードにアクセスし、動作を厳密に確認したい
  • コミュニティ / 利用者ベースで改修ができる
  • 有償 / ベンダーサポートは不要

といった点が重視されている領域については、正直、SQL Server を導入する理由を見出すのが難しいのではという気がしています。
SQL Server Express Edition であれば本番環境でも、無償で使用することができますので、MySQL CE / PostgreSQL と比較できるのは、このエディションに限定されるのではないでしょうか。
上述していますが、現状の SQL Server は、Express Edition でも今まで Enterprise Edition でのみサポートされていた一部の機能を利用することが可能となっています。
Express Edition は簡略なエディションではなく、様々な機能を利用することがエディションとなっていることは把握しておくとよいかと。
 

  • データベースのライセンスが発生するが、ベンダーから有償サポートを受けることができる
  • ベンダーから定期的に修正プログラムが提供される
    (SQL Server 2017 はリリース後 1 年は月次で更新プログラムが提供されます)
  • 定期的に新しいバージョンが提供される

という点が重視される場合は、SQL Server が比較対象となりえるのではないでしょうか。
Oracle / DB2 / MySQL Enterprise Edition になるかと思いますが、これらの製品を使用している場合は、SQL Server が適用できる可能性が出てくるのではないかと。
機能や価格面で SQL Server が有利に立てる内容が見出せた場合には、SQL Server on Linux を利用することができるケースがあるかと思います。
 
SQL Server on Linux がリリースされたことにより、「使い慣れたプラットフォームで SQL Server を使用することができる」「SQL Server を利用するプラットフォームを選択することができる」という選択した追加されたことになります。
(使い慣れたプラットフォームに AIX / HP-UX / Solaris / Oralce Linux となっている場合、SQL Server を実行することはできませんが…)
RHEL / Ubuntu / SUSE 上で実行するという選択肢が SQL Server 2017 から追加されたことになります。
いままで、SQL Server を使用しようとすると Windows とセットでした。
そのため、

  • Windows の基本環境の運用を考慮する必要がある
  • マルチデータベースに対応する場合、Linux 版 / Windows 版を開発する必要があった

というようなことが考えられました。
Linux の運用に長けている場合、Windows 側の運用を考える手間があり、SQL Server がそもそも選択肢として入らないことがあります。
複数のデータベースに対応したソフトを開発している場合、MySQL / Oracle 版については Linux 上で動作するものとして開発をし、SQL Server は Windows 上で動作するものとして開発をするという必要がありました。
SQL Server on Linux を使用することで、プラットフォームの設計は Linux のみに寄せることができるようになりますので、OS の運用設計やマルチデータベース対応に必要となる開発コストが減るというようなメリットが考えられるのかと。
Linux 版と Windows 版の運用スクリプト/監視機構の両方を作るのはそれなりに手間がかかるので、これを Linux に一本化できるのはメリットが出ることがあるのではないでしょうか。
SQL Server は、データベース以外の部分でもコマンドラインツールについてもクロスプラットフォーム化されていますので、シェルスクリプトから SQL Server にアクセスすることも可能となっています。
他の DB 向けのシェルスクリプトを SQL Server 向けに変更するということもできるかおt。
データベースの入れ替えだけだと、SQL Server を使用することのメリットがあまり出ないケースもあるかと思います。
.NET 系については、SQL Server と親和性が高いため、「.NET Core」のようなクロスプラットフォームの開発言語と組み合わせることも考量する必要が出てくるのではないでしょうか。
 

■SQL Server on Linux の性能について

SQL Server on Linux の性能を説明するとき、TPC-H の結果を使うことが多いです。
TPC-H – Top Ten Performance Results の非クラスター環境の 11/19 時点の結果は次のようになっています。
image
1TB の結果については、次の順位となっています。

  1. SQL Server 2017 + SUSE
  2. SQL Server 2017 + RHEL
  3. SQL Server 2016 + Windows Server 2012 R2

この結果をみて、「Linux 版の方が Windows 版より性能が良い」と感じる方がいるように見えますが、1TB の場合、Windows 版は SQL Server 2017 ではなく、SQL Server 2016 の結果となっています。
SQL Server はバージョンが上がることで、製品の基本性能も向上します。
そのため、現状の TPC-H の結果については、Windows 版と Linux 版の性能差ではなく、SQL Server 2017 の基本的な性能差が要因となっている可能性がとても高いです。
結果を見るときは、同一のハードウェアのモデルを使っていても、ソフトウェア構成についても意識しておくとよいかと。

Share

Written by Masayuki.Ozawa

11月 20th, 2017 at 12:06 am

Posted in SQL Server

Tagged with ,

Leave a Reply