0

この投稿からさらに洞察を得ましたが、変数テーブルの最近の使用とそれに関連する tempdb の増加を十分に理解するのにまだ苦労しています。

私は最近、ストアド プロシージャとテーブル値関数の両方で変数テーブルを使用しています。変数テーブル v のローカル/グローバル一時テーブルの使用は、私が経験しているより大きな課題に影響を与える可能性のある領域の 1 つです。

このタイプの一時テーブルを使用して以来、tempdb は約 50 GB 以上の領域に成長し、exec sp_spaceused @updateusage=true次を使用してテーブルを検査するdatabase_size: 51935.13MB unallocated_space: 51908.80MBと、DB の内容をチェックすると、一時テーブルまたはシステム テーブルが存在しません。ref の場合、tempdb.ldf は非常に小さいです。

を使用してセッションの使用状況を調べるexec sp_whoと、接続が適切に閉じられないという問題が発生している可能性があると思われる睡眠を示す複数の行も表示されます。

さまざまな投稿や SO を読んだ結果、一般的なコンセンサスは tempdb と関連ファイルの縮小を試みないことであり、実際には、より断片化されたデータ ストレージに移動するよりも、根本的な問題を解決したいと考えています。

私の既存のアプローチがtempdbの成長に影響を与える可能性がある理由と、ローカル/グローバル一時テーブルの使用がより適切かどうかについてのアドバイスはありますか.

tempdb自体については、ストレージは安価ですが、この増加を確実に抑える必要があるため、メンテナンスに関するアドバイス(DBを複数のファイルに分割する、縮小する可能性がある、DBを別のドライブに移動する)などをいただければ幸いです。

4

1 に答える 1

0

tempdb データベース内のオブジェクトを調べて、何が起こっているかを知ることができます

次のコードは、tempdb 内のオブジェクトを一覧表示し、作成日と計算期間 (分単位) に基づいて昇順で並べ替えます。

use TempDb
go

SELECT 
 name ,object_id , SCHEMA_NAME(schema_id) obj_schema,
 type ,  type_desc,
 create_date ,  modify_date, 
 OBJECT_NAME(parent_object_id)  parent_obj ,
 DATEDIFF(hour,create_date , GETDATE()) duration_hour
FROM sys.objects  
where name  not like 'sys%'
order by create_date

tempDb のオブジェクトは、次の 3 つのグループに分類されます。

  • 内部オブジェクト
  • 外部オブジェクト
  • バージョン ストア

次のコードは、各カテゴリに割り当てられている tempdb ディスク領域の量を示しています。

SELECT 
SUM(user_object_reserved_page_count)/128.0 UserObjectsMB,
SUM(user_object_reserved_page_count) UserObjectPages_count  ,

SUM(version_store_reserved_page_count)/128.0 VersionStoreMB,
SUM(version_store_reserved_page_count) VersionStorePages_count, 

SUM(internal_object_reserved_page_count) InternalObjectPages_count, 
SUM(internal_object_reserved_page_count)/128.0 InternalObjectsMB,

SUM(unallocated_extent_page_count)/128.0 FreeSpaceMB,
SUM(unallocated_extent_page_count)  FreePages_count

FROM sys.dm_db_file_space_usage;

確認できます: local-and-global-temporary-tables-in-sql-server

tempdb のサイズは、ワークロードの実行中に増大しないように、毎日のワークロードとピーク時のワークロードに十分な大きさにする必要があります。

私のアドバイスは、必要な場合を除き、起動中またはその他の時間に tempDb を縮小しないことです。ストレージは安価で、tempDb 専用のストレージを割り当てることができます (SSD も)

詳細については:

tempdb の容量計画

tempdb パフォーマンスの最適化

于 2016-07-27T15:05:48.503 に答える