Tempdbの成長に問題があります。 tempdbの設定を行うことで、すべての序文を説明します。
データベース/サーバー上でクエリが実行されていない場合でも、tempdbは最初は急速に、次に停止することなくゆっくりとサイズが増加し続けます。多くのクエリを実行して、何が実行されているかを確認しました。以下は、実際に使用できる結果が得られた以下のクエリの結果です。
見てわかるように、それらはすべて内部のspidです。tempdbが制御不能に成長し続ける理由とそれを軽減する方法を見つける方法はありますか?この問題の助けをいただければ幸いです。
--Query that returned the result set
SELECT session_id,
SUM(internal_objects_alloc_page_count) AS task_internal_objects_alloc_page_count,
SUM(internal_objects_dealloc_page_count) AS task_internal_objects_dealloc_page_count
FROM sys.dm_db_task_space_usage
GROUP BY session_id
HAVING SUM(internal_objects_alloc_page_count) > 0
では、最初に、データファイルの増加量が1 MBに設定されているのはなぜですか。 tempdbに20MB相当のデータを収容する必要がある場合、ファイルは個別に20回増加する必要があります。 200MBまたは2GBのディスクへの流出を必要とするクエリがある場合を想像してみてください。うわぁ。
成長イベントは、特に古いSAS/SATAストレージで、特に インスタントファイル初期化 を有効にしていない場合、コストがかかります。最も忙しいワークロードに対応できるだけの大きさになるようにファイルのサイズを事前に調整し、成長イベントを完全に回避する必要があります。これは常に実用的であるとは限りませんが、その代わりに、成長サイズをはるかに大きくする必要があります。これは、絶えず発生しているイベントではなく、まれで孤立したイベントにしたい場合があります。 tempdbを小さくして、最終的にはより多くのスペースを使用するようになるのは、どういう意味ですか?スペースを一時的に落札者にリースし、その後立ち退かせますか?
また、tempdbファイルが1つしかないのはなぜですか。これは一般的な競合の原因です。一般的に、同じディスク上にある場合でも、4つのファイルから始めることをお勧めします。これにより、特に複数の同時プロセスがオブジェクトを作成するか、tempdbの領域を使用しようとする場合に、競合を大幅に減らすことができます。また、トレースフラグ1117(すべてのデータファイルが同時に大きくなることを保証する)とトレースフラグ1118(エクステントの割り当てを変更する)を有効にすることも検討してください。以下のこれらに関するリンク。
もちろん、これはあなたの中心的な問題を解決しません-ディスクスペースの不足(または懸念)。システムの現在の使用状況(システムであろうとユーザーであろうと)をサポートするのに十分なディスク領域がない場合は、ディスク領域を増やすか、システムを移動します。あなたは犯人のいくつかを見つけることができるかもしれません(いくつかの一般的なものについてはこの回答を参照してください)、しかし、それらすべてを押しつぶすことはできません。
また、次のものが役立つ場合もあります。
また、Service Brokerを使用していることがわかったので、次の2つのページを読んで、会話がうまくいかない理由を説明してください。
あなたがリストした設定に基づいて、あなたのtempdbは私の意見ではめちゃくちゃ小さく設定されています。小さなインスタンスの場合は、1000MB
データファイルと500MB
ログファイルから始めてみてください。次に、自動拡張をデータの場合は100MB
に、ログの場合は50MB
に変更します。次に監視します。それでも頻繁な増加が見られる場合は、初期サイズをX10、増加をx2増やして、もう一度監視してみてください。 Tempdbは通常、ランダムに成長するだけではありません。何かがそれを使用しています。
これがあなたのパーソナルPCである場合、100MB
と50MB
をそれぞれ試してみてください。しかし、それでも、実際に作業しているときは、ある程度の成長が期待できます。
もちろん、これはすべて、tempdbに使用できるスペースに基づいています。私の本番サーバーのいくつかには100GB
のtempdbがあり、かなり大きくなっています。