it-swarm.asia

SQL Server Max Memory tidak membatasi penggunaan RAM

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, itu akan setelah beberapa hari untuk menstabilkan 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 https://dba.stackexchange.com/a/7062/2744 . Saya menggunakan keduanya untuk melihat untuk 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 adalah yang pertama pilih 7948432 Kb yang kedua 44030.57812 MB yang totalnya sekitar 52GB yang digunakan oleh sql server ... jadi ke mana RAM saya yang lain pergi? :-) Task manager menunjukkan sekarang di-cache 363, tersedia 401, gratis 40 dan sqlservr.exe memiliki Memory privat set 64 459 656. Max Ram ditetapkan ke 60000MB seperti sebelumnya.

18
Martin Sjöberg

Pengaturan memori maksimum SQL Server menentukan batas hanya untuk penggunaan buffer pool. Akan ada alokasi variabel tetapi signifikan yang diperlukan di atas dan di atas batas itu.

Jonathan Kehayias's , Christian Bolton dan John Samson memiliki level posting 300/400 pada topik tersebut. Brent Ozar memiliki artikel yang lebih mudah dibaca yang mungkin merupakan tempat yang lebih baik untuk memulai.

Juga terkait: SQL Server 2008 R2 "Memori Hantu"

20

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):

  • Database Mail
  • SQLCLR
  • Prosedur Tersimpan yang Diperpanjang
  • Binari mereka sendiri
  • SQL Mail
  • SSIS
  • SSAS
  • SSR
16
mrdenny

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 termasuk dalam pertanyaan, pada server 2012+, hapus string single_.

3
Razvan Zoitanu

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

2
Craig Efrein