タグ付けされた質問 「tempdb」

TempDBはMS SQL Serverの一部です。これは、一時テーブル、内部オブジェクト、および行バージョンのストレージ領域として機能するシステムデータベースです。


2
tempdbの成長の原因となったSQLステートメントを見つける方法
サーバー(SQL Server 2008)のtempdbは、毎月数回500 GB以上に増加します。この問題の原因となったSQLステートメントを見つけることは可能ですか?問題は通常によって引き起こされていないcreate table #temp...; insert into #temp...かselect ... into #temp...が、複合体が結合します。 一部のtempdbファイルの初期サイズも、毎回自動的により大きな値に設定されます。それを防ぐ方法は? キャッシュされたプランがファイルのサイズ変更/縮小を妨げる場合があります。どちらがtempdbを保持しているかを見つける方法は?

1
運用環境でTempdbを圧縮するベストプラクティス
この質問は、データベース管理者のStack Exchangeで回答できるため、Stack Overflowから移行されました。 5年前に移行され ました。 SQL Server 2008で一時データベースを縮小するときに使用するベストプラクティスは何ですか? 以下を使用するのは危険ですか? use tempdb GO DBCC FREEPROCCACHE -- clean cache DBCC DROPCLEANBUFFERS -- clean buffers DBCC FREESYSTEMCACHE ('ALL') -- clean system cache DBCC FREESESSIONCACHE -- clean session cache DBCC SHRINKDATABASE(tempdb, 10); -- shrink tempdb dbcc shrinkfile ('tempdev') -- shrink db file dbcc shrinkfile …


2
SQL Serverに使用可能な物理メモリが残っていない場合はどうなりますか?
グーグル検索中に、矛盾する情報を見つけました。 一部のサイトでは、データ用の物理メモリが残っていない場合、SQL Serverは既存のデータをTEMPDBに移動すると述べています(SQL Server:TempDbの説明と推奨事項を参照)。 しかし、他のサイトでは、十分な物理メモリが残っていない場合、オペレーティングシステムがPAGE FILEを使用して物理メモリからデータをそこに移動できると述べています(SQL Serverのページファイルを参照)。 SQL Serverが物理メモリを使い果たしたときにデータを書き込む場所はどこでしょうか?tempdbまたはOSページファイルに?それとも両方とも?

1
流出をtempdbにソートしますが、推定行は実際の行と等しくなります
最大メモリを25GBに設定したSQL Server 2016 SP2では、1分間に約80回実行されるクエリがあります。クエリにより、約4000ページがtempdbに流出します。これにより、tempdbのディスクで大量のIOが発生します。 あなたが見てとるときにクエリプラン(簡体クエリを)あなたは、推定行数は実際の行数と同じであるが、依然として発生こぼれることがわかります。したがって、古い統計が問題の原因になることはありません。 私はいくつかのテストを行い、次のクエリをTempdbにスピルしました。 select id --uniqueidentifier from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) しかし、別の列を選択した場合、流出は発生しません。 select startdate --datetime from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) そこで、id列のサイズを「拡大」しようとしました。 select CONVERT(nvarchar(512),id) from SortProblem where [status] ='A' order by SequenceNumber asc option …

1
TempDBの競合
SQL Server 2014 SP1にアクティブなOLTP 40GBデータベースがあります。IO_Completionの待機、ディスクキューの長さが900に上昇し、SQL Serverが応答を停止すると、クエリが遅くなることがわかりました。私たちが試したもの: インスタンスを再起動すると、すぐに同じように動作し始めます。 2回目の再起動後、各tempdbデータファイルの初期サイズを変更し(16個のデータファイルが作成されます)、正常に動作し始めました。 注:中間結果セットにはテーブル変数を使用しています。これらの結果セットは非常に小さいです。 それは月に2回起こりました。データファイルに手動で少しのスペースを追加するたびに、正常に動作し始めます。さらに興味深いのは、SQL Server 2008 R2とSQL Server 2012で同じセットアップ(同じハードウェア、同じフォルダーとファイルのセットアップ、同じワークロード)が正常に機能していることです。 恒久的な解決策を見つける手助けをしてください。 すべてのデータファイルの初期サイズは同じ1000MB、現在はそれぞれ1500MBです。すべて同じです。自動拡張はそれぞれ100MBです。これまでは、PFSおよびGAMページの競合に直面していましたが、16まで増加し、問題は解決しました。トレースフラグ1117と1118の両方が有効になっています。2つのNUMAノード上の24コア。すべてのデータファイルは同じボリューム上にあります。シンプルディスク、SANなし。 インスタンスは物理マシン上にあります。テーブル変数を使用したクエリとハッシュ結合を使用したクエリは、最も一般的にIO_Completion待機を生成します。 wBobによる詳細な回答により、さらに詳細に検索するようになりました。以前どのようにそれを見逃しましたか: データベース「tempdb」のファイル「templog」の自動拡張がユーザーによってキャンセルされたか、7704ミリ秒後にタイムアウトしました。ALTER DATABASEを使用して、このファイルのFILEGROWTH値を小さく設定するか、新しいファイルサイズを明示的に設定します。 これは、この種の問題が発生したときにログに記録されたものです。TempDBを別の高速ドライブに移動しています。

