パフォーマンスに影響を与えずに大規模なSQL Serverデータベースをバックアップするにはどうすればよいですか?


18

クエリの実行が遅い、または早朝にタイムアウトになるというレポートがありましたが、これに影響を与えると思われる実行中のジョブは、データベースのバックアップジョブだけです。

データベース自体は約300 GBで、バックアップジョブは午前4時30分に開始され、午前7時過ぎまで終了しません。バックアップジョブの現在の構文は次のとおりです。

BACKUP DATABASE [DatabaseName]
TO DISK = N'E:\Database Backups\DatabaseName.Bak'
WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak',
NOSKIP, STATS = 10, NOFORMAT

E:\ データベースとデータベースバックアップの両方を保持するサーバー上のパーティションです。

また、これは専用のスタンドアロンサーバーではなく、仮想サーバーであることにも注意してください。仮想サーバーに切り替えた直後に、バックアッププロセス中に速度低下に関する苦情が寄せられるようになったので、関連があると思います。

このバックアップジョブを実行して、実行中のクエリのパフォーマンスに影響を与えない方法はありますか?

SQL Server 2005を使用しています

回答:


21
  1. システムの残りのI / OからバックアップI / Oを分離します。時間がかかり、しゃっくりする傾向がありますが、ローカルディスクではなくネットワーク経由でバックアップすることで、インスタンスへの直接的な影響を軽減できます。仮想マシンでも、SQL Serverが別のI / Oサブシステムに書き込むことができるように、他のストレージを公開できる必要があります。
  2. まったく違いはありませんが、これがジョブから実行される場合、なぜSTATSオプションを使用する必要がありますか?あなたは他のオプションを必要と確信していますか(NOUNLOADNOSKIPNOFORMAT)?オプションのマトリックス全体で大規模なパフォーマンステストを行ったことはありませんが、必要なオプションのみを使用してください。
  3. 通常のユーザーアクティビティを妨げない別の時間にフルバックアップを実行します。これは常に可能とは限りませんが、24時間年中無休の運用であっても、ピーク時間と一時停止時間があります。
  4. 2008+に移行すると、バックアップ圧縮を利用できます(2008年のEnterprise、2008 R2 +のStandardまたはEnterprise)。2008年に移行できない場合、または適切なエディションがない場合は、圧縮を行うサードパーティのバックアップツールがあり、それらはすべて非常に優れています。2008年以来、私はネイティブ圧縮を使用することができ、サードパーティにさらに投資する必要なく、速度と圧縮率の両方に非常に満足しています。しかし2005年には、Red-Gate SQL Backupで成功したことを覚えていますQuest LiteSpeedも非常に優れていますが、Dellの買収以来、どのような努力がなされているのかわかりません。
  5. データベースが完全復旧の場合は、完全バックアップ間を長くすることができますが、特定の時点まで復旧する必要がある場合、復元するログが増える可能性があることを認識してください。このオプションと、以下のAliの1週間の差分を取るという提案を組み合わせることができます。木曜日に復旧する必要がある場合は、1つの完全な差分、1つの差分、および差分以降のログを復元する必要があります。
  6. 古くて変化しないデータが大量にある場合は、異なる復旧計画を持つ異なるデータベース、または少なくとも異なるファイルグループでそれをホストし、そのようにバックアップ操作を分割することを検討できます。読み取り専用にすることができる参照またはアーカイブデータがあり、単純な回復中の場合は、それを独自の読み取り専用ファイルグループに移動し、一度バックアップして、夜間のバックアップに含める必要はありません。二度と。これらのMSDNトピックを参照してください。

断片的な復元の実行

例:一部のファイルグループのみの段階的な復元(単純復旧モデル)


システム内の残りのI / OからバックアップI / Oを分離することについてさらに学ぶために、正しい方向に私を向けることができますか?#3(バックアップの時間を変更する)はオプションではありません。バックアップを実行するのに午前4:30が最適な時間であり、2008年(#4)にアップグレードすることについて話しましたが、それが起こるとは思いません近いうちに。
レイチェル

あなたを正しい方向に向ける方法がわかりません-他のストレージを仮想マシンに公開できますか?
アーロンバートランド

