SQL Server on Linux の機能
- 7 分
予算所有者に SQL Server 移行を正当化するには、ご利用のシステムに競争上の優位性を提供することができる SQL Server の機能を理解することが役立ちます。
Linux 上の SQL Server の内容を調査した後は、現在使用可能な機能が、既存および将来のデータ処理に対する Wide World Importers の要件を満たしていることを確認する必要があります。
ここでは、SQL Server on Linux の主な機能について説明します。
パフォーマンス
SQL Server on Linux では、Hybrid Transactional Analytical Processing (HTAP) ソリューションを提供することで、高速トランザクション スループットの競合するニーズと応答性の高い分析をサポートします。 HTAP では、次のような SQL Server の主要なパフォーマンス テクノロジがいくつか使われています。
インメモリ オンライン トランザクション処理 (OLTP)
メモリ最適化テーブルとコンパイル済みストアド プロシージャを組み合わせると、Wide World Importers のトランザクション テーブルのパフォーマンスが大幅に向上する可能性があります。たとえば、eコマース Web サイトのセッション状態の書き込みと読み取りなどです。
列ストア インデックス
SQL Server では、行データと圧縮された列データの両方がサポートされます。 トランザクション テーブルでは、分析クエリの作成時に行ストア インデックスの代わりに列ストア インデックスを使用することもできます。 列ストア インデックスを使用すると、現在の分析スイートでトランザクションのパフォーマンスを維持しながら、運用データに対してリアルタイムのレポート クエリを実行することができます。
クエリ ストア
DBA チームは、適切なクエリ プランが確実に使用されるように、毎月のパフォーマンス チューニング タスクを完了します。 クエリ のパフォーマンスを監視し、実行プランの変更がパフォーマンスに影響していたクエリ プランを元に戻します。 また、チームは、実行時間の長い上位 10 個のクエリを開発リーダーに報告し、リソースのロックがあれば調査します。 クエリ ストアでは、これらすべてのタスクがサポートされます。クエリ ストアは Transact-SQL で有効にすることができます。
ALTER DATABASE <database_name>
SET QUERY_STORE (OPERATION_MODE = READ_WRITE);
自動チューニングとインテリジェントなクエリ処理
クエリ ストアを有効にすると、プラン選択の自動修正を有効にすることができます。 自動チューニングを有効にすると、SQL Server によってクエリのパフォーマンスが監視されます。 新しいクエリ プランが以前のバージョンよりも劣る場合は、新しいプランを、より適切に実行されている以前のバージョンに置き換えることができます。 このオプションは、ALTER
ステートメントを使用してデータベース レベルで使用できます。
ALTER DATABASE <database_name>
SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = ON );
インテリジェント クエリ処理 (IQP) は一連の機能であり、その多くは SQL Server 2022 の新機能であり、ワークロードのパフォーマンスを自動的に改善および最適化します。 次のような IQP 機能があります。
アダプティブ結合 (バッチ モード): アダプティブ結合では、実際の入力行に基づいて、実行時に結合の種類が動的に選択されます。
インターリーブ実行: 固定推測ではなく、最初のコンパイル時に検出された複数ステートメント テーブル値関数の実際のカーディナリティを使用します。
メモリ許可フィードバック (バッチ モード): バッチ モードクエリにディスクにスピルする操作がある場合は、連続実行のためにメモリを追加します。 クエリで > 50% を超える、割り当てられたメモリが浪費される場合は、連続実行のためにメモリ許可サイズチューニングを減らします。
概算 Count Distinct:ハイ パフォーマンスと小さいメモリ占有領域の利点がある、ビッグ データ シナリオでの概算の
COUNT DISTINCT
を提供します。行ストアでのバッチ モード: 列ストア インデックスを必要とせずに、CPU にバインドされたリレーショナル DW ワークロードにバッチ モードを提供します。
メモリ許可フィードバック (行モード): 行モードのクエリにディスクにスピルする操作がある場合は、連続して実行するためにメモリを追加します。 クエリで > 50% を超える、割り当てられたメモリが浪費される場合は、連続実行のためにメモリ許可サイズチューニングを減らします。
スカラー UDF インライン化: スカラー UDF は、呼び出し元のクエリに "インライン化" される同等のリレーショナル式に変換され、多くの場合、パフォーマンスが大幅に向上します。
テーブル変数遅延コンパイル: 固定推測ではなく、最初のコンパイルで検出されたテーブル変数の実際のカーディナリティを使用します。
おおよそのパーセンタイル: 大きなデータセットのパーセンタイルを、許容可能なランクベースのエラー境界で迅速に計算し、おおよそのパーセンタイル集計関数を使用して迅速な決定を行えるようにします。
カーディナリティ推定 (CE) フィードバック: クエリを繰り返すためにカーディナリティの見積もりを自動的に調整して、非効率的な CE の前提条件によってクエリ パフォーマンスが低下するワークロードを最適化します。 CE フィードバックは、クエリ実行プランの品質を向上させるために、特定のクエリとデータ分散に適合するモデルの想定を識別し、使用します。
並列処理の次数 (DOP) フィードバック: 非効率的な並列処理がパフォーマンスの問題を引き起こす可能性があるワークロードに合わせて最適化するために、クエリを繰り返す並列処理の度合いを自動的に調整します。 クエリ ストアを有効にしておく必要があります。
パラメーターセンシティブプランの最適化: パラメーターセンシティブプランの最適化は、パラメーター化されたクエリに対して一つのキャッシュされたプランが、すべての受信パラメーター値に対し最適でない可能性がある、例えば非一様なデータ分布のシナリオに対処します。
メモリ許可フィードバック (パーセンタイル): 過去のクエリ実行を組み込んでフィードバックを絞り込むことで、メモリ許可フィードバックの既存の制限に対応します。
メモリ許可フィードバックの永続化: メモリ許可フィードバックを保持するための新機能を提供します。 データベースでクエリ ストアを有効にし、READ_WRITE モードにする必要があります。
CE フィードバックの永続化: データベースと
READ_WRITE
モードでクエリ ストアを有効にする必要があります。DOP フィードバックの永続化: クエリ ストアをデータベースと
READ_WRITE
モードで有効にする必要があります。プラン強制の最適化: 強制クエリを繰り返す際のコンパイル オーバーヘッドを削減します。 詳細については、「クエリ ストアでのプランの強制の最適化」を参照してください。
IQP で最適なパフォーマンスの利点を得るために、コードを書き直したり、データベース スキーマを変更したりする必要はありません。 必要なのは、データベースを互換性レベル 150 以降にアップグレードすることだけです。
ALTER DATABASE <database_name> SET COMPATIBILITY_LEVEL = 160;
セキュリティ
SQL Server on Linux では、ディスク上、メモリ内、または転送中のデータを保護するため、Always Encrypted、行レベルのセキュリティ、動的データ マスクなどの高度なセキュリティ機能がサポートされています。 これらの機能はすべて、Standard Edition を含むすべてのエディションでサポートされています。
Transparent Data Encryption (TDE) は、保存データ(データがデータベース ファイルに格納されている場合)を暗号化します。 データは、データベース内とバックアップの両方で悪意のあるユーザーから保護されます。
Always Encrypted を使用すると、データを所有するユーザーのみがデータを表示および処理できます。 データベース管理者のように、データを管理するユーザーはデータを表示できません。 Always Encrypted を使用する場合:
- 暗号化されたデータに対して、最初に復号化することなくクエリを実行できます。
- データは、保存時、サーバー メモリに移動するとき、およびサーバーから信頼されたクライアント アプリに移動するときに保護されます。
- 暗号化と暗号化の解除はクライアント ドライバーで行われるため、そのプロセスはクライアント アプリケーションに対して透過的になります。
- アクセスできるのは信頼されたアプリケーションとデータの所有者のみです。 アプリケーション開発者とデータベース管理者は、列暗号化キー (CEK) にアクセスできません。
監査では、 データベース エンジンで発生したイベントと、それらのイベントを実行したユーザーを追跡します。 監査されたイベントは、イベント ログまたは監査ファイルに格納でき、それらを使用して、攻撃やデータ侵害などの問題を調査できます。
行レベルのセキュリティ は、クエリを実行しているユーザーに基づいて、テーブル内の特定の行へのアクセスを制御します。 たとえば、グループのメンバーシップや実行コンテキストなどによって、だれがデータにアクセスできるのかを制御します。
動的データ マスクは、データ の一部をマスクします。 4 種類のマスク (列内のすべてのデータのマスク、メール アドレスのマスク、数値データの乱数マスク、カスタム文字列マスク) を使用できます。 たとえば、カスタム文字列マスクを使用して、社会保障番号の最後の 4 桁を除くすべての数字をマスクすることができます。
データ検出と分類 では、個人データなど、データベース内の機密データを識別、ラベル付け、およびレポートします。 これは、データのプライバシーに関する法規制を遵守して、最も重要なデータを含むデータベースを強化することを容易にする、SQL Server Management Studio (SSMS) 内のツールです。 データ検出と分類は、Advanced Data Security (ADS) パッケージの一部になっているサービスです。
脆弱性評価 は、データベースの脆弱性を識別します。 サーバー構成とデータベース設計によって引き起こされる可能性のある弱点を認識したら、それらを軽減することで一般的な攻撃を防ぐことができます。 脆弱性評価は、別の ADS サービスです。
SQL Server エージェント
SQL Server エージェントでは、メンテナンス ジョブと、スケジュールされ、自動化されたタスクが実行されます。 SQL Server エージェントでは、次の 3 つのワークロードがサポートされます。
- Transact-SQL ジョブ
- DB メール
- ログ配布
既定では SQL Server エージェントは無効になっていますが、インストールされており、コマンド ライン mssql-conf
ユーティリティを使用して有効にすることができます。
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
sudo systemctl restart mssql-server
高可用性
SQL Server では、許容できるフォールト トレランスのレベルをさまざまな方法で指定できます。 SQL Server on Linux では、Always On 可用性グループと、Always On フェールオーバー クラスター インスタンスがサポートされています。 どちらのオプションでも、各サーバーに mssql-server-ha
パッケージがインストールされている必要があります。 Linux では Pacemaker を使用したクラスタリングがサポートされています。これは、ホスト オペレーティング システムに緊密に統合されているわけではありませんが、Windows Server フェールオーバー クラスタリング (WSCF) と同等です。
ダウンタイムに対して許容される柔軟性が高い場合は、SQL エージェント経由のログ配布でウォーム スタンバイを提供できます。これは、サーバーの損失から復旧するために使用します。
SQL Server on Linux のもう 1 つのソリューションは、Kubernetes などのツールで調整されたコンテナー内で実行できることです。 オーケストレーション ツールによって、SQL Server を実行しているノードが常にあることが確実になります。 そのノードで障害が発生すると、別のインスタンスが自動的にブートストラップされます。 より堅牢な可用性が必要な場合は、Always On 可用性グループをコンテナーで実行できます。
その他の注目すべき機能
PolyBase
多くの組織は、さまざまなシステムにデータを保持しています。 おそらく、システムを選択したとき、または会社が別の会社と合併したとき、または他の歴史的な理由で、異なるチームが異なる要件を持っていた可能性があります。 従来、これらのシステム境界を越えてデータを統合して、ユーザーの質問に答えるのは困難です。
SQL Server に製品カタログの売上を記録するデータがあり、製品の製造コストを記録するデータが SAP HANA データベースにあるとします。 利益利益を分析するレポートを作成する場合は、両方のデータベースからの情報が必要です。 以前は、次のことができました。
- 抽出、変換、読み込み (ETL) パッケージを使用して、データベース システム間でデータを移行します。
- 両方のデータベースに対してクエリを実行し、その結果を結合して 1 つのレポートに統合するためのカスタム コードを記述します。
どちらの方法も複雑であり、正しく行うには、かなりの開発時間を必要とする場合があります。
PolyBase を使用すると、SQL Server で外部テーブルを作成できます。 外部テーブルは、外部システムとそこでホストされているデータ セットへの接続です。 作成後、クライアントから外部テーブルに、内部テーブルとまったく同じ方法でクエリを送信できます。
JOIN
クエリでは、外部テーブルのデータを内部テーブルと統合できます。 このように、PolyBase を使用すると、さまざまなシステムがデータに対して適用する境界を削除し、場所に関係なくビジネス データに対して必要な分析を簡単に行うことができます。
注
Linux オペレーティング システムでは、POLYBase は SQL Server 2019 以降のバージョンでサポートされています。 これを使用するには、SQL Server 2022 に加えて、 mssql-server-polybase
パッケージをインストールする必要があります。
Machine Learning サービス
機械学習では、大規模なデータセットを使用して複雑なシステムの動作をモデル化します。 システムの観察された動作を正確に予測するモデルを開発する場合。 このモデルは、そのシステムが将来どのように動作するかを予測するために使用されます。 高度なコード ライブラリ (多くの場合、オープン ソース) は、R 言語と Python 言語で開発されました。 これらのライブラリは、データセットの準備、特徴の追加、モデルのトレーニング、トレーニング済みモデルの精度の評価、および他のクライアントが呼び出すモデルのデプロイを行うことができます。
SQL Server Machine Learning Services を使用すると、SQL Server データベース内のデータに対して、これらの R および Python スクリプトを実行できます。 PyTorch、TensorFlow、Scikit-Learn などの一般的な機械学習とデータ サイエンス フレームワークを追加できます。
注
Linux オペレーティング システムでは、SQL Server Machine Learning は SQL Server 2019 以降のバージョンでサポートされています。 使用するには、別のパッケージを追加する必要があります。 たとえば、すべての機械学習コードに Python を使用する場合は、
mssql-mlservices-mlm-py-9.4.7
パッケージをインストールします。 R の同等の機能は、パッケージmssql-mlservices-mlm-r-9.4.7
をインストールすることです。
グラフのサポート
SQL Server では、グラフベースのデータの格納とクエリがネイティブでサポートされます。 SQL Server では、データが一連のエンティティ (ノード) とその間のリレーションシップ (エッジ) として格納されます。
フルテキスト検索
フルテキスト検索を使用すると、ユーザーはテキスト データに対して言語学の規則に則ったクエリを実行できます。 たとえば、run
という単語を検索すると、フルテキスト検索では、run
やran
などの単語running
の形式を含む結果が返されます。
既定では、この機能はインストールされません。 Linux では、mssql-server-fts
パッケージをインストールして有効にします。
ETL ワークロード
SQL Server Integration Services (SSIS) パッケージは SQL Server on Linux で実行できます。 これらは SQL Server on Linux に対しての実行に限定されていません。 これらのパッケージは、オンプレミスまたはクラウドの Windows 上で実行されている Microsoft SQL Server、またはコンテナー内で実行されている SQL Server にも接続できます。
SSIS パッケージは、SQL Server Data Tools を実行している Windows マシンで作成して管理する必要があります。