web-dev-qa-db-ja.com

SQL Server 2012 DBCC memorystatusの情報が間違っています。どうすれば修正できますか?

私は、Windows 7 64ビットマシンで、16 GBのRAM、24 GBのページファイル、500 GBのHD、SQL Server 2012 Standard Edition 64ビットを実行しています。

5分の起動で、すべての仮想メモリを定期的に使用し、私のマシンで警告をトリガーします。つまり、ProcessExplorerは、sqlservr.exeが38GBのプライベートバイトを使用していると言います、仮想サイズは61GB。

Available Virtual Memoryが8,763,135,270,912であることを示すDBCC MemoryStatusコマンドを実行したときに表示される誤った情報が原因で問題が発生していると思います。この数は少なくとも8TBです。コマンドによって返される他の統計は正確であるように見えます。

DBCC MemoryStatusコマンドがこの番号を取得する方法と、それを修正する方法を誰かが知っていますか?これは、割り当てる仮想メモリの量に影響を与えると思います。

2
user1281639

x86-64仮想アドレス空間の詳細

仮想アドレスは64ビットモードでは64ビット幅ですが、現在の実装(および計画段階にあることがわかっているすべてのチップ)では、264バイト(16 EB)の仮想アドレス空間全体を使用できません。これは、32ビットマシンの仮想アドレス空間のサイズの約40億倍になります。ほとんどのオペレーティングシステムとアプリケーションは、当面はそれほど大きなアドレススペースを必要としないため、このような広い仮想アドレスを実装しても、アドレス変換の複雑さとコストが増加するだけで、実際のメリットはありません。したがって、AMDは、アーキテクチャの最初の実装では、仮想アドレスの最下位48ビットのみが実際にアドレス変換(ページテーブルルックアップ)に使用されると決定しました。1

さらに、AMD仕様では、仮想アドレスのビット48から63はビット47のコピーである必要があります(そうでない場合、拡張に署名します)。そうしないと、プロセッサで例外が発生します。1このルールに準拠するアドレスは、 "canonical form。" 1 Canonical formアドレスは0から00007FFF'FFFFFFFFまで、およびFFFF8000'00000000からFFFFFFFF'FFFFFFFFまでの合計256 TB使用可能な仮想アドレス空間です。これは32ビットマシンの仮想アドレス空間の約64,000倍です。

[...]

x64版Windowsの最初のバージョンでは、256 TBも使用していませんでした。それらは8 TBユーザー空間の8およびTBカーネル空間のに制限されていました。Windowsは全体をサポートしていませんでした。 Windows 8.1までの48ビットアドレス空間

そこにあります。 OSはデフォルトの8TB VAをサポートしているため、DBCC MEMORY_STATUS どのくらいが実際にサポートしているOSであるかを報告する必要があります。あなたのOSは今でも古典的な8TBの味です。

2
Remus Rusanu

SQL Server 2012以降、Available Virtual Memory is 8,763,135,270,912. This number is at least 8TBには何も問題はありません。この新しい機能はSQL Server 2012のDBCC MEMORYSTATUS出力に導入されました。以下は私のシステムのmemorystatusの出力です

Process/System Counts                    Value
---------------------------------------- --------------------
Available Physical Memory                1886949376
Available Virtual Memory                 8781736599552
Available Paging File                    10989400064
Working Set                              135262208
Percent of Committed Memory in WS        61
Page Faults                              15069059
System physical memory high              1
System physical memory low               0
Process physical memory low              0

実際のメモリ配分に関する情報を提供する前に、システムの現在のステータスに関する情報を提供します。 SQL Server 64ビットの理論上のVASは約8ですTBこれは基本的に仮想アドレス空間です。SQLServerで実行されるすべてのプロセスはこれだけのVASを認識するため、システムが利用可能な仮想メモリを指摘している場合asalmost8 TB心配する必要はないと思います。これは、VASの量を示すシステムです64ビットのSQL Serverインスタンスで実行されているすべてのプロセスに表示されます。

タスクマネージャーはプロセスのプライベートバイトのみを表示し、SQL Serverサービスアカウントがメモリ特権でページをロックしている場合、正しい値が表示されないため、SQL Serverのメモリ使用率を確認するには、常に以下のクエリを使用してください。実際には、タスクマネージャーはAWE APIを通じて割り当てられたメモリを表示しません

select
(physical_memory_in_use_kb/1024)Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 )Locked_pages_used_Sqlserver_MB,
(total_virtual_address_space_kb/1024 )Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
from sys. dm_os_process_memory

編集:

ページファイルが正しく設定されていないため、仮想メモリの不足状態が発生します。適切な値を構成するには、 このリンク および このリンク を使用する必要があります。 このリンク は、変更方法をガイドするのに役立ちます

仮想メモリの不足状態には多くの理由が考えられます。 OSで実行されている現在のワークロードはメモリ不足であり、OSは制限されているため、RAMは一時ストレージに仮想メモリを使用する必要があり、最終的には非常に多く使用されるため、警告が表示されます。すべてのプロセスが実行しているもの。ページファイルは、コミットされたメモリごとに調整されます。より多くのメモリがコミットされた場合、ページファイルの値の変更は、ページファイルの適切な値を決定するためにカウンターの下で使用します。

Memory:Committed Bytesコミットされた仮想メモリのバイト数。これは必ずしもページファイルの使用状況を表すものではありません-プロセスが完全に非常駐にされた場合に使用されるページファイルの容量を表します

メモリ:コミット制限ページングファイルを拡張せずにコミットできる仮想メモリのバイト数。

ページングファイル:%使用率コミットされたページングファイルの割合

ページングファイル:使用率のピークコミットされたページングファイルの最大パーセンテージ

1
Shanky