Tutup memori server maks untuk menghindari tekanan memori - AWS Bimbingan Preskriptif

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Tutup memori server maks untuk menghindari tekanan memori

Untuk alasan kinerja, SQL Server tidak melepaskan memori yang telah dialokasikan. Ketika SQL Server dimulai, perlahan-lahan mengambil memori yang ditentukan di bawah opsi min_server_memory, dan kemudian terus tumbuh hingga mencapai nilai yang ditentukan dalam opsi max_server_memory. (Untuk informasi selengkapnya tentang pengaturan ini, lihat Opsi konfigurasi memori server dalam dokumentasi SQL Server.)

Memori SQL Server memiliki dua komponen: buffer pool dan non-buffer pool (juga disebut memory to leave atau MTL). Nilai opsi max_server_memory menentukan ukuran kumpulan buffer SQL Server, yang terdiri dari cache buffer, cache prosedur, cache rencana, struktur buff, dan cache lainnya.

Dimulai dengan SQL Server 2012, akun min_server_memory dan max_server_memory untuk semua alokasi memori untuk semua cache, termasuk,,,,,, dan. SQLGENERAL SQLBUFFERPOOL SQLQUERYCOMPILE SQLQUERYPLAN SQLQUERYEXEC SQLOPTIMIZER SQLCLR Untuk daftar lengkap pegawai memori di bawah max_server_memory, lihat sys.dm_os_memory_clerks dalam dokumentasi Microsoft SQL Server.

Untuk memeriksa nilai max_server_memory saat ini, gunakan perintah:

$ sp_configure 'max_server_memory'

Kami menyarankan Anda membatasi max_server_memory pada nilai yang tidak menyebabkan tekanan memori di seluruh sistem. Tidak ada rumus universal yang berlaku untuk semua lingkungan, tetapi kami telah memberikan beberapa pedoman di bagian ini. max_server_memory adalah opsi dinamis, sehingga dapat diubah pada waktu berjalan.

Sebagai titik awal, Anda dapat menentukan max_server_memory sebagai berikut:

max_server_memory = total_RAM – (memory_for_the_OS + MTL)

di mana:

  • Memori untuk sistem operasi adalah 1-4 GB.

  • MTL (memori untuk meninggalkan) mencakup ukuran tumpukan, yaitu 2 MB pada mesin 64-bit per thread pekerja dan dapat dihitung sebagai berikut: MTL = stack_size * max_worker_threads

Atau, Anda dapat menggunakan:

max_server_memory = total_RAM – (1 GB for the OS + memory_basis_amount_of_RAM_on_the_server)

dimana jumlah dasar memori RAM ditentukan sebagai berikut:

  • Jika RAM di server antara 4 GB dan 16 GB, sisakan 1 GB per 4 GB RAM. Misalnya, untuk server dengan 16 GB, sisakan 4 GB.

  • Jika RAM di server lebih dari 16 GB, sisakan 1 GB per 4 GB RAM hingga 16 GB, dan 1 GB per 8 GB RAM di atas 16 GB.

Misalnya, jika server memiliki 256 GB RAM, perhitungannya adalah:

  • 1 GB untuk OS

  • Hingga 16 GB RAM: 16/4 = 4 GB

  • Sisa RAM di atas 16 GB: (256-16) /8 = 30

  • Total RAM untuk pergi: 1 + 4 + 30 = 35 GB

  • max_server_memory: 256 - 35 = 221 GB

Setelah konfigurasi awal, pantau memori yang dapat Anda bebaskan selama durasi beban kerja biasa untuk menentukan apakah Anda perlu menambah atau mengurangi memori yang dialokasikan ke SQL Server.

catatan

Windows memberi sinyal notifikasi sumber daya memori rendah pada 96 MB, jadi Anda menginginkan buffer, tetapi Anda dapat mengatur Mbytes yang Tersedia menjadi di atas 1 GB pada server yang lebih besar dengan RAM 256 GB atau lebih tinggi.

Untuk informasi tambahan, lihat Panduan Arsitektur Manajemen Memori di dokumentasi Microsoft SQL Server.