ジョブの下でストアドプロシージャ内で実行される大きなカーソルベースクエリがあります。これは、一日のうちに一束の市場データを計算するためのものです。このような繰り返しはすべて、ディスクからヒストリ・タイム・シリーズをプールし、適切な索引付けを使用してテンポラリ・テーブルに集め、中間結果を含む多数のtrunsformationに結合し、計算出力をディスクに格納します。各ループの終わりに、すべての一時テーブルを削除(ほとんど)または切り捨てて、tempdb内のユーザーオブジェクトのページの割り当てを解除し、次の反復の準備ができる名前空間を取得します。SQL Server:tempdb内の解放された内部オブジェクトのクリーンアップを強制して、開かれたセッション内で予約されたディスク領域を開放します。
私の問題は、DBエンジンがクエリの実行のために作成し、それらをtempdbにダンプするすべての内部オブジェクトです。トランザクションのコミット後に割り当て解除されたディスクスペースを確保します。また、新しい内部オブジェクトの次の束がディスクにスワイプされるたびに、すべてのサイクルで合計されます。
永続的なtempdb grouth、新規および新規の解放された内部オブジェクトに関連する予約済みスペースのすべてを永続化します。 DBエンジンは、procがサイクルを終了したときにセッションが終了した後にのみ、これらの膨大な量のディスクスペースを解放/縮小します。
各ジョブの実行サイクル数を減らすことで問題を解決できます。再起動するだけです。しかし私は完全な根本的な決定を望みます:セッション中にコマンドやトリックが必要なので、割り当てられた内部オブジェクトを完全に消去/消去し、それらのために予約されたtempdbディスクスペースを解放する必要があります。グーグルの時代は助けにはならなかった。フォークス、助けて!
gotqn、それはとてもいいです。私は、あなたのような別のセッションに分割することは、現在のDBエンジンの唯一の方法だと思います。私は、1つのproc内でセッションを再開することを夢見ています。これは、コーディングや連鎖がずっと簡単です。しかし、それも不可能です。ナッツ。誰もが文書化されていない隠された機能や他のハッピークソのハックを解明しなければ、私はあなたの投稿を答えにします – Globe