問題タブ [tempdb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - SQL Server が「データベース 'tempdb' のトランザクション ログが 'NOTHING' のためにいっぱいです」をスローする原因を解決するにはどうすればよいですか?
SQL Server は何も入っていないと文句を言いますが、それは他の何かでいっぱいになるよりはましだと思います。この質問には、非常に興味深い回答がいくつかあります。特に、Steven によるものです。
ただし、彼が提供したスクリプトを実行すると、log_reuse_wait_description 列のエントリとして TRANSACTION または BACKUP が表示されるのではなく、"NOTHING" と "CHECKPOINT" しか表示されません。 "。「最後の完全バックアップ」の値もすべて同じです - 2014 年 10 月 31 日 - ほぼ 1 年半前です。
私は長い間DB管理者ではないので、これらが何を意味するのか、または最も重要なこととして、エラーメッセージの発生を防ぐ方法がわかりません。
この「何もない」エラーが発生しないようにするために、C# 側からできることはありますか?
エラーメッセージ全体は次のとおりです。
日付: 2016 年 3 月 7 日午後 2:24:45 メッセージ: 2016 年 3 月 7 日月曜日: 例外メッセージ: データベース 'tempdb' のトランザクション ログは、'NOTHING' のためにいっぱいです。例外ソース: .Net SqlClient データ プロバイダー例外 StackTrace: System.Data.SqlClient.SqlConnection.OnError (SqlException 例外、ブール値 breakConnection、アクション) で
1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
1 wrapCloseInAction) で System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) で System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() で System.Data.SqlClient.SqlDataReader.get_MetaData() で System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) で System.Data .SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite,System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStream、String メソッド、TaskCompletionSource`1 完了、Int32 タイムアウト、Task& task、Boolean asyncWrite) で System.Data.SqlClient. SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior runBehavior、Boolean returnStream、String メソッド) で System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 動作、String メソッド) で System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 動作) で System. System.Data.Common.DbDataAdapter.FillInternal(DataSet データセット、DataTable[] データテーブル、Int32 startRecord、Int32 maxRecords、String srcTable、IDbCommand コマンド、CommandBehavior 動作) System.Data.Common.DbDataAdapter.Fill(DataSet dataSet、Int32 startRecord、Int32 maxRecords、String srcTable、IDbCommand コマンド、CommandBehavior 動作) System.Data.Common ReportRunner.SharedCode.SQLDBHelper.ExecuteSQLReturnDataTable(String sql, CommandType cmdType, SqlParameter[] parameters) の .DbDataAdapter.Fill(DataSet dataSet)ExecuteSQLReturnDataTable(String sql, CommandType cmdType, SqlParameter[] parameters)ExecuteSQLReturnDataTable(String sql, CommandType cmdType, SqlParameter[] parameters)
したがって、そのメッセージで参照されている私のコードは ExecuteSQLReturnDataTable() です。これは次のとおりです。
問題を軽減または排除するために、このコードに追加できるものはありますか?
sql-server-2012 - SQL Server は毎回再起動時に TempDB の mdf ファイルを再作成しますか?
TempDB
SQL Serverは、サーバーが再起動されるたびにデータベースのプライマリ ファイル、セカンダリ ファイルを再作成しますか? それとも、サーバーが再起動するたびに.mdf
、またはログ ファイルを更新するだけですか?.ndf
sql - 可変テーブルの使用、tempdb の増加、db セッションのスリープ
この投稿からさらに洞察を得ましたが、変数テーブルの最近の使用とそれに関連する 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を別のドライブに移動する)などをいただければ幸いです。
sql-server - tempdb がいっぱいでクエリを終了する
十分な tempdb が利用できない場合にエラー メッセージが返されるように、ほとんどのクエリを実行したいと考えています。
これを行う方法はありますか?
tempdb に空き領域ができるまで待機する既定の動作。しかし、他のプロセスが tempdb を同時に消費している場合、それらは互いにデッドロックするため、これは役に立ちません。
sql-server - TempDB のどのテーブルが最も多くのスペースを消費したかを調べる方法は?
私は正確な 問題に直面しており、提案された解決策を試してみることを考えています。
TempDB
最大サイズのテーブルをクエリする方法、または tempdb 内のすべてのテーブルをそれぞれのサイズで一覧表示するクエリがあるかどうか疑問に思っています
sql-server - 履歴から一時データベースが完全なドライブを埋める原因となったSQLを見つける方法は?
temp が配置されたドライブが temp でいっぱいになっていることに気付きました。それは 2 日前に発生しました。temp do が大きくなる原因となっている SQL を見つける方法はありますか。250 GB のドライブが既にいっぱいになっているため、それ以上のスペースを取得できなかったため、SQL は失敗しました。