Azure SQL Managed Instance のデータ整合性

適用対象:Azure SQL Managed Instance

MicrosoftはAzure SQL Managed Instanceのデータ整合性管理を担当しています。 従来のDBAによるSQL Serverのデータ整合性監視やデータベース破損からの回復技術は存在しますが、MicrosoftのSQLエンジニアリングチームは、一部の破損クラスを自動かつデータ損失なしに処理する新しい技術を開発しました。 サービスは、可能な限りデータ損失やダウンタイムを避けるためにこれらの技術を用いています。

この記事では、これらの手法の一部、その仕組み、そしてAzure SQL Managed Instanceでデータを保護するために取るべきステップについて懸念する顧客にどのような影響を与えるかを概説します。

Microsoftがデータ整合性を管理する方法

Azure SQL Managed Instanceでのデータ整合性を保護するには、複数の技術と進化する手法の組み合わせが必要です。

  • 広範なデータ整合性エラーアラート監視。 SQL データベース エンジンは、データの整合性に関する懸念を示すすべてのエラーや未処理の例外に対してアラートを発行します。 エンジニアリングチームはこれらのアラートを処理・調査しています。

  • I/Oシステムの「書き込み喪失」検出。 データベースエンジンは、物理的な破損問題の最も一般的な原因であるI/Oシステムの「書き込み喪失」を検出する追加機能を備えています。 この機能はページ書き込みとそれに関連するLSN(ログシーケンス番号)を追跡します。 ディスクからのデータページの後続の読み取りは、そのページの期待されるLSNと比較されます。 もしLSNにディスク上のものと期待されるものと不一致があると、そのページは古くなり、エンジニアリングチームに即座に警告が届きます。

  • 自動ページ修復。 一部のサービス層では、事業継続性の目的でデータベースのレプリカが提供されています。 サービスは自動ページ修復を活用しており、これは可用性グループで使われる技術に似ています。 もしレプリカがデータの整合性の問題でページを読み取れない場合、サービスは別のレプリカから新しいページのコピーを取得し、データの損失や顧客のダウンタイムなしに読み取れないページを置き換えます。

  • 保存時および転送時のデータ整合性 サービス内のすべてのデータベースは、 CHECKSUM 設定を使ってページ検証を行うように設定されており、この設定はページ全体のチェックサムを計算し、読み取り時に検証するためにページヘッダーに保存します。 トランスポート層セキュリティ(TLS)は、TCP/IPが提供する基本的なトランスポートレベルのチェックサムに加え、すべての通信にも使用されます。

  • バックアップと復元の整合性チェック。 Azure SQL Managed Instanceは、各サービス管理バックアップおよび復元操作中にページ検証を行います。 顧客主導の復元操作では、ソースデータベースの PAGE_VERIFY オプションが CHECKSUMに設定されている場合、ページ検証が行われます。 Azure SQL Managed Instanceサービス内のすべてのデータベースはCHECKSUM有効化されています。 問題が見つかれば、直ちにエンジニアリングチームに通知されます。

Microsoftがデータインテグリティインシデントをどのように扱うか

Microsoftは誤った結果や破損の事案を最も深刻に扱います。 同社はすべてのAzureエンジニアリングチームから24×365年体制のサポートを提供しています。 インテグリティインシデントを扱う際の目標は、利用不可を最小限に抑え、データ損失の量を最小限に抑えることです。

システムデータの整合性問題

Microsoftは顧客データやデータベースの可用性に影響しない問題を、顧客に通知せずに修正します。 例としては、自動ページ修復で解決できる問題や、顧客データやクエリ結果に影響を与えない内部データベースのメタデータやテレメトリの破損などがあります。

顧客データの整合性問題

Microsoftが誤った結果や顧客データ破損の問題を検出した場合、Microsoftは以下の措置を講じます。

  1. プライバシー法を遵守し、検出が確認された後できるだけ早く顧客に連絡を取るよう最善を尽くします。
  2. 連絡が取れた場合は、顧客と直接連携し、破損の範囲を説明し、回復オプションを示し、顧客が自分の用途や状況に最適な選択肢を選べるようにしましょう。
  3. 可能な限り、データ破損によって他のデータが予期せぬ変更を引き起こしたかどうかなど、アプリケーションへの影響範囲を顧客が理解するのを支援します。

Microsoftは顧客と連携して様々な方法や手順を用いてデータの破損を修復します。 顧客の承認なしにデータ損失を引き起こす可能性のある修復は試みません。 顧客はAzure SQL Managed InstanceでDBCC CHECKDB修理オプションを行えません。なぜなら、SINGLE_USERモードでデータベースを配置できないからです。 しかし、Microsoft SQLチームは以下の修復措置を取ることができますが、これに限定されません。

  • インデックスを再構築します。 例えば、ベーステーブルが破損していない非クラスタインデックスを再構築します。
  • 修復でデータ損失の可能性がない場合は、DBCC CHECKDB を使用して REPAIR_REBUILD を実行してください。
  • 修復によって一部のデータが失われる可能性がある場合は、DBCC CHECKDB を指定して REPAIR_ALLOW_DATA_LOSS を実行します。
  • DBCC CHECKDBでデータ整合性問題を修復できない場合、エンジニアはデータ整合性問題が発生する前のポイントインタイム復元を行い、その後トランザクションログから関連トランザクションを手動で再生することがあります。 この手法が適用される例としては、取引ログが破損し、すべての取引の自動再生を妨げる一方で顧客データが破損しない場合があります。

エンジニアリングチームは、誤った結果やデータの破損につながる問題について詳細な事後分析を行います。 チームは問題によって作成された修理項目を綿密に追跡しています。 これらの事後分析は、前述の「書き込み消失」機能を含む、多くの重要な改善につながりました。

顧客主導の整合性チェック

Microsoft管理のデータ整合性保護は、新たなデータ整合性の問題を早期に検出し、可能な限り修復します。 顧客主導の完全性チェックはDBCC CHECKDBDBCC CHECKDBデータベース全体に対する包括的な破損検出メカニズムであるため、追加の保護層を提供します。 DBCC CHECKDBMicrosoft管理のデータ完全性保護機能を補完します。

この広範囲かつ深さのある検出は、実行中に多くの時間と追加の計算・I/Oリソース DBCC CHECKDB 必要となります。 その結果、リソース競合によって DBCC CHECKDB 作業負荷に影響を与える可能性があります。

サービスが提供する監視と保護に加え、好きな頻度や時間で DBCC CHECKDB を実行でき、追加のデータ完全性保護と追加のリソース消費のバランスを取ることができます。

顧客からのフィードバックと進化する手法

Azure SQLエンジニアリングチームは、サービスのデータ整合性問題検出機能を定期的に見直し、強化しています。 データ整合性エラーは稀ですが、Azureサポートからの通知を受け取る前にエラーが発生した場合は、サポートケースを提出してください。

もしMicrosoftのデータ整合性戦略についてフィードバックがあれば、エンジニアリングチームはぜひご連絡ください。 この件についてフィードバックやコメントをエンジニアリング チームに送るには、https://aka.ms/sqlfeedbackをご覧ください。 皆様のフィードバックは、Microsoftが既存の改善や新たなデータ整合性保護機能を開発するのに役立ちます。