SQL Serverのクラッシュ耐性を改善できますか?


20

定期的に電源が失われるSQL Server(2008 SP4および2016 SP1)を実行しているPCがあります。明らかに、これによりSQL Serverデータベースの(インデックス)破損が発生する場合があり、後で復元する必要があります。

SQL Serverはそのようなシナリオ向けに設計されていないことを認識しています。正しい解決策は、電力損失の原因を修正することです(興味がある場合は、以下で詳しく説明します)。それにもかかわらず、電力損失時のデータベース破損のリスクを減らすために設定できるSQL Serverのチューニングオプションはありますか?


背景:「PC」は、フォークリフトに搭載されたWindowsタブレットです。ユーザーがフォークリフトをオフにすると、タブレットの電源が切れます。私たちは、フォークリフトをオフにする前にWindowsを適切にシャットダウンするようにユーザーに教えようとしましたが、失敗しました(ほとんどの場合、それをオフにするだけで機能するためです)。現在、電力損失時にタブレットにシャットダウンするように信号を送るUPSを追加するなど、他のオプションも調査しています。

回答:


28

SQL Serverはそのようなシナリオ向けに設計されておらず、正しい解決策は電力損失の原因を修正することです[...]

実際には、電力損失に対処するように設計されています。そのため、先読みロギング(WAL)や起動時のクラッシュリカバリ(または任意のもの)のようなものがあります。これを行う方法の1つは、書き込みをキャッシュしないことを選択することです。これは、タブレットが実行しているように見えるため、破損です。

それでも、SQL Serverには、停電時にデータベースが破損するリスクを減らすために設定できるチューニングオプションがありますか?

いいえ、SQL Serverは必要なことを行っています。SQL Serverの外側(ドライブキャッシングのウィンドウ設定(SQLはオフにしたいが強制することはできません)、ハードウェア/ファームウェアの更新など)、またはEricが言ったように、比較的に外部電源を購入する必要があります安価で症状を解決できます(実際の問​​題はおそらく、実際にはバックアップされていない何らかのタイプのキャッシュまたはバッテリーバックアップの書き込みです)。



1
OSの問題である場合、どの設定が原因であるかはかなりよく推測できます。(推測するならこれはおそらく古い組み込みOSの1つですが、その設定も同様にチェックしていません)。そして、少なくともほとんどの一般消費者向けのハードディスクは、「パフォーマンス最適化の理由」で書き込みを完了したことを恥知らずにうそをつくので、基本的にそれらに希望はありません。
Voo

26

タブレットのバッテリーが正常に動作している場合、バッテリー残量が少ないときにシャットダウンするようにWindowsを構成できます

タブレットに動作しないバッテリーがある場合は、バッテリーの交換を検討してください。(私はそのようなラップトップを持っていました-あなたはeBayで安価な交換用バッテリーがどれほど安価であるかに驚かれることでしょう。それらはOEMと同様に動作しませんが、ちょっと、この状況では何よりも優れています。)

タブレットにバッテリー機能がない場合、 Windowsと通信してバッテリーで動作していることを通知できるUSB出力を備えた小さな無停電電源装置(UPS)を追加することを検討してください。(たとえば、UPSのバッテリー残量が少なくなるとシャットダウンするようにデスクトップを構成しているため、自宅にいない場合でも停電時にシャットダウンします。)

それらのいずれもオプションではない場合、あなたはちょっと運が悪いです。これは古いホワイトペーパーですが、Microsoft のSQL Server 2000 I / O Basicsは基本的に、停電を適切に処理できるI / Oサブシステムが必要であると説明しています。

遅延を増やすために使用できるオプションがあります- 遅延耐久性やメモリのみの(非耐久性)テーブルなど-デフォルトでは、SQL Serverはトランザクションログへの書き込みごとに信頼性を最大化するために既に最善を尽くしています。ランダムな停電のためにトランザクションログの書き込みでさえ保証できない場合は、UPSバッテリーに100ドルを費やしてください。


6

むらのある無線接続のために、サーバーではなくフォークリフトにローカルDBがあると仮定しますか?明らかに、フォークリフトからSQLを取得することが望ましい解決策です。

とにかく、ブレントが示唆したように、バッテリー電源または同様の基準でx分後にタブレット自体の電源を切るように設定します。

それに失敗すると、通常のシャットダウンを開始できる小さなUPSがその場合の最善策です。そのようなことをユーザーに頼ることは失敗することを求めています。


1
「むらのある無線接続のために、サーバーではなくフォークリフトにローカルDBがあると仮定しますか?」はい、まさにそうです。アプリケーションは、ローカルDBとサーバーDBの同期を維持します。これにより、フォークリフトはWLANでカバーされたエリアを離れても、引き続きアプリケーションを使用できます。
ハインジ

2

基盤となるOSは、書き込みの成功またはエラーが返されることを保証する必要があります。OSは、ドライバに依存し、ドライバは、ハードウェアに依存するファームウェアに依存します。ドライバ、ファームウェア、またはハードウェアのいずれかが、WindowsまたはSQL Serverがそれに対して実行できるものがない場合。

これが、ドライバー/ファームウェア/ハードウェアの製造元に確認する必要がある理由です。

また、すべてのレイヤーで書き込み順序を保証する必要があるため、同様にチェックする必要があります。

バッテリーでバックアップされたキャッシュでさえ失敗する可能性があります。たとえば、ニューヨークの暴風雨の間、一部のデータセンターに数日間アクセスできず、バッテリーが不足し、通勤した書き込みが失われる可能性があります

https://www.postgresql.org/docs/devel/static/wal-reliability.html

https://brad.livejournal.com/2116715.html

http://rhaas.blogspot.com/2010/10/wal-reliability.html?m=1


1

他の答えを展開するには:

まず、可能な場合はフォークリフトからSQLを取得してみてください。電力損失からの回復は悪いと考えてください。ラップトップが7,000ポンド以上になった後に実行してみてください。バックアップされていない数時間の倉庫活動があります...

第二に、ラップトップがバッテリーのx時間後に自動シャットダウンを実行するメカニズムがとにかく配置されるべきです。

第三に、ラップトップをフォークリフトの非スイッチ式電源に接続することはオプションですか?機械のバッテリーの消耗を避けるために、安全規制(環境ではフォークリフトキーですべてをオフにすることが必要な場合があります)と、フォークリフトが使用(特に週末と休日)の間にどのくらいの時間座っているかを考慮してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.