sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2016EnterpriseEditionのパフォーマンス上の利点

    2016年11月16日、MicrosoftはSQL Server 2016StandardEditionのいくつかの非常に重要な変更を発表しました。 SQL Server 2016 Service Pack 1(ビルド13.0.4001.0)。以前はEnterpriseEditionでしか利用できなかった非常に便利なプログラマビリティ関連の機能の多くが、Standard Edition(およびWebEditionやExpressEditionでも)で利用できるようになります。

    SQL Server 2016 Standard Edition Service Pack 1(またはそれ以前のエディション)を使用するデータベースアプリケーションを入手したら、Enterprise Editionへのエディションのアップグレードを実行するだけで、ソケットのライセンス制限が高くなることを利用して、スケーラビリティとパフォーマンスをさらに向上させることができます。 、コア、およびEnterprise Editionのメモリ(詳細はこちら)。

    また、Enterprise Editionに存在する他の多くの本質的なパフォーマンス上の利点に加えて、DBAのようにあなたの生活をはるかに楽にする複数の管理性の改善を得ることができます。

    列ストアインデックス

    Columnstoreインデックスを使用している場合、Enterprise Editionを使用すると、次のパフォーマンス上の利点が自動的に得られます。

    • 集約プッシュダウン: このパフォーマンス機能は、多くの場合、修飾アグリゲートをSCANノードにプッシュすることにより、2X〜4Xのクエリパフォーマンスの向上をもたらします。これにより、そのイテレーターから出てくる行の数が減少します。
    • インデックスのビルド/再構築: Enterprise Editionは複数のプロセッサコアで列ストアインデックスを構築/再構築できますが、StandardEditionは1つのプロセッサコアのみを使用します。これは、ハードウェアによっては、これらの操作の経過時間にかなり大きな影響を及ぼします。
    • ローカルアグリゲート: Enterprise Editionは、ローカル集計を使用して、SCANノードから渡される行数をフィルタリングし、後続のクエリノードで実行する必要のある作業量を削減できます。これは、クエリの実行プランのXMLで「ActualLocallyAggregatedRows」属性を探すことで確認できます。
    • 単一命令複数データ(SIMD)の最適化: この機能は、単一の命令でデータの配列を処理できる一連のハードウェア命令を使用し、集約操作を劇的に高速化します。これらのハードウェア命令は、すべての最新のプロセッサ(AVXをサポートしている)に存在しますが、EnterpriseEditionでのみ使用されます。
    • 文字列述語プッシュダウン: このパフォーマンス機能は、これらの述語をSCANノードにプッシュすることにより、文字列列で述語を使用するクエリのパフォーマンスを向上させることができます。これにより、後続のノードで実行する必要のある作業量を大幅に減らすことができます。
    • 並列度: バッチモードのクエリは、StandardEditionではMAXDOP=2に制限されています。 Enterprise Editionは、インスタンスに存在するすべてのコアを使用できます。これは、一般的な最新のサーバーハードウェアでの大規模なクエリで非常に重要になる可能性があります。
    • メモリ制限: Columnstoreオブジェクトプールは、StandardEditionではインスタンスあたり32GBに制限されています。 Enterprise Editionには、Columnstoreオブジェクトプールのメモリ制限はありません。

    これらのパフォーマンスアサーションをテストするために、IntelCorei7-6700KワークステーションのMicrosoftContosoRetailDWデータベースでかなり簡単なテストを実行しました。 SQL Server 2016 SP1の2つの名前付きインスタンスがインストールされています。1つはStandardEditionを使用し、もう1つはDeveloper Edition(Enterprise Editionと同等)を使用しています。

    すべてのインスタンスレベルとデータベースレベルの構成とプロパティは2つのインスタンス間で同一であり、ユーザーとtempdbデータベースファイルの場所は、インスタンスごとに同じ個別のフラッシュストレージデバイス上の個別のディレクトリにあります。どちらの場合も、データベースの互換性レベルは130に変更され、基盤となるWindowsの構成とハードウェアは両方のインスタンスで同じです。 ここでの唯一の違いは、各インスタンスのエディションです。

    最初のテストは、SQL Server 2016がFactOnlineSalesテーブルで集計プッシュダウンを使用できるようにする単純なクエリ(Niko Neugebauerから採用)です。結果を表1に示します。

    Edition 経過時間(ミリ秒)
    スタンダードエディション 30
    Developer Edition 1
    時差 29
    %改善 96.7%

    表1:プッシュダウンの集計比較

    次のテストは、1260万行のFactOnlineSalesテーブルにクラスター化列ストアインデックスを構築するのにかかる時間を計測することです。結果を表2に示します。

    Edition 経過時間(ミリ秒)
    スタンダードエディション 42,197
    Developer Edition 14,384
    時差 27,813
    %改善 65.9%

    表2:クラスター化された列ストアインデックスの比較の構築

    次のテストは、同じFactOnlineSalesテーブルでクラスター化された列ストアインデックスを再構築するのにかかる時間を計測することです。結果を表3に示します。

    Edition 経過時間(ミリ秒)
    スタンダードエディション 33,105
    Developer Edition 11,460
    時差 21,645
    %改善 65.4%

    表3:クラスター化列ストアインデックスの比較の再構築

    次のテストは、SQLServer2016がFactOnlineSalesテーブルでローカル集計を使用できるようにする別の単純なクエリです。結果を表4に示します。

    Edition 経過時間(ミリ秒)
    スタンダードエディション 122
    Developer Edition 83
    時差 39
    %改善 32.0%

    表4:ローカルアグリゲーションの比較

    次のテストは、SQLServer2016がFactOnlineSalesテーブルとDimPromotionテーブルで文字列述語プッシュダウンを使用できるようにする別の単純なクエリです。結果を表5に示します。

    Edition 経過時間(ミリ秒)
    スタンダードエディション 2,683
    Developer Edition 1,221
    時差 1,466
    %改善 54.6%

    表5:文字列述語プッシュダウンの比較

    これらは、同じハードウェア上のSQL Server 2016 Standard Editionと比較した、SQL Server 2016EnterpriseEditionの列ストアインデックスに組み込まれているパフォーマンス上の利点の簡単な例です。 Columnstoreインデックス(一部のワークロードでは非常に効果的な機能になる可能性があります)を実際に調べたい場合は、columnstore.netでNikoNeugebauerの長い一連の投稿をブックマークして読む必要があります。

    DBCCCHECKDBのパフォーマンス

    SQL Server 2016 Enterprise Editionに存在するもう1つの管理性のパフォーマンスの向上は、DBCCCHECKDBのパフォーマンスです。 Standard Editionでは、DBCC CHECKDBは1つのプロセッサコアのみを使用しますが、EnterpriseEditionで使用可能なすべてのコアを使用できます。この動作は、以前のバージョンのSQLServerから変更されていません。 SQL Server 2016では、DBCC CHECKDBが新しいWITH(MAXDOP =x)オプションで使用できるコアの数を制限できます。

    私が持っているやや大きなデータベース(約38GB)でWITHPHYSICAL_ONLYオプションを指定してDBCCCHECKDBを実行すると、表6に示す結果が得られました。

    Edition 経過時間(ミリ秒)
    スタンダードエディション 58,492
    Developer Edition 24,897
    時差 33,595
    %改善 57.4%

    表6:PHYSICAL_ONLYの比較を使用したDBCC CHECKDB

    同じデータベースで標準のDBCCCHECKDBを実行すると、表7に示す結果が得られました。

    Edition 経過時間(ミリ秒)
    スタンダードエディション 435,039
    Developer Edition 119,767
    時差 315,272
    %改善 72.5%

    表7:DBCCCHECKDBの比較

    DBCC CHECKDBパフォーマンスの非常に重要な要素は、データベースデータファイルが配置されているすべてのLUNからのシーケンシャル読み取りパフォーマンスです。これは、NULデバイスに対してBACKUP DATABASEコマンドを実行することで簡単に確認できます(必ずCOPY_ONLYおよびNO_COMPRESSIONオプションを使用してください)。これにより、私のワークステーションからのこの例に示すように、効果的なシーケンシャル読み取りパフォーマンスが表示されます。

    バックアップデータベースは、16.115秒(2447.502MB /秒)で5048514ページを正常に処理しました。

    このテストはすべて、単一のクアッドコアデスクトッププロセッサで行われたことに注意してください。より多くの合計プロセッサコアを備えたマルチソケットサーバーは、これらのテストの多くでさらに多くのパフォーマンスの向上を示します。

    このすべてのポイントは、同じハードウェア上でSQL Server 2016 StandardEditionSP1からSQLServer2016 Enterprise Edition SP1にアップグレードするだけで、データベースやアプリケーションを変更せずに、パフォーマンスの向上の具体的な例をいくつか示すことです。 。他にも多くの利点があるため、このリストは決して網羅的なものではありません。


    1. MicrosoftTreeViewControlチュートリアル

    2. PostgreSQLはJSON配列として結果セットを返しますか?

    3. 別のテーブルの番号に基づいて、1つのテーブルに複数の行を挿入します

    4. LOADDATAINFILEを使用してCSVファイルからMySQLデータベースに選択した列を挿入する方法