SQL Server 2K / 2K5 / 2K8およびソリッドステートディスク:特定の最適化?


9

ソリッドステートドライブでSQL Serverを実行している人はいますか?特定の最適化のヒントを見つけましたか?SQL ServerがSSDのパフォーマンス、特にMLC SSDドライブの宿敵であるため、SQL Serverが小さなランダム書き込み操作を実行する頻度を減らす方法に特に興味があります。

もちろん、いくつかの明らかな最適化があります。読み取りが多いデータはSSDから提供し、書き込みが多いデータは従来の回転ディスクに任せる必要があります。もちろん、これにはトランザクションログも含まれます。

もちろん、十分な予算があれば、X25-EやVertex ExシリーズなどのSLC SSDディスクや、さまざまなエンタープライズレベルの製品を使用することもできます。しかし、MLC SSDのセットアップに役立つヒントにも興味があります。面白いところだと思います。私のクライアントのクライアントの1つは、予算が少なく、データセットが非常に大きくなっており、適切なレベルのパフォーマンスを維持するために、100に近いクエリの完全な書き換えに直面しています。ただし、RAMとSSDのスペースが500ドル未満の場合、開発者の数千ドル(おそらく数万)に相当する開発者の時間よりもパフォーマンスが大幅に向上する可能性があるという疑惑があります。

回答:


3

SQL Serverが行う小さくランダムな書き込みの量を減らすことで、どういう意味かわかりません。SQL Serverは、チェックポイント中にのみデータページを書き込みます。書き込み回数を制限する唯一の方法は、チェックポイント間隔を変更するか、IUD操作をあまり行わないことです。他の意味ですか?

私が見た(一握りの)SSDのすべての実装では、それはあなたが示唆しているものの逆のようなものです-SSDの最良の使用は、書き込みが多いトランザクションログとtempdbであるようです-基本的に私が最大のものはどこですか/ Oサブシステムがボトルネックになり、SSDをそこに固定します-シーク時間とレイテンシが低い定数に減少するためです。

MSが作成したこのリサーチペーパーをチェックしてください(残念ながら、SQL Serverの詳細についてはそれほど詳しくありません):サーバーストレージのSSDへの移行:トレードオフの分析

お役に立てれば!


MSの記事へのリンクをありがとうございます。具体的にはイライラするほど短いですね。:)残念ながら、小さなランダム書き込みは確かにSSDに適合させることができるものです。簡単に言えば、小さな(つまり4KB)書き込みでも、SSDはブロック全体をメモリに読み取り、変更して、書き戻す必要があります。これは、最新世代のフラッシュメモリが機能する方法です。優れた
ジョンローズ

2

SQL ServerのIO特性を変更することはできません。データファイルのディスクアクセスの基本単位は、8Kbページです。チェックポイント中に主に書き込みますが、可能な場合は遅延書き込みも行います。
SQLはデータディスクへの書き込みが完了するのを待たずに戻ります。完了する必要があるのはログの書き込みのみです。ディスクにデータベースログを1つだけ保持できる場合、それは順次書き込みであり、通常の高速ハードディスクでは問題ありません。
SQLの観点から見たパフォーマンスへの影響は、ディスクを読み取る必要がある場合です。より多くのメモリを割り当てることができる場合、SQLはメモリ内により多くのデータページを保持します。これは、あらゆる種類のディスクやSSDなどよりも高速です。もちろん、適切なインデックスを作成することで、ディスク読み取りの数を減らすこともできます。SSDもこれらの読み取りに役立つと思います。これらはランダムであり、ドライブヘッドの移動を待機している可能性が高いためです。
ここで話しているデータベースのサイズはわかりませんが、HyperOSを調べてみてください。彼らは、バックアップとしてSSDまたは2.5インチディスクを使用して、実際にはDDR2ラムスティックの単なるロードであるSATAディスクを作成します。その場合、サーバーのアクセスパターンは重要ではありません。私はこのようなものにログを配置しません。ログはデータの一貫性を保つものであり、信頼できる媒体に保存する必要があり、バックアップSSDとバッテリー、サーバーにおそらくUPSなどがあるにも関わらず、実際のハードディスクにログが保存されないことに不安を感じますある種の障害耐性のあるRAIDアレイでは。


