Saya ingin masukan Anda tentang ini. Saya memiliki sql server 2008r2 Ent. Ed. 64bit dengan 16 core dan RAM 64GB. Ada satu contoh dari SQL server yang ditambal sepenuhnya pada 20111014.
Ram maksimum diatur ke 60000MB. Jumlah ram gratis adalah 0 menurut task manager setelah beberapa hari online.
Jika saya mengubah ram maksimum menjadi di bawah 53GB, maka setelah beberapa hari akan stabil dan memiliki ram gratis.
Ini adalah proses sql yang mengalokasikan ram menurut task manager. Bagaimana saya bisa memahami apa masalahnya sebenarnya? Tak perlu dikatakan bahwa saya sudah melakukan banyak pengujian tetapi belum menyelesaikan ini sesuai dengan keinginan saya. dan ohh kita tidak mendapatkan memori kelaparan khas tertinggal ketika ram yang tersedia turun ke 0 gratis.
Pembaruan 1:
Terinspirasi oleh T / A lain yang terkait dengan RAM di halaman ini /dba//a/7062/2744 . Saya menggunakan keduanya untuk melihat apa RAM digunakan.
SELECT TOP ( 10 )
[type] AS [Memory Clerk Type] ,
SUM(single_pages_kb) AS [SPA Mem, Kb]
FROM sys.dm_os_memory_clerks
GROUP BY [type]
ORDER BY SUM(single_pages_kb) DESC
OPTION ( RECOMPILE ) ;
SELECT DB_NAME(database_id) AS [Database Name] ,
COUNT(*) * 8 / 1024.0 AS [Cached Size (MB)]
FROM sys.dm_os_buffer_descriptors
--WHERE database_id > 4 -- system databases
-- AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC
OPTION ( RECOMPILE ) ;
Jumlah yang digunakan ditunjukkan oleh ini pertama pilih 7948432 Kb detik satu 44030.57812 MB yang total sekitar 52GB digunakan oleh sql server ... jadi ke mana sisa RAM saya pergi? :-) Task manager tunjukkan sekarang di-cache 363, tersedia 401, gratis 40 dan sqlservr.exe memiliki Memory private set 64 459 656. Max Ram di atur ke 60000MB seperti sebelumnya.
sumber
Seperti dikatakan Buffer pool dan cache prosedur adalah satu-satunya hal yang dikendalikan oleh memori server maks. Ada banyak hal lain dalam SQL Server yang dapat memakan memori melebihi batas itu. Mereka termasuk (tetapi tidak terbatas pada):
sumber
Dari SQL 2012 dan seterusnya, single_pages_kb digantikan oleh pages_kb di DMV itu. https://msdn.microsoft.com/en-us/library/ms175019.aspx?f=255&MSPPError=-2147217396
Jadi, jika Anda ingin menjalankan kueri yang disertakan dalam pertanyaan, pada server 2012+, hapus string single_.
sumber
http://msdn.microsoft.com/en-us/library/ms178067.aspx
Untuk mengurangi memori server maks, Anda mungkin perlu me-restart SQL Server untuk melepaskan memori.
Pemahaman saya adalah bahwa jika sebuah halaman di buffer pool belum ditulis ke disk, itu tidak akan dirilis sampai saat itu.
Apakah menurunkan pengaturan memori maks menyebabkan SQL Server menghapus halaman kotor?
Dia bisa memantau manajer buffer di perfmon untuk memverifikasi itu. Perfmon -> SQLServer: Buffer Manager: Halaman Database
sumber
CHECKPOINT
operasi pada basis data, ia menghapus cache prosedur. Jika Anda me-restart instance hanya untuk mengubah pengaturan memori, cache prosedur tidak hanya akan menjadi dingin, tetapi cache data juga akan menjadi dingin. Jika memori maks tidak dapat dikurangi karena halaman kotor dalam memori, jalankanCHECKPOINT
perintah pada database untuk menyiram halaman kotor ke disk, kemudian ubah pengaturan memori pada waktu tidak sibuk tanpa memulai ulang instance.