Bagaimana cara membebaskan memori SQL Server?

9

Saya memiliki instalasi sandbox SQL Server di komputer lokal saya. Saya telah mengatur memori contoh SQL Server dapat digunakan untuk 1000 mb. Saat menjalankan operasi intensif, penggunaan memori naik hingga 1000 mb. Ketika operasi selesai, SQL Server masih memegang memori. Bagaimana cara membebaskan reservasi memori ini?

jrara
sumber
2
Apa pengaturanmin server memory dan Anda ? Setelah SQL Server cadangan minimum yang Anda tentukan, itu tidak akan pernah melepaskannya kecuali jika Anda mengubah pengaturan atau bangkit instance. Seperti dicatat James, jika cadangan lebih dari minimum yang Anda tentukan, harus secara teori melepaskannya ketika tidak membutuhkannya dan ada tekanan memori pada mesin. max server memory
Nick Chammas
@Nick: memori server min: 0 (MB); memori server maks: 600 (MB).
jrara

Jawaban:

13

Hentikan / mulai layanan, tidak ada lagi yang akan melepaskan memori kembali ke OS.

Jelas bukan sesuatu yang Anda ingin lakukan dengan server operasional tetapi sangat masuk akal untuk kotak pasir lokal. Dengan 3 contoh berbeda di laptop saya, ini satu-satunya cara.

Edit komentar @ Nick berikut ini.

Seperti dicatat James, jika cadangan lebih dari minimum yang Anda tentukan, harus secara teori melepaskannya ketika tidak membutuhkannya dan ada tekanan memori pada mesin.

Apa definisi Anda tentang "tidak membutuhkannya"? Setelah kumpulan buffer telah diisi, itu tidak akan menjatuhkan halaman sampai mereka menjadi tidak disukai oleh halaman lain yang dibawa masuk. Jika Anda ingin memori kembali segera, seperti halnya untuk @jrara, Anda harus berhenti /Mulailah.

Mark Storey-Smith
sumber
2
Per Microsoft : "Di bawah Windows Server 2003, SQL Server menggunakan API pemberitahuan memori QueryMemoryResourceNotificationuntuk menentukan kapan buffer pool dapat mengalokasikan memori dan melepaskan memori." Jadi, jika Anda hanya khawatir kelaparan aplikasi lain yang mungkin membutuhkan lebih banyak memori, secara teori SQL Server akan melepaskan memori yang tidak diperlukan ketika Windows mengatakannya. Satu-satunya alasan Anda harus memaksa rilis dengan memulai kembali instance adalah jika mekanisme ini tidak berfungsi seperti yang dirancang atau pengaturan memori min / max Anda salah.
Nick Chammas
Artikel msdn lain yang berguna untuk menjelaskan tentang msdn.microsoft.com/en-us/library/ms178145.aspx ini . Selama SQL Server telah mencapai pengaturan memori server min itu akan melepaskan memori dalam menanggapi pemberitahuan memori rendah dari OS. Dalam pengalaman saya itu harus cukup ekstrim untuk ini terjadi.
georgeb
Tepatnya @georgeb_dba, itu tidak akan mudah menyerah. Ergo, berhenti / mulai dan dapatkan kembali memori terbatas laptop Anda segera.
Mark Storey-Smith
4
DBCC FREESYSTEMCACHE ('ALL') 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE 

akan membebaskan kolam.

https://msdn.microsoft.com/en-us/library/ms178529.aspx

Catatan

Menjalankan DBCC FREESYSTEMCACHE membersihkan cache paket untuk instance SQL Server. Mengosongkan cache rencana menyebabkan kompilasi ulang semua rencana eksekusi berikutnya dan dapat menyebabkan penurunan sementara, kinerja permintaan. Untuk setiap cachstore yang dihapus dalam cache paket, log galat SQL Server akan berisi pesan informasi berikut: "SQL Server telah mengalami% d kemunculan cachestore flush untuk cachestore '% s' (bagian dari cache paket) karena Operasi 'DBCC FREEPROCCACHE' atau 'DBCC FREESYSTEMCACHE'. " Pesan ini dicatat setiap lima menit selama cache dihapus dalam interval waktu tersebut.

Daniel Decasse
sumber
1
cukup yakin ini tidak akan benar-benar mengurangi jumlah memori yang telah disediakan SQL pada tingkat OS
Greg
3

Ini akan melepaskan memori yang tidak digunakan secara otomatis ketika aplikasi lain mencoba untuk melakukannya.

JamesRyan
sumber