SQLリストアを高速化するためにサーバーに何を追加できますか?


8

現在、復元に約9時間かかる2.8 TBのSQLデータベース(主にデータファイル、約400 GBのログファイル)を持っています。このデータベースはテスト目的で使用され、常に同じポイントから開始するように、実行のたびに削除してバックアップから復元する必要があります。

私の質問は、サーバーには現在12コアと92 GBのRAMがあり、データベースが存在するRAID 5ディスクサブシステムが搭載されていることです。通常、SQL復元プロセスのボトルネックとなる領域は何ですか?それはディスク、メモリ、またはCPUですか?


3
どのバックアップメディアから復元していますか?ちなみに、RAID 5は他のほとんどのRAIDレベルと比較して書き込みペナルティが重いため、これはパフォーマンステストに最適ではない場合があります。
Chris McKeown 2013年

.bak(そのうちの8つが分割されている)は、復元先の同じRAID 5アレイ上にあります。これにより、将来的には、より適切に処理できることに気付きます。すべての.bakを保持するのに十分な大きさの別のアレイはありませんが、直接接続されている別のドライブに分割できる可能性があります。また、RAID 5についての良い点も承知していますが、ストレステストはまだ行っていないため、実際の負荷テスト中にディスクドライブでボトルネックが発生しても問題ありません。少し進んで、SAN、RAID 0、またはRAID 1 + 0を介してディスクのパフォーマンスを向上させます
Sean Long

2
確かにあなたが復元しているドライブにバックアップを持っていることによる過度の苦しみも。現在のRAID5にはいくつのディスクがありますか?
Mark Storey-Smith 2013

圧縮を使用していると思います。他にどのようなバックアップオプションを使用していますか?データはどのように分割されますか?ファイルグループ全体にデータをインテリジェントに分散できますか(変更されたデータでファイルグループのバックアップと復元を実行できます)?
swasheck 2013年

問題は、テストがデータベースの非常に大きな割合を占めるため、複数のファイルグループにわたって復元する必要があることです(そして、テストは、ワークロードのニーズと開発に基づいて変化します)。そのため、テストの構成を常に確認し、特定のファイルグループを復元する必要があります。これはオプションですが、多くの時間を節約できるかどうかはわかりません。
Sean Long

回答:


6

リストアの主なボトルネックは、ディスクIOです。これを修正するには、基本的に高速なディスクまたは別の構成が必要です。RAIDやSANについては、そこに何か提案するのに十分な知識がありません。SSDを検討することもできます。彼らは盲目的に速いです。定期的に再作成されないものには使用したくありません(tempdbは常にこれに適した候補です)。頻繁に復元しているので、問題ないかもしれません。一方、パフォーマンステストを行う場合は、テストサーバーを本番サーバーにできるだけ近づけることをお勧めします。

自分を助けるためにできることは他にもいくつかあります。まだの場合は、最初にバックアップを圧縮します。もちろん、これはSQL 2008以降を前提としています。バックアップを保存するためのディスク容量だけでなく、バ​​ックアップを読み取るためのIOも削減されます。CPUコストがかかるため、注意してください。また、データベースを削除せずに、データベースを復元してください。このようにして、ファイルはすでに配置されており、ファイルを作成するためのオーバーヘッドはありません。インスタントファイル初期化(サーバーレベルの権限)をオンにして、データファイルのファイル作成/成長を劇的に高速化できますが、ログファイルでは機能しません。


良い情報ですが、既存のものを復元する方がバックアップから削除/復元するよりも優れているとは思いませんでした。私たちはすでに圧縮を使用しており、復元を行うアカウントでファイルの即時初期化が有効になっていることを確認する予定です。私はあなたの答えの明確さを本当に感謝します、ありがとう!
Sean Long

SQL Serverを実行しているアカウントでも、ファイルの即時初期化がオンになっていることを確認してください。小規模なデータベースの場合は、それほど大きな問題にはならないかもしれませんが、何かを見ていると、大きな違いが生じる可能性があります。
ケネスフィッシャー

よかった。また、パフォーマンステストが必ずしもストレステストを意味するわけではないことを理解してくれたことに感謝します(現在のところ、運用環境の構成方法にかなり制限されています)。
Sean Long

OT:「SSDを検討してください。...定期的に再作成されないものに使用したくない」... なぜですか?
マーティン

彼らが失敗することについて私はまだ緊張しているでしょう。私が読んだすべてのものは、インスタンスが起動するたびに再作成されるtempdbのようなデータベースにそれらを使用すると述べていますが、通常のユーザーデータベースには使用しません。それは時間とともに変化していると確信していますが。
ケネスフィッシャー

7

バックアップと復元を行わないでください。SQL Serverスナップショットを使用します。スナップショットしたファイルと同じサイズのスパースファイルを保存するには、多くのディスク容量が必要ですが、ロールバックは数百倍高速です。

SQL Server EnterpriseエディションとSQL Server Developerエディションで利用できます。


これは良いアイデアであり、これがパフォーマンステストサーバー以外のサーバーである場合、それは素晴らしい方法のように見えます。ただし、ソースDBに追加のオーバーヘッドが発生するため、DBスナップショットは機能しないようです。行われているテストはパフォーマンステスト(負荷、ストレスなど)であるため、ストレスを引き起こす可能性のある外部からのテストは避けなければなりません。

個人的には、スナップショットを使用した場合のパフォーマンスの違いに気づきませんでしたが、コピーオンライトにはある程度のオーバーヘッドがあると思います。私は判断できないあなたのワークロードを知りません。
マークヘンダーソン

2
@SeanLong Markの提案は、おそらくシナリオに最適なオプションです。あなたが誤解していると思うのは、いつ、何をスナップショットを取るかです。テストサーバーでの計画は、ライブバックアップからテストデータベースを復元し、テストデータベースのスナップショットを作成し、テストサイクルを実行してから、スナップショットを元に戻し、すすぎと繰り返しを行うことです。定期的にステップ1に戻り、ライブバックアップを復元して再度テストできます。
Mark Storey-Smith

ああ、分かった。スナップショットを維持するには、テストデータベースから一定量のオーバーヘッドが必要であり、(非常に書き込み/読み取りが多い)ロードテストに影響を与えると考えました。ワークロードがディスクドライブでボトルネックを引き起こしているかどうかは気にしません。外部の要因(dbスナップショットが原因と考えていました)がそれを引き起こしたくないだけです。
Sean Long
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.