数年前、マイクロソフトは、SQLServer2012およびSQLServer2014を構成して、より大規模で最新のサーバーハードウェアで重いワークロードを実行し、最高のパフォーマンスを実現する方法について、非常に役立つナレッジベースの記事を公開しました。同僚のAaronBertrandと私は、元のKB記事の審査で小さな役割を果たしました。このKB記事は、それ以来かなり最新の状態に保たれており、SQLServer2012/2014の便利な構成オプションの優れたリファレンスです。
それ以来、Microsoftは、SQLServer2016からSQLServer2012とSQLServer2014の両方に、十分に新しいビルドを使用している限り多くの非常に便利なパフォーマンスの改善をバックポートしています。 これらの古いバージョンのSQLServerのいずれか。 SQL Serverの以降のビルドで修正された問題が発生する可能性を最小限に抑えるために、サービスパックと累積的な更新プログラムの両方を事前に展開することをお勧めします。
追加のボーナスとして、この記事で説明するような新機能やその他の拡張機能も利用できます。ほとんどの場合、これらのパフォーマンスの向上を活用するには、トレースフラグを有効にする必要があります。
ダーティページマネージャー
1つは、SQLServer2012およびSQLServer2014でユーザーおよびシステムデータベースの間接チェックポイントを有効にすることと組み合わせたDirtyPageManager(DPM)の使用です。間接チェックポイントは、SQLServer2016で作成された新しいデータベースのデフォルトです。 SQLServer2016インスタンスの推奨構成。
グローバルトレースフラグ3449を有効にした場合 (SQL Server 2012SP3CU3以降またはSQLServer2014 SP1 CU7以降を使用している場合)、バックアップデータベース、バックアップトランザクションログ、データベースの作成、データベースへのファイルの追加、データベースの回復、データベースファイルの縮小、およびSQLServerの「正常な」シャットダウン中。トレースフラグ3449はすぐに有効になり、再起動は必要ありません。また、スタートアップトレースフラグとしてTF3449を設定する必要があります。
これらのFlushCache呼び出しを回避することは、データベースサーバーに大量のRAM(256GBを超える)がある場合に特に重要であり、使用中のバッファープールのサイズに応じて利点が増加します。この機能強化について詳しくは、次のブログ投稿をご覧ください。
次に、SQL Server2012SP4またはSQLServer2014 SP2(またはそれ以降)を使用している場合は、SQL Server2016で最初に導入された自動SoftNUMAパーティショニングや動的メモリオブジェクトスケーリングなど、他の多くの新しいパフォーマンス拡張機能を利用できます。 。
自動ソフトNUMAパーティショニング
SQL Server2012SP4とSQLServer2014 SP2の両方で、トレースフラグ8079を設定した場合 起動トレースフラグとして、SQL Serverはエンジンの起動中にハードウェアレイアウトをスキャンし、NUMAノードごとに8つ以上の物理コアを報告するシステムでSoftNUMAを自動的に構成します。自動ソフトNUMA動作は、ハイパースレッディング(HT /論理プロセッサ)に対応しています。つまり、IntelハイパースレッディングとAMDSMTの両方で動作します。最適なソフトNUMAノードのレイアウトを決定するとき、論理CPU情報が照会され、ソフトNUMAノード全体でパフォーマンスの変動につながる可能性のある論理のみのノードと物理のみのノードのグループ化を防ぐために使用されます。
現在のサーバープロセッサは、単一のNUMAノード内に最大32の物理コアを持つことができ、単一のハードウェアNUMAノード内でSMPのようなスケーラビリティの問題を明らかにする可能性があります。 Microsoftは、内部SQL Server 2016テストハーネスを使用すると、この機能によってパフォーマンスが大幅に向上すると主張しています。
「HT対応の自動ソフトNUMAを使用すると、自動ソフトNUMAを使用してDOPをソケット上の物理コアの数(この場合は12)に設定すると、クエリパフォーマンスが最大30%向上します。」
いつものように、本番環境で使用する前に、AutomaticSoftNUMAを使用してワークロードのパフォーマンスをテストすることをお勧めします。
動的メモリオブジェクトのスケーリング
SQL Server2012SP4とSQLServer2014 SP2の両方で、SQL Serverは、NUMAノードと論理プロセッサコアの数に基づいてメモリオブジェクトを動的に分割し、最新のサーバーハードウェアでより適切に拡張します。動的プロモーションの目的は、スレッドセーフメモリオブジェクト(CMEMTHREAD)がボトルネックになった場合に、それを自動的にパーティション化することです。
パーティション化されていないメモリオブジェクトは、ワークロードとボトルネックに基づいてNUMAノードによってパーティション化されるように動的にプロモートされ(パーティションの数はNUMAノードの数に等しい)、NUMAノードによってパーティション化されたメモリオブジェクトは、論理CPUコアによってパーティション化されるようにさらにプロモートできます。 (パーティションの数は論理CPUコアの数と同じです)。この機能拡張により、SQL2014SP2またはSQLServer2012 SP4をインストールすると、トレースフラグ8048が不要になります。
SOS_RWLockスピンロックの改善
SQL Server 2014 SP2には、SOS_RWLock操作のスピンロックの必要性を排除する改善があります(SQL Server 2016からバックポートされています)。 Microsoftは、この改善について次のように詳細に説明しています。
「SOS_RWLockは、SQL Serverコードベース全体のさまざまな場所で使用される同期プリミティブです。名前が示すように、コードは複数の共有(リーダー)または単一(ライター)の所有権を持つことができます。この改善により、SOS_RWLockのスピンロックが不要になり、代わりにインメモリOLTPと同様のロックフリー技術。この変更により、多くのスレッドがSOS_RWLockで保護されたデータ構造を相互にブロックすることなく並行して読み取ることができるため、スケーラビリティが向上します。この変更前は、古いスピンロックの実装では1つのスレッドのみがデータ構造を読み取る場合でも、一度にSOS_RWLockを取得します。」
また、SQL Server2012SP4とSQLServer2014SP2の両方で多くの便利な管理性の向上が得られます。これらの改善については、次のブログ投稿で詳しく読むことができます。
- SQL Server 2012 Service Pack 4(SP4)がリリースされました!
- SQL Server 2014 ServicePack2が利用可能になりました!!!
これらすべてからの重要なポイントは、SQL Server 2012(2017年7月11日に主流のサポートから外れた)を実行している場合はSQL Server 2012 SP4を使用し、SQLServer2014を実行している場合はSQL Server2014SP2以降を使用する必要があります。また、これらの改善を利用するには、該当するトレースフラグを有効にし、関連するデータベースプロパティを設定する必要があります。