[FIX] 多数の Union 句を持つ場合、MERGE UNION が使用されない

この記事は、以前は次の ID で公開されていました: JP295037
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
20 以上の UNION ALL 句の分岐を使用するクエリは、より効率的な MERGE UNION ではなく、HASH UNION を使って実行されます。これは必要以上にメモリを使用する原因になり、その結果クエリの実行に失敗することがあります。このことは、24 個のノードで実行されている分散型分割ビューは、20 個のノードで実行されるビューとは異なり、効率が良くないプランを持つということを意味します。
解決方法
この問題を解決するために、SQL Server 2000 の最新の Service Pack の適用をお願いいたします。
最新の SQL Server サービスパックのダウンロードおよびインストールについて詳しくは以下をご覧下さい。

http://www.microsoft.com/japan/sql/download/default.asp (日本語版)
http://www.microsoft.com/sql/downloads/default.htm(英語版)
回避策
MERGE UNION のクエリ ヒントを使用して、この問題を回避します。実稼動環境で作業を行う前に、オプティマイザ ヒントが完全にテストされていることを確認します。
状況
弊社では、これを Microsoft SQL Server version 2000 の問題として確認しています。
この問題は、Microsoft SQL Server version 2000 Service Pack 1 で修正されています。
詳細

問題の再現手順

  1. クエリ アナライザでウィンドウを開きます。
  2. [クエリ] メニューの [実行プランの表示] をクリックします。
  3. 次のクエリを実行します。
    use Northwindgoselect top 1 * from(select orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union allselect orderid from orders union all select orderid from orders) xxorder by orderid
  4. [実行プラン] タブをクリックし、結果を確認します。
  5. クエリの次の行をコメントにします。
    union all select orderid from orders
  6. 編集したクエリを実行して、[実行プラン] タブでプランの変更箇所を確認します。
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 295037 (最終更新日 2001-06-29) をもとに作成したものです。

プロパティ

文書番号:295037 - 最終更新日: 01/16/2015 22:17:20 - リビジョン: 2.1

  • Microsoft SQL Server 2000 Standard Edition
  • kbnosurvey kbarchive kbbug kbfix kbsqlserv2000bug kbsqlserv2000sp1fix KB295037
フィードバック