3

データベースが与えられた場合、クエリは 99% の確率で正しい出力を返しますが、1% の確率で間違った出力を返します。考えられる理由は何ですか?

4

3 に答える 3

2

クエリが「間違った」または「予期しない」結果セットを返す理由はいくつかあります。

  1. 「間違った」データがデータベース/テーブルに追加されました。
  2. クエリは、コミットされていないレコードまたはファントム レコードを読み取ります (データベースの分離レベルを参照)
  3. データがまだインデックス化されていない可能性があります (フルテキスト インデックスの場合)、またはフルテキスト サービスがインデックスを再構築しています。
  4. クエリに ORDER BY 句がなく、システムの負荷が高い。この場合、「メリーゴーランド スキャン」が観察されることがあります。

たとえば、500,000 ページのテーブルがあるとします。UserA は、テーブルのスキャン (およびいくつかのレコードの取得) を必要とする Transact-SQL ステートメントを実行します。そのスキャンで 100,000 ページが処理されると、UserB は同じテーブルをスキャンする別の Transact-SQL ステートメントを実行します。データベース エンジンDatabase Engine は、100,001 以降のページに対する一連の読み取り要求をスケジュールし、各ページの行を両方のスキャンに渡します。スキャンが 200,000 ページに達すると、UserC は同じテーブルをスキャンする別の Transact-SQL ステートメントを実行します。200,001 ページ以降、データベース エンジンは、読み取った各ページの行を 3 つのスキャンすべてに渡します。500,000 番目の行を読み取った後、UserA のスキャンが完了し、UserB と UserC のスキャンがラップバックして、ページ 1 から始まるページの読み取りを開始します。データベース エンジンが 100,000 ページに達すると、UserB のスキャンが完了します。その後、UserC のスキャンは、200,000 ページを読み取るまで単独で続行されます。この時点で、すべてのスキャンが完了しました。この最適化の詳細については、次を参照してください。メリーゴーランドスキャン

  1. 分散データベースの場合、データベースの異なるコピーに対してクエリを実行できます (「データベース ロード バランサー」のため)。そのため、レプリケーション手順中、一部のデータベース コピーは、ある時点で異なるデータを持つ場合があります。

他のアイデアが出てきたら、投稿を更新します。

于 2012-06-30T04:48:13.533 に答える
1

たぶん彼らは特殊文字のチェックを入れておらず、1%の時間のユーザーが特殊文字を挿入できると思います。

于 2012-06-14T05:39:18.797 に答える
0

キャッシュ、同期/複製、リソース不足など

于 2012-04-25T11:40:01.737 に答える