同じ巨大なテーブル (1 億 5000 万を超えるレコード)の 2 つの「インスタンス」間の結合から生成されたレコードを実行するようにカーソルを設定しようとしています。
次の例外メッセージが表示されます。
'PRIMARY' ファイル グループがいっぱいであるため、データベース 'tempdb' のオブジェクト 'dbo.SORT 一時実行ストレージ: 165282123350016' にスペースを割り当てることができませんでした。不要なファイルを削除するか、ファイル グループ内のオブジェクトを削除するか、ファイル グループにファイルを追加するか、ファイル グループ内の既存のファイルに対して自動拡張を設定して、ディスク領域を作成します。
この理由を知っている方はいらっしゃいますか?または、以下のクエリをより効率的にするにはどうすればよいですか?
DECLARE CURSOR
と最初の の間のどこかで発生することがわかりましたが、それが間にあるFETCH NEXT
かどうかはまだわかりません...
DECLARE CURSOR
とOPEN
または間
OPEN
そして最初のFETCH NEXT
。
詳細: SQL ステートメントは次のようになります。
DECLARE cData CURSOR LOCAL FORWARD_ONLY READ_ONLY 為に 選択する ... HugeTable HT1 から HugeTable HT2 に参加 .. 表 3 を結合 .. 表 4 を結合 .. 表 5 を結合 .. どこ ... HT1..., HT1... で注文 INSERT INTO SysLog (説明) 値 ('A') cDataを開く BEGIN TRANSACTION プロセスデータ -- 現在、ここで新しいロギングを試みています: -- SysLog に挿入 (説明) 値 ('B') cData から NEXT をフェッチ ... INSERT INTO SysLog (説明) 値 ('C') ...など
最後に取得したログ メッセージは「A」で、1 時間後に上記のメッセージで失敗し、「C」に到達しません。現在、ポイント「B」でログを記録しようとしています。
リクエストに応じて、正確な sql 式を投稿します。
DECLARE cSource CURSOR LOCAL FORWARD_ONLY READ_ONLY 為に SELECT MD.sFieldName, MD.sFieldValue、 TR.sTargetDataType、 MD2.sFieldValue AS sUniqueID、 TR.sTargetTableName、 TR.sTargetFieldName、 I.iRefCustomerID、 I.iInterfaceID、 IL.iRefInterfaceSessionID マスターデータ MD から JOIN マスターデータ MD2 ON MD.iRowIndex = MD2.iRowIndex AND MD.iBatchNumber = MD2.iBatchNumber AND MD.sTableName = MD2.sTableName AND MD2.sFieldName = 'sUniqueID' JOIN SourceTargetRelation TR ON MD.sFieldName = TR.sSourceFieldName AND MD.sTableName = TR.sSourceTableName JOIN インターフェイスログ IL ON IL.iInterfaceLogID = MD.iBatchNumber JOIN インターフェイス I ON I.iInterfaceID = IL.iRefInterfaceID AND TR.iRefSystemID = I.iRefSystemID どこ MD.iBatchNumber = @iBatchNumber ORDER BY MD.sTableName、MD.iRowIndex
Quassnoi からの更新された回答の後、元のインデックスもテーブルに投稿します。
このテーブルには、列iBatchNumber
、、、、sFieldName
の非クラスター化インデックスがあります。そして、そのインデックスには含まれる列があります。sTableName
iRowIndex
sFieldValue
Quassnoi が提案したように (そして、今ではその理由を理解していると思います)、インデックスを変更して、列が 、 、 、 の順序になるようiBatchNumber
にsTableName
しiRowIndex
ましsFieldName
た。そして、私sFieldValue
は含まれている列として使用します。実行計画にはもう何も含まれておらずSORT
、実行計画のステップ数は元の半分以下です。これも高速であることを願っています...