3
SQL Server 2012で大量のSQLクエリを実行すると、システムディスクのスペースが不足する
私はSQL Server 2012を初めて使用します。誰かが助けてくれればありがたいです。巨大なデータベースのコピーをSQL Server 2012に復元し、それに対していくつかの簡単なクエリを実行しようとしました。 136898115行のデータベーステーブルに対してSELECTクエリを実行しようとしています。このSELECTクエリには単純なWHERE句のみがあります。このクエリを実行するたびに、システムディスク(Windowsがインストールされているパーティション- C:\)の領域が不足するため(このパーティションには6GBの空き領域しかないため)失敗し、その理由はわかりません。tempdbは、14テラバイト以上の空き領域がある別のドライブ上にあると定義しました。もちろん、私のデータベースも別のドライブにあります。 システムパーティションの容量が不足する原因は何ですか?ページファイルですか?

2
どのセッションがどの一時テーブルを保持しているかを見つける
一時データベースがいっぱいになったSQL Server 2005データベースがあります。SQL Server Management Studioにアクセスすると、tempdbのすべての一時テーブルを確認できます。どのセッションがどの一時テーブルを保持しているかを知ることはできますか?理想的には、各セッションで使用される一時テーブルをリストするクエリです。 おかげで、

2
tempdbにファイルを追加するコンテキストでのホットスポットとは何ですか?
SQL Serverサービスを再起動せずにtempdbファイルをSQL Serverに追加できるかどうかを確認しようとしています。私はここでデータベース管理者にこの答えを見ました: Tempdbファイルの追加には再起動が必要 そして1つの答えは次のとおりです。 追加-停止は不要です。MicrosoftのSeanが指摘したように、SQLはより低い値のファイルを使用することを好みます。1つのデータファイルから追加する場合、SQLはしばらくの間新しいデータファイルを使用しますが、ファイルが1つしかない場合よりもパフォーマンスは低下しません。ただし、すでに2+があり、もう1つ追加すると、新しいホットスポットにホットスポットが追加され、パフォーマンスが低下します。 ただし、コメントでは次の点に注意してください。 「追加」の部分に補遺を追加します。「追加:いいえ。ただし、不均衡になる可能性が高いため、ホットスポットになり、事態がさら​​に悪化する可能性があります。」 私はそのコメントについて次の質問を持っていますが、その質問の回答のコメントを介してコメンターに質問するのではなく、自分の新しい質問(この質問)で質問するように指示されました。 具体的には: ホットスポットとは何ですか?(Google経由で情報を入手しましたが、ファイルを追加した後にtempdbでホットスポッティングを行うと何が起こるか詳細に説明しませんでした) ホットスポットはtempdbの状況をさらに悪化させますか? DBのどの特定のものがさらに悪化しますか?

