Mengapa SQL Server mengkonsumsi lebih banyak memori server?

36

SQL Server mengkonsumsi 87,5% dari RAM server saya. Ini baru-baru ini menyebabkan banyak hambatan kinerja seperti kelambatan. Saya meneliti masalah ini. Salah satu solusi umum yang bisa saya temukan di internet adalah menetapkan batas maksimum untuk SQL Server. Ini dilakukan dan banyak perbaikan diperoleh. Saya ingin tahu mengapa jika nilai memori maksimum tidak ditetapkan mengapa SQL Server terus mengonsumsi sumber daya

kombo
sumber
3
Bagaimana Anda menentukan bahwa penggunaan RAM oleh SQL Server adalah sumber dari segala hambatan? Kelambatan dalam apa? Jika ada, SQL Server harus lebih efisien jika menggunakan RAM sebanyak mungkin (atau bahkan lebih dari yang Anda harapkan atau inginkan). Dan jika Anda memiliki aplikasi lain di server yang menderita karena SQL Server menggunakan memori (seperti yang dirancang untuk dilakukan), pindahkan ke server lain .
Aaron Bertrand
Saya telah menggunakan metode ini di sini lucidica.com/help/got-sql-eating-up-ram Beri tahu saya jika itu membantu :) Salam, Nikita.
Nikita Kosousov

Jawaban:

48

SQL Server akan mengkonsumsi memori sebanyak yang Anda izinkan . Secara default, angka itu akan mencakup 100% dari memori numerik Anda di mesin Anda. Itu sebabnya Anda melihat apa yang Anda lihat. Jika Anda memberikan SQL Server 24 GB memori, maka SQL Server akan melakukan yang terbaik untuk menggunakan memori 24 GB. Kemudian Anda memiliki SQL Server dan OS yang berjuang untuk sumber daya, dan itu akan selalu menghasilkan kinerja yang buruk.

Ketika Anda menetapkan max server memorybatas konfigurasi, Anda membatasi berapa banyak SQL Server dapat mengalokasikan untuk kumpulan buffer (hampir di mana ia menyimpan halaman data dan cache prosedur). Ada juru tulis memori lain dalam SQL Server, jadi untuk versi khusus Anda (2008 R2 dan di bawah), max server memorycukup kontrol kumpulan buffer. Tapi ini akan selalu menjadi konsumen memori terbesar.

Referensi TechNet tentang Efek memori server min dan maks

Opsi konfigurasi memori server minimum dan server memori maks menetapkan batas atas dan bawah untuk jumlah memori yang digunakan oleh kumpulan buffer dari Mesin Database Microsoft SQL Server.

Sejauh pertanyaan berapa banyak memori yang harus saya tinggalkan untuk OS , itu adalah metrik yang sering diperdebatkan. Itu benar-benar semua tergantung, sebagian besar pada proses apa yang berjalan di server . Asalkan itu server yang benar-benar khusus (dan itu hampir tidak pernah terjadi). Saya suka melihat setidaknya 4 GB memori untuk OS (dan bahkan lebih pada kotak hardware besar). Tetapi yang paling penting, pantau berapa banyak memori yang tidak terpakai. Jadilah liberal, dan berikan SQL Server lebih banyak memori jika Anda memperhatikan banyak yang tersedia (dapat dipantau melalui perfmon) dan memori yang tidak digunakan (tentu saja, selalu menyisakan buffer kecil untuk situasi sudut itu).

Thomas Stringer
sumber
11

SQL Server dirancang untuk menggunakan semua memori di server secara default. Alasan untuk ini adalah bahwa SQL Server cache data dalam database dalam RAM sehingga dapat mengakses data lebih cepat daripada yang bisa jika diperlukan untuk membaca data dari disk setiap kali pengguna membutuhkannya. Jika kita perlu pergi ke disk setiap kali SQL Server membutuhkan data yang sama berulang-ulang persyaratan IO disk akan sangat tinggi.

Biasanya saya sarankan orang meninggalkan sekitar 4 Gigs RAM untuk Windows, tetapi itu benar-benar tergantung pada jumlah perangkat lunak yang berjalan di server, komponen apa dari SQL Server yang Anda gunakan (tidak semua komponen mengikuti pengaturan itu), dll.

mrdenny
sumber
6

Ini berfungsi secara instan tanpa perlu restart SQL:

Opsi Konfigurasi Server Memori Server

Gunakan dua opsi memori server, memori server minimal dan maks , untuk mengkonfigurasi ulang jumlah memori (dalam megabita) yang dikelola oleh SQL Server Memory Manager untuk instance dari SQL Server. Secara default, SQL Server dapat mengubah persyaratan memorinya secara dinamis berdasarkan sumber daya sistem yang tersedia.

Prosedur untuk mengonfigurasi jumlah memori tetap Untuk menetapkan jumlah memori tetap:

  1. Di Object Explorer, klik kanan server dan pilih Properties.
  2. Klik simpul Memori.
  3. Di bawah Server Memory Options, masukkan jumlah yang Anda inginkan untuk Memori server minimum dan Memori server maksimum.

Gunakan pengaturan default untuk memungkinkan SQL Server mengubah persyaratan memorinya secara dinamis berdasarkan sumber daya sistem yang tersedia. Pengaturan default untuk memori server min adalah 0, dan pengaturan default untuk memori server maks adalah 2147483647 megabita (MB).

Saya harap ini membantu!

Nikita Kosousov
sumber