1

ヘッドシークレイテンシのため、小さなランダム操作は従来のディスクの宿敵です... SSDはまさにこれに対処するのに優れています。

長いシーケンシャル操作では、標準ディスクのパフォーマンスは非常に高いため、SSDを使用する目的はありません(もちろん、パフォーマンスの観点から)。


2
SSDは、シークレイテンシがほぼゼロであるため、ランダム読み取り操作で優れています。SSD書き込み操作には、フラッシュブロック全体(通常は128KB)の読み取り、内容の変更、およびブロック全体のフラッシュへの書き込みが含まれるため、ランダム書き込み操作の利点はあまりありません。長いシーケンシャルオペレーションに関しては、より優れたコンシューマーレベルのSSD(Intel、OCZ Vertex、Samsung)が、200MB /秒を超える読み取りと80MB〜150MBの書き込みを達成し、単一の回転ディスクが生成できる容量をはるかに超えています。
ジョンローズ

本気ですか?書き込み操作でデータブロックを読み取ってから再度書き込む必要がある理由がわかりません。書き込むデータはコンピューターのメモリにあるはずですよね。
マッシモ

2
@Massimo:OSは数バイトしか書き込みませんが、SSDは128KB(通常)の単位(ページ)で機能します。128KBのページのみを書き込むことができます。したがって、ページの中央などを変更すると、ドライブはページ全体を読み取り、中央を更新してから、通常は別の場所に新しいページを書き込み、古い場所を無効にします。
クリスティアンCiupitu 2009年

Cristian Ciupituは正しいです。一部のSSDでは、オンボードキャッシュ(Indilinxコントローラーを使用するすべてのドライブに64MBのキャッシュがあると思います)と、有効になっている場合はオペレーティングシステムの書き込みキャッシュによって、これは軽減されます。ただし、64MBのキャッシュにも制限があります。大量の書き込みを行うデータベースサーバーの場合、64MBでは不十分な場合があります。ファームウェアの製造元は多くの詳細をリリースしていませんが、より優れたファームウェア(Intel、Indilinx)がインテリジェントな並べ替え/バッチ処理を実行して、128KBページ内に小さなランダム書き込みを保持し、このオーバーヘッドを最小限に抑えると想定しています。
ジョンローズ

キャッシュについての私の理解から、それはあなたがとても心配しているこれらの小さな書き込みの多くをあなたに救います。データベースは多くの線形読み取り/書き込みを行うように設計されているので、それはそれほど重要ではありません。SSDは、連続読み取りではなく、線形読み取りであるため、より適切に機能すると思います。データとSSDの間にまだギャップがあるということは、シーク時間を取り除くことになります。
2009

0

ここにはまだコメントスレッドに追加するポイントはありませんが、SSD上の何かのDBのページサイズ/マルチ読み取りカウントをSSDのページサイズの倍数に設定した場合、これは問題にはなりません。

私はSQL Serverに長い間取り組んでいないので、これらのオプションがそこで利用できるかどうかはわかりません。私はここ数年、OracleとDB2を使用してきましたが、DBがディスクの特性に適切に調整されるので、これで問題が解決します。


0

データベースファイルが格納されているパーティションを調整することをお勧めします。

また、perf(ldfおよびTempDB)のRAID 0で何を行うかを決定し、重要なデータをRAID 1(mdf)に配置することをお勧めします。

3番目に、ドライブのファームウェアとSATAコントローラーのファームウェア/ドライバーを更新する必要があります。そうすることで、ハードウェア会社とその開発者にパフォーマンスを最適化する機会を与えることができます。


RAID 0をデータベースサーバーに使用しないでください。単一のドライブに障害が発生すると、ディスクが交換され、不足しているデータがテープから復元される(これにはログが含まれます)まで、データベースは停止しています。
mrdenny、2009

お金が問題にならない世界では、すべてがバッテリーでバックアップされたL1キャッシュで実行されます。銀行業界では、LDFファイルはmdfと同じくらい重要です。科学計算では、MDFは100%である必要がある唯一のファイルです。
GregC 2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.