はい、他のストレージを仮想マシンに公開できると思います。「システムの残りのI / OからバックアップI / Oを分離する」と言うとき、ディスクドライブではなくネットワークドライブへのバックアップを参照していますか?
レイチェル

3
いいえ、私は他のI / Oサブシステムにバックアップする意味以外に、あなたも同時に行っているディスクの読み取りと通常のデータベースとtempdbの活動のための書き込み。これは、同じサーバー上の別のディスクドライブ、別のマシン上の共有、SAN上の異なるLUNなどNAS、上の共有可能性
アーロン・ベルトラン

I断片的な復元は、考えていない素晴らしいソリューションです。投稿してくれてありがとう!
アリラゼギ

8

これは一般的な問題であり、複数の解決策があり、実際には環境に依存します。それらを見ていきましょう。

1-その場でのバックアップ圧縮

2008 R1でBackup CompressionはEnterpriseで使用可能になり、2008R2ではStandardで使用可能になりました。これは巨大です。時間を大幅に節約できます。アップグレードできる場合は、それを選択してください。できない場合は、RedGateのHyperBakユーティリティ、またはQuest LiteSpeedをご覧ください。両方とも無料試用版があります。

2-完全および差分バックアップ

2TBのprodデータベースを継承したため、24時間年中無休の大手インターネット企業で多くのタイムアウトが発生しました。完全バックアップと差分バックアップを有効にして、時間を大幅に節約しました。アクティビティが少ない日曜日の午前12:00にフルバックアップを取り、その週に差分を取ります。これは多くのスペースを節約しました。差分は、変更されたデータベースページで機能するため、トランザクションログとは異なります。変更されたページはすべてバックアップされます。したがって、完全な復元を行ってから、差分復元を行って変更されたページを追加します。

3-あなたのボトルネックは何ですか?

ボトルネック分析は診断にとって重要です。データファイルと同じディスクアレイにバックアップしていますか?データファイルが固定されていますか?バックアップ中のデータディスクのDISK SEC / READおよびDISK SEC / WRITEは何ですか?バックアップを変更して、4つのファイルを作成しました。各ファイルには独自のスレッドライターがあり、SANでうまく機能しました。テストして、4つのバックアップファイルを作成するだけで45分短縮できました。上記のディスクメトリックが低いことを確認してください。ベースラインを取得します。

4-別のサーバーに複製してバックアップする

これは少し高度です。レプリケートされたデータベースが最新であることを確認する必要があり、そのための適切な監視が必要です。そうであれば、レプリケートされたデータベースをバックアップするだけです。


HyperBakについて頭を上げただけで、2011年後半にVLDBをテストしたときにVLDBで何の利益も得られませんでした。RedGateと話をして、バグだと言いました。とにかく300GBがVLDBと見なされるとは思いませんが、期待どおりに動作しない場合は注意してください。
アリラゼギ

-1

次のパラメーターを使用できます。

ブロックサイズ-サイズ512、1024、2048、4096、8192、16384、32768、65536を選択します(KB単位)。

BUFFERCOUNT-バックアップ操作に使用されるI / Oバッファーの総数を指定します。任意の正の整数を指定できます。ただし、Sqlservr.exeプロセスの仮想アドレススペースが不十分なため、多数のバッファが「メモリ不足」エラーを引き起こす可能性があります。-MSDNから

MAXTRNASFERSIZE -65536バイト(64 KB)から4194304バイト(4 MB)


-3

それを試してみてください。大きなサイズのデータ​​ベースでタイムアウトが発生する問題を解決しました。

Private Sub Command1_Click()
On Error Resume Next
Dim con As New Connection
Dim tm As String
con.CommandTimeout = 500'''Command timeout should be 500


 With con
    .ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=dbiBMS;Data Source=192.168.103.4"
    .Open
 End With
 tm = CStr(Time)

con.Execute " backup database dbiBMS to disk='E:\Database_Backup\Test1.bak' with format "

con.Close
MsgBox tm
Exit Sub
x:
MsgBox Err.Description

End Sub

3
タイムアウトを500ミリ秒に設定しても、タイムアウトの期限切れの問題が解決するとは思わない。
vijayp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.