tempdbバージョンストアに関する質問


9

今日、エラーに遭遇しました:

エラー:3967、重大度:17

そして私が言うことができることから、それは基本的に「フルバージョンストア」です。私の店ではこれまでこのエラーに遭遇したことがないので、これは私が答えることが困難であったいくつかの質問を引き起こしました:

  • 事前設定された最大サイズ(tempdbの合計サイズなどに基づく)がある場合、それは動的ですか?

  • 動的でない場合に動的にする設定はありますか?

  • これに基づいてアラートを設定できますか?(すなわち、サイズの追跡などに使用するDMV)

回答:


7

重大度17は、SQL Serverが必要なリソースを使い果たしたことを示します。通常、これは、データベースのスペースが不足したときに発生します。この場合、tempdbにスピルする必要があるクエリの読み取りコミットスナップショット分離バージョン行にtempdbが使用されているようです。

tempdbの最大サイズが制限されており、たとえば非常に大きなクロスジョインを実行する、不適切に記述されたクエリが試行された場合、これはよくあることです。

このクエリを使用して、tempdbのバージョンストアの現在のサイズを確認できます。

SELECT *
FROM sys.dm_os_performance_counters dopc
WHERE dopc.counter_name LIKE 'Version %';

Technetのバージョンストアの使用に関する興味深い記事がhttps://technet.microsoft.com/en-us/library/cc966545.aspx#EDAAにあります

このMSDNページでは、エラー3967について言及しています。

tempdbの領域が不足すると、データベースエンジンはバージョンストアを強制的に縮小します。圧縮プロセス中に、行バージョンをまだ生成していない最も長く実行されているトランザクションは、被害者としてマークされます。メッセージ3967が各犠牲トランザクションのエラーログに生成されます。トランザクションが被害者としてマークされている場合、バージョンストアの行バージョンを読み取ることができなくなります。行バージョンを読み取ろうとすると、メッセージ3966が生成され、トランザクションがロールバックされます。圧縮プロセスが成功すると、tempdbで領域が使用可能になります。

上記でリンクしたどのページにも、tempdbのバージョンストアの最大サイズに関する明示的なアドバイスが含まれていないため、tempdb自体の最大構成サイズから、tempdbで使用されているスペースを差し引いたものが唯一の制限であると思います。他のオブジェクト。

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