1
一時テーブルを作成するストアドプロシージャの最後で一時テーブルを切り捨てるのはなぜですか?
SQL Serverは、ストアドプロシージャ内で作成された一時テーブルをキャッシュし、プロシージャが終了してその後実行されるときにそれらの名前を変更するだけです。私の質問は、tempdbスペースがいつ解放されるかに関するものです。手順の最後でテーブルが切り捨てられることを読みました。これはセッションごとに処理されることをコメントで読んでおり、クリーンアップが必要かどうかについての質問がMSDNで回答されています。しかし、同じセッションで2回実行されない場合はどうでしょうか? また、テーブルが範囲外になるとその領域を解放するバックグラウンドガベージコレクションプロセスがあることも聞いたことがあります。 それを作成するストアドプロシージャの最後で一時テーブルを切り捨てると、逆の期待にもかかわらず、truncateステートメントが使用されていない場合よりも、テーブルがtempdbでデータ用に使用するスペースがより速く解放されるようです。どうして? そのような切り捨てステートメントを使用するかどうかの相対的なパフォーマンスへの影響はどうなりますか?SNAPSHOT分離を使用する場合、tempdbにストレスがかかることがよくあります。tempdbで使用されているスペースをできるだけ大きなtempテーブルからできるだけ早く解放すると、tempdbの不必要な増大を防ぐことができると思います。この潜在的なスペース節約は、パフォーマンスを犠牲にして実現されるでしょうか? 以下に、問題を再現するためのコードを示します(主に@TheGameiswarから、いくつかの変更を加えたものです)。 SET NOCOUNT ON; GO ALTER PROC usp_test AS BEGIN IF object_id('tempdb..#temp') IS NOT NULL DROP TABLE #temp SELECT * INTO #temp FROM [dbo].[Event_28] -- This is a table with 15313 rows, using 35648 KB according to sp_spaceused --SELECT SUM(user_object_reserved_page_count) AS [user object pages used] …


1
大容量メモリ環境でのSQL Server TempDBの動作
この質問を読んで、私が少し前に持っていた質問を思い出しました。 512 GBのRAMを搭載したSQL Serverがあり、メインデータベースは450 GBです。TempDBには非常に多くのアクションがあります(わかりました、「かなり多くのアクション」だと思います-そうでないかもしれません!)。RamDisk Plus Serverのデモ版をインストールし、50GBのRAMドライブを作成し、TempDBを指定しましたが、パフォーマンスの改善はまったく見られませんでした。 TempDBへの書き込みは常にディスクへの実際の物理的な書き込みになりますか、それともWindowsファイルシステムキャッシュのような遅延書き込みのためにSQL ServerによってTempDBの書き込みがキャッシュされますか? このシナリオではラムディスクは無意味ですか? SQL Server 6.5がTempDB-In-Ramをサポートしていたことは知っていますが、それはずっと前に廃止されたようです!

2
RAMディスク上のSQL Server tempdb?
弊社のベンダーアプリケーションデータベースは非常にTempDBを集中的に使用しています。 サーバーは、SQL 2012 Enterprise SP3を実行する40コアおよび768GB RAMの仮想(VMWare)です。 TempDBを含むすべてのデータベースは、SANのTier 1 SSDにあります。tempdbデータファイルは10個あり、それぞれ1GBに事前に拡張されており、自動拡張されることはありません。70 GBのログファイルと同じです。トレースフラグ1117および1118は既に設定されています。 sys.dm_io_virtual_file_statsは、tempdbのデータとログファイルで過去1か月に50テラバイトを超えて読み書きされ、累積io_stallが250時間または10日であることを示しています。 過去2年間、ベンダーのコードとSPはすでに調整されています。 現在、大量のメモリがあるため、tempdbファイルをRAMドライブに配置することを考えています。tempdbはサーバーの再起動時に破壊/再作成されるため、サーバーの再起動時にフラッシュされる揮発性メモリに配置するのが理想的です。 低い環境でこれをテストしましたが、CPUが遅いtempdbドライブで待機するのではなく、より多くの作業を行っているため、クエリ時間は短縮されましたが、CPU使用率が増加しました。 他の誰かが、高oltp本番システムのtempdbをRAMに配置しましたか?大きな欠点はありますか?具体的に選択または回避するベンダーはありますか?

3
tempdbログファイルのベストプラクティス
tempdbデータファイルの構成方法に関するブログを何度も読みましたが、tempdbログファイルに関する情報は見つかりませんでした。 tempdbで現在使用している戦略は次のとおりです。 tempdbデータファイルを分割する方法について、Paul Randalの推奨事項を使用しました tempdbデータファイルのサイズを最大に設定し、自動拡張を無効にしました。たとえば、100 GBの空きディスク領域があり、8つのtempdbデータファイルのサイズをそれぞれ10 GBに設定します。これにより、Brent Ozarが推奨するディスクの断片化が防止され、ログファイル用に20 GBが解放されます。 しかし、私が言ったように、誰もtempdbログファイルについて話していません。どうすればいいですか?私のセットアップでは、このファイルはtempdbデータファイルと同じ場所にあります。tempdbログファイルで使用するサイズと自動拡張値は何ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.