2024-09-16 時点で、ARM 版の Windows 11 で SQL Server を動作させるための情報についてまとめておきたいと思います。
私は Copilot+ PC に対応した ARM 版の Windows についてはまだ入手ができていないため、Windows Dev Kit 2023 を使用した、23H2 の ARM 版 Windows 11 で確認をしています。
Contents
ARM をサポートする SQL Server ベースのデータベースエンジン
以前は Azure SQL Edge がネイティブに ARM64 をサポートしていましたが、現在はサポートされなくなっています。
この情報については、公式のドキュメントとしては Azure SQL Edge とは 等に記載されており、Azure SQL Edge Update – September 2023 でアナウンスが行われました。
Azure SQL Edge では、ARM64 プラットフォームがサポートされなくなりました。
現在も Azure SQL Edge の ARM64 のコンテナーを展開することも可能かもしれませんが、ARM64 のイメージは、Azure SQL Edge 1.0.7 で終了し、以降 2 年以上メンテナンスが行われていない古いイメージとなっていますので、動作としても問題が出てくるかと思います。
2024-09-16 時点では、ARM をサポートし、製品のサポートが継続されている SQL Server ベースのデータベースエンジンは存在していません。
そのため SQL Server を動作させるためには、x64 のイメージをどのようにして ARM64 上で動作させるかが焦点となってくるかと思います。
ARM 版の Windows で SQL Server を動作させる
コンテナーが利用できるか?
Docker Desktop は ARM 版の Windows でも動作するようになっています。
しかし、現時点では ARM 版の Windows 上で実行している Docker Desktop で SQL Server を動作させる方法は確立されていないようでした。
- MSSQL container for aarch64 (arm64) for better performance #802
- Docker ARM for windows: Can’t run linux/amd64 on linux/arm64/v8 #888
- Docker ARM on Windows with linux/amd64 images? MSSQL
私の環境でも試してみたのですが、上記の情報で記載されているように次のエラーが発生し、コンテナーを起動することができませんでした。
2024-09-16 16:06:20 SQL Server 2022 will run as non-root by default. 2024-09-16 16:06:20 This container is running as user mssql. 2024-09-16 16:06:20 To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216. 2024-09-16 16:06:20 /opt/mssql/bin/sqlservr: Invalid mapping of address 0x2aaaad74d000 in reserved address space below 0x400000000000. Possible causes: 2024-09-16 16:06:20 1) the process (itself, or via a wrapper) starts-up its own running environment sets the stack size limit to unlimited via syscall setrlimit(2); 2024-09-16 16:06:20 2) the process (itself, or via a wrapper) adjusts its own execution domain and flag the system its legacy personality via syscall personality(2); 2024-09-16 16:06:20 3) sysadmin deliberately sets the system to run on legacy VA layout mode by adjusting a sysctl knob vm.legacy_va_layout. 2024-09-16 16:06:20 2024-09-16 19:01:15 SQL Server 2022 will run as non-root by default. 2024-09-16 19:01:15 This container is running as user mssql. 2024-09-16 19:01:15 To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216. 2024-09-16 19:01:15 /opt/mssql/bin/sqlservr: Invalid mapping of address 0x2aaaad74d000 in reserved address space below 0x400000000000. Possible causes: 2024-09-16 19:01:15 1) the process (itself, or via a wrapper) starts-up its own running environment sets the stack size limit to unlimited via syscall setrlimit(2); 2024-09-16 19:01:15 2) the process (itself, or via a wrapper) adjusts its own execution domain and flag the system its legacy personality via syscall personality(2); 2024-09-16 19:01:15 3) sysadmin deliberately sets the system to run on legacy VA layout mode by adjusting a sysctl knob vm.legacy_va_layout.
今回使用している Docker Desktop は 「Docker Desktop 4.34.2 (167172) 」となり、このバージョンでは次の記事で紹介されているような方法を使用しなくても、linux/amd64 の Hello World のイメージを起動することはできていたのですが、SQL Server については起動することができませんでした。
現状、ARM 版の Windows 11 でコンテナーを使用して、linux/amd64 の SQL Server を動作させるのは難しいのかもしれませんね…。
Memo: Apple Silicon での SQL Server の実行
Apple Silicon の Mac でも当初は同様の問題が発生していました。
- (Docker apple M1) Invalid mapping of address 0x40080f9000 in reserved address space below 0x400000000000 #668
- Does not work on Mac M1 #734
- (Apple MAC M2 Air) Container stops within 1 second of running SQL Server with Exited(1) status #848
Development with SQL in containers on macOS でアナウンスされた Docker Desktop for Apple silicon の機能を使用することで、エミュレーションにより実行することが可能となりました。
Docker Desktop で「Use Rosetta for x86_64/amd64 emulation on Apple Silicon」を有効にし、Rosetta 2 を使用することで SQL Server のコンテナーを実行するという方法となっています。
基本的なクエリの簡易実行であれば問題はなさそうです。
しかし、ARM64 にネイティブに対応しているわけではなく、パフォーマンスの問題が報告されることもあるようですので、負荷が高いワークロードの実行については注意が必要となるかもしれません。
x64 版の SQL Server をコンテナーを使用せずに実行する
2024-09-16 時点では ARM 版の Windows 11 で動作させるにはこの方法になりそうです。Microsoft が公式にアナウンスしている内容ではないので動作としての保証はありませんが….。
ARM 版の Windows 11 では、x86 /x64 の両アプリのエミュレーションがサポートされており、x86 / x64 のプログラムの実行が可能なようになっています。
これを利用して、ARM 版の Windows で直接 SQL Server を実行する方法が、MSSQLEXPRESS-M1-Install で公開されています。
Features not working on ARM64
- Filestream (requires a system driver which is not available on ARM64)
- Azure Attestation (AzureAttestService cannot be started on ARM64)
- 64-bit SQL Configuration Manager not working (mmc.exe is only avaialble as ARM64 (non-EC) process and it cannot load x64 DLLs, so configuration of some features must be done through registry)
として記載されているように、いくつかの機能は動作しませんが、基本的なクエリの実行については対応していそうでした。(Azure SQL Edge で非サポート となっていた、CLR に依存する T-SQL も動作するため FORMAT 関数も動作します)
上述のリポジトリで公開されている「src/Scripts」内のバッチファイルを実行することで、SQL Server のイメージをダウンロードしてインストールが自動的に行われます。
「.bat」をハイブリッドなスクリプトとして作成されており、コマンドプロンプトと PowerShell のスクリプトが一つのファイルに共存しているものとなりますが、次のような処理が実行されています。
- PowerShell のスクリプトを権限昇格して実行
- SQL Server のインストールイメージをダウンロードし、インストールを実行
- 初回の実行時にはエラーとなり、インストールが完了していないが後続の処理で再実行することでインストールを完了させる
- FILESTREAM 用のドライバーのレジストリ (RsFx0700) を設定
- インストールを同一のオプションで再度実行してインストールを完了させる
- FILESTREAM 用のレジストリを削除
この流れがわかっていれば、公開されているインストールを手動で実行することも可能です。
公開されているスクリプトは英語版の SQL Server を名前付きインスタンスとしてインストールしています。
これを日本語版の SQL Server で既定のインスタンスとしてインストールしたい場合には次のような変更を行うことで対応できます。
- インストーラーのダウンロード先を次のURL に変更
- https://download.microsoft.com/download/3/f/b/3fb18099-aba2-450a-b643-90250fee884a/SQLServer2022-DEV-x64-JPN.exe
- https://download.microsoft.com/download/3/f/b/3fb18099-aba2-450a-b643-90250fee884a/SQLServer2022-DEV-x64-JPN.box
- 「/INSTANCENAME」 のオプションを「/INSTANCENAME=MSSQLSERVER」に変更
- /qs /ACTION=Install /FEATURES=SQLENGINE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=BUILTIN\Administrators /IACCEPTSQLSERVERLICENSETERMS=true /UPDATEENABLED=false /USEMICROSOFTUPDATE=false のオプションでインストール
これで、SQL Server を ARM の Dev Kit 2023 上で実行することができました。
クライアントツール
SQL Server のクライアントツールについては、通常のツールを使うことができます。
SQL Server Management Studio(SSMS) については、SQL Server のデータベースエンジンのような問題は発生せずに通常の方法でインストーすることができます。
SSMS は、x86 版での提供となっているためエミュレーション実行となっているのかと思いますが、Azure Data Studio (ADS) については、ARM64 版が提供されているため、ARM64 でネイティブ実行することが可能となっています。
クライアントツールについては従来通り、使い慣れているものを活用することができるのではないでしょうか。