Bagaimana cara mengontrol penggunaan ram yang berlebihan oleh SQL Server?

13

Server database yang saya gunakan menjalankan 6 contoh SQL Server yang berbeda. Ini memiliki 48 GB RAM. Dan salah satunya adalah mengkonsumsi lebih dari 10 GB RAM, total konsumsi adalah 20 GB untuk saat ini. Konsumsi RAM tumbuh terus menerus. Beberapa hari sebelumnya menggunakan lebih dari 40 GB RAM dan server merespons sangat lambat. Aplikasi menunjukkan masalah mogok saat menyimpan data.

Jadi saya memulai kembali layanan SQL Server.

Segera setelah layanan dimulai kembali, penggunaannya turun menjadi 4 GB, tetapi sekarang tumbuh. Dan saya khawatir itu akan tumbuh hingga 40 GB dalam 4 atau 5 hari dan membuat server lambat.

Memulai kembali layanan bukanlah pilihan yang baik.

Saya juga menemukan dari berbagai sumber bahwa kita dapat mengatur ukuran penggunaan memori maksimum untuk SQL Server. Dan saya tidak yakin apakah ini akan membantu atau tidak. Saya tidak dapat menguji ini karena server menggunakan database produksi dan itu akan menjadi risiko jika layanan berhenti saat memodifikasi pengaturan dalam SQL Server.

Adakah yang bisa membantu untuk masalah ini?


sumber
1
Secara default SQL akan menggunakan RAM sebanyak mungkin untuk memaksimalkan kinerjanya, ini bagus - ini artinya caching permintaan umum dan hasil untuk membuat aplikasi Anda lebih cepat. Ini hanya akan menggunakan RAM hingga batas di mana paging laporan OS dapat terjadi. Anda dapat mengganti perilaku ini. Lihat dokumentasi MS ini: Cara menyesuaikan penggunaan memori dengan menggunakan opsi konfigurasi di SQL Server. Ini juga berguna: Cara menentukan pengaturan konfigurasi SQL Server yang tepat
4
Ini BUKAN masalah - itu perilaku yang dirancang dan default untuk SQL Server !! Dan ya - memulai kembali proses SQL Server adalah ide yang mengerikan ..... SQL Server menyimpan sebanyak mungkin data dan indeks halaman dalam memori - ini mengoptimalkan kinerja sistem secara keseluruhan dengan cara itu. Itulah alasan mesin SQL Server harus selalu menjadi dedicated server - tidak melakukan apa pun selain SQL Server.
marc_s
Ya saya mengerti. Ini dirancang seperti itu. Tetapi ketika sql server menggunakan banyak memori, itu membuat server lambat dan menyebabkan laporan untuk waktu habis. Jadi saya ingin mencegah sql server menggunakan memori terbatas.
4
Sebenarnya jika SQL Server menggunakan sebanyak mungkin memori, saya akan mengatakan itu akan membuatnya lebih kecil kemungkinannya untuk mengalami kesulitan dalam menyampaikan laporan. Ini terjadi ketika Anda secara artifisial membatasi SQL Server (atau menempatkan terlalu banyak contoh pada satu kotak yang bersaing untuk sumber daya) di mana Anda akan melihat masalah karena hibah memori dan masalah lainnya.
Aaron Bertrand
Tapi saya bertanya-tanya mengapa tiba-tiba mulai menunjukkan laporan dengan baik setelah memulai kembali layanan server sql. Mungkinkah kasus ini karena terlalu banyak pelanggan menggunakan aplikasi karena laporan tidak ditampilkan?

Jawaban:

14

Itu dengan desain. SQL Server seharusnya menggunakan semua memori yang tersedia, karena menyimpan lebih banyak dan lebih banyak data dalam memori sehingga tidak perlu kembali ke disk untuk mendapatkan memori yang sama berulang-ulang.

Jika Anda perlu membatasi jumlah memori yang menggunakan instance SQL Server tunggal, Anda dapat melakukan ini di SQL Server Management Studio dengan mengklik kanan nama instance dalam Object Explorer dan memilih properti. Kemudian pilih tab memori dan atur jumlah maksimum memori yang SQL Server akan diizinkan untuk digunakan. Sekarang ini tidak akan membatasi semua aspek SQL Server ke jumlah memori itu. Ini hanya mengontrol kumpulan buffer dan cache rencana eksekusi. Hal-hal seperti CLR, Full Text, memori aktual yang digunakan oleh file exe SQL Server, SQL Agent, prosedur tersimpan yang panjang, dll. Tidak dikontrol oleh pengaturan ini. Namun hal-hal lain ini biasanya tidak memerlukan banyak memori, itu adalah kumpulan buffer dan cache rencana eksekusi yang membutuhkan sebagian besar memori.

Jika Anda mengatur pengaturan ini pada satu instance, Anda ingin mengaturnya pada semua instance sehingga mereka tidak saling menginjak.

mrdenny
sumber