Saya tahu SQL suka RAM, tetapi melepaskannya ketika Windows bertanya. Saya tahu ini adalah bagaimana seharusnya SQL bekerja. Tetapi saya memiliki Administrator Windows yang tidak yakin bahwa SQL akan benar-benar mengembalikan RAM, dan pada server (virtual) khusus ini, SQL tidak perlu banyak setelah Layanan Analisis selesai, tetapi tidak ada hal lain di server ini yang mengganggu untuk tanyakan banyak tentang SQL.
Jadi saya mencoba meyakinkan Admin Windows bahwa masalah dengan lingkungan virtual bukan "karena SQL menggunakan terlalu banyak RAM", tapi saya sepertinya tidak bisa membujuk SQL untuk melepaskannya tanpa memulai ulang layanan.
Saat memproses kubus, layanan SQL dengan senang hati mengambil 8GB RAM, tetapi karena tidak ada tekanan di dalamnya, itu tidak melepaskan banyak dari ini selama hari normal. Orang-orang Windows berteriak, dan akan jauh lebih baik untuk memiliki rilis SQL ini.
Saya tidak ingin menggunakan pengaturan memori maks, karena saya benar-benar ingin SQL menggunakan RAM sebanyak itu saat memproses. Saya hanya ingin turun lagi setelahnya.
Ini berpotensi duplikat dari kedua SQL Server tidak melepaskan Memori dan Mengembalikan memori dari SQL Server , tapi saya bertanya-tanya apakah ada jawaban yang berbeda. Menunggu Windows untuk mengklaimnya kembali tidak akan membujuk orang Windows di sini. Memulai kembali layanan adalah suatu pilihan, tetapi saya benar-benar bukan penggemar ide itu.
Saya ingin tahu cara mendapatkan Windows untuk meminta kembali ...
sumber
sp_configure
umumnya adalah sesuatu yang harus Anda tentukan sekali dan biarkan sendiri.Jawaban:
Saya percaya satu-satunya pilihan Anda adalah memulai kembali Layanan SQL, atau menjalankan aplikasi yang menghabiskan banyak memori untuk memaksa SQL melepaskannya.
Saya suka saran @Nick Kavadias: monitor Memory: Page Faults / Sec performance counter untuk menunjukkan bahwa SQL belum menempatkan memori OS di bawah tekanan.
sumber
Salah satu cara untuk menunjukkan kepada mereka bahwa itu akan melakukan itu adalah untuk memiliki SQL Server mengunyah semua memori. Kemudian salin file besar melalui jaringan (file besar SQL Backup sangat cocok untuk ini). Ini akan menyebabkan cache sistem terisi, dan Windows akan mulai meminta SQL untuk memorinya kembali. SQL akan mulai mengembalikan memori kembali ke OS hingga mencapai pengaturan memori min Anda.
(Maaf tidak mendapatkan seluruh pertanyaan melalui Twitter, tampaknya diperlukan lebih dari 140 karakter.)
sumber
Anda menyebutkan 'kubus' sehingga tidak jelas apakah Anda berbicara tentang mesin AS atau mesin relasional. Mesin relasional dapat membebaskan memori sesuai permintaan:
Di mana 'nama cache' diambil dari sys.dm_os_memory_clerks . Spesifikasi DBRE FREESYSTEMCACHE hanya menyebutkan kumpulan gubernur, tetapi sebenarnya lebih banyak cache yang bisa diusir.
Tetapi jika semua memori digunakan oleh buffer pool, maka mengusir seluruh buffer pool akan menghasilkan degradasi kinerja yang luar biasa dan beban IO yang besar. Lebih baik biarkan SQL menangani ini sendiri.
sumber
Dengan mesin AS dan DS Anda dapat membatasi memori sehingga tetap berada di bawah ambang batas aman; ini direkomendasikan pada mesin 64 bith dengan banyak RAM dan / atau beberapa contoh SQL. Setidaknya untuk mesin database jika Anda mengubah tutup memori di bawah apa penggunaan saat ini akan mengurangi jumlah memori dengan cepat tanpa harus me-restart layanan, tidak yakin tentang SSAS sekalipun.
sumber
Cara termudah yang saya temukan adalah pergi ke properti memori server, masukkan nilai yang lebih kecil, terapkan, tunggu beberapa menit dan sesuaikan konfigurasi cadangan.
Kami juga telah menemukan penggunaan server throttling sql memori benar-benar dapat meningkatkan kinerja server karena memberikan windows ram lebih banyak untuk caching, dll
sumber