現象
Microsoft SQL Server 2016 環境では、テーブルの複数のパーティションを並列で処理します。 進行状況を追跡すると、少なくとも1つの列に対して再エンコードイベントが発生します。この状況では、例外エラーで処理が失敗することがあります。 場合によっては、処理が正常に完了することもありますが、後続のクエリは、次のような例外エラーで失敗します。
予期しない例外が発生しました。予期しない例外が発生しました。 (Microsoft SQL Server 2016 Analysis Services)プログラムの場所: Analysisservices.databases では、という形式で接続します。 Analysisservices.databases の IDataParameterCollection (Analysisservices.databases behavior) を CommandBehavior の ExecuteReader (CommandBehavior behavior) と共に analysisservices.databases (ExecuteReader の ICommandContentProvider) の QueryBuilderClientControl (ThreadExecution behavior) を呼び出します。 (behavior) を () で実行します。 () は () のようになります。 () ()
注: 処理が完了して処理されたデータに対してクエリが実行された後に、この問題が発生する場合があります。
解決方法
累積的な更新プログラムの情報
この問題の修正プログラムは、SQL Server の次の累積的な更新プログラムに含まれています。
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
回避策
この問題を回避するには、次のいずれかの操作を行います。
-
再エンコードが必要な列を特定し、最初にフェイクパーティションを使って、検出フェーズでハッシュエンコードを強制的に適用する値を生成します。 偽のパーティションは、並列処理が開始される前にエンコードを選択するために使用されるものである必要があります。 すべてのパーティションが処理された後、フェイクパーティションを消去または削除することができます。
-
並列処理の代わりに逐次処理を使用します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
詳細情報
表形式のパーティションの並列処理には、次のようなロジックがあります。
-
1つのパーティションのデータを使用して、列のエンコード (いずれかの値またはハッシュ) を決定します。
-
エンコードが選択されると、他のパーティションは並列処理を開始できます。
-
値のエンコードが選択されていて、行がフェッチされている場合、値のエンコードスキームに適さない値が検出されることがあります。 この場合、列全体をハッシュエンコードスキームに再エンコードする必要があります。
-
この再エンコード操作 (値のエンコーディングをハッシュエンコードに変換) では、他のパーティションが同時に処理されているときに問題が発生します。
参照情報
ソフトウェアの更新を説明するために Microsoft が使用する 用語 について説明します。