SQL Server Max Memory tidak membatasi penggunaan RAM

18

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.

Martin Sjöberg
sumber

Jawaban:

20

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

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

Juga terkait: "Memori Hantu" SQL Server 2008 R2

Mark Storey-Smith
sumber
ya, saya setuju bahwa itu membatasi buffer pool saja. Terima kasih atas bookmark yang akan saya lihat.
Martin Sjöberg
Saya membaca tentang tautan-tautan itu dan ada beberapa hal bagus di sana def. Saya akan memperbarui pertanyaan saya dengan apa yang saya temukan. Saya juga merasa terhibur bahwa saya memiliki nomor telepon untuk Max Pizzeria yang tersedia ... Saya ingin tahu apakah mereka melakukan pengiriman di rumah?
Martin Sjöberg
16

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 yang Disimpan Lebih Lama
  • Binari mereka sendiri
  • SQL Mail
  • SSIS
  • SSAS
  • SSR
mrdenny
sumber
Dari yang disebutkan di atas kita menggunakan binari ofc dan ssis di server ini.
Martin Sjöberg
1
Perangkat lunak apa lagi yang diinstal di server? Dan saya berarti apa pun. Driver MPIO, driver Flash drive, perangkat lunak cadangan, anti-virus, sys-internal, dll.
mrdenny
Server cukup bersih dan baru diinstal tetapi ofc kami punya beberapa di sana. Saya akan mencoba untuk mengumpulkan daftar lengkap di akhir minggu ini. Singkat dan dari ingatan saya ... kami memiliki iodrive (dell), mcafee, processexplorer di desktop, iometer, treesize ...
Martin Sjöberg
1
Driver FusionIO membutuhkan banyak memori untuk bekerja dengannya. Itu mungkin mengambil banyak hal.
mrdenny
Apakah mungkin membuktikan ini? Atau untuk mengkonfigurasinya agar menggunakan lebih sedikit RAM? Sofar tampaknya melepaskan RAM ketika harus dan saya tidak melihat ada kerugian tetapi hanya jika kita harus meningkatkan jumlah paket ssis saya khawatir pada apa yang mungkin terjadi dengan penggunaan RAM.
Martin Sjöberg
2

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

Craig Efrein
sumber
Anda "mungkin" perlu me-restart SQL Server. Itu tidak selalu diperlukan. Apakah Anda tahu kondisi di mana restart diperlukan atau tidak diperlukan untuk melepaskan memori?
Nick Chammas
Saya akan mengedit detail ini menjadi jawaban Anda yang ada dan menghapus yang ini. Mungkin mrdenny dapat menjawab pertanyaan Anda tentang membersihkan halaman yang kotor.
Nick Chammas
1
Benar, SQL tidak dapat merilis halaman memori saat itu kotor (telah ditulis untuk). Setiap kali sistem pos pemeriksaan halaman kotor ditulis ke disk. Saya tidak percaya bahwa mengubah memori server maks menyebabkan pos pemeriksaan terjadi.
mrdenny
1
Restart instance untuk mengubah pengaturan memori bisa menjadi kesalahan besar. Meskipun mengubah pengaturan memori tidak menyebabkan CHECKPOINToperasi 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, jalankan CHECKPOINTperintah pada database untuk menyiram halaman kotor ke disk, kemudian ubah pengaturan memori pada waktu tidak sibuk tanpa memulai ulang instance.
Jon Seigel