SQL membuang semua halaman dari buffer cache setiap beberapa menit

9

Saya punya satu node SQL2012 SP4 yang menjalankan beberapa basis data.

Server memiliki 20GB memori yang tersedia, 14GB dialokasikan untuk SQL (tidak ada yang berjalan pada kotak).

Setiap beberapa menit SQL membuang seluruh cache buffer. Harapan hidup halaman mencapai nol, deskriptor cache cache menunjukkan bahwa tidak ada apa-apa di cache.

Saya telah melihat notifikasi monitor sumber daya dan notifikasi memantul dari tinggi / stabil / rendah setiap beberapa milidetik:

RESOURCE_MEMPHYSICAL_HIGH RESOURCE_MEM_STEADY RESOURCE_MEMPHYSICAL_LOW

Dengan cap waktu yang terpisah beberapa milidetik. PLE pada dasarnya adalah pola gigi gergaji.

Saya pernah melihat ini terjadi sebelumnya dengan SQL2012 SP1 dan pertanyaan ini:

SQL Server 2012 Halaman Gratis di Buffer Cache Tidak Digunakan

Tampaknya menjadi masalah yang serupa, meskipun saya sudah memperbarui ke SP4.

Saya sudah mencoba menyalakan LPIM untuk akun layanan dan saya sudah mencoba mengacaukan pengaturan memori maks. Menurunkan memori maks tampaknya telah menyebabkan cache buffer kosong lebih sering.

Ada ide tentang apa yang harus diperiksa selanjutnya?

Beban kerja server sebenarnya tidak ada apa-apanya (saya menggulir daftar item dalam sistem ERP dan mencapai sekitar 40-50MB sebelum cache turun lagi).

Sangat menarik karena saya memutakhirkan dari SP1 untuk mencoba dan memperbaikinya - cache di sana mencapai sekitar 500MB. Sejak itu saya menjatuhkan pengaturan memori maks ke 14GB yang tampaknya membuatnya semakin buruk.

Saya bertanya-tanya apakah Windows panik dan melempar pemberitahuan yang salah untuk tekanan memori pada SQL - ini berarti bahwa server dengan memori maks yang disetel tidak terikat tampaknya berjalan dengan baik, tetapi tidak pernah mengisi cache lebih dari beberapa ratus MB - tetapi sekarang nyaris tidak sampai 50 ...

Info Lebih Lanjut: untuk yang bertanya

Jumlah inti: 4

Ukuran Basis Data: 80GB

Log kesalahan menunjukkan: A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 247928, committed (KB): 495656, memory utilization: 50%.

Hasil menjalankan skrip dari tautan ini: https://www.sqlskills.com/blogs/jonathan/identifying-external-memory-pressure-with-dm_os_ring_buffers-and-ring_buffer_resource_monitor/

Hasil permintaan tekanan memori

Tidak yakin bagaimana menafsirkan ini - sepertinya ada tekanan memori internal dan eksternal pada berbagai waktu ..

Info lebih lanjut:

Ini adalah tamu Hyper-V yang duduk di host dengan 96GB ram total yang sekitar setengahnya dialokasikan untuk para tamu.

Gejala-gejalanya mirip dengan ini:

SQL Server 2012 x64 - tidak dapat mengalokasikan lebih dari 50% RAM dengan aman

Namun, ketika saya mengalokasikan 14GB untuk SQL gejala langsung muncul (hampir 3GB dari memori server dilakukan)

Tadi malam saya menabrak memori tamu menjadi 32GB dan masalahnya hilang tetapi saya melihat hanya 14GB komit dari total memori server (dan bisnis yang menjalankan DB sibuk pagi ini dan ini adalah saat mereka biasanya memiliki masalah kinerja).

Sekitar 8-9GB data dalam cache saat ini, tampaknya stabil.

Tampaknya memberi kesan bahwa 20GB sudah cukup untuk beban kerja pada kotak ini. Saya senang meninggalkannya dengan 32GB untuk saat ini tetapi saya benar-benar ingin membahas hal ini sehingga saya dapat mengkonfigurasi VMs / SQL dengan lebih baik.

Saya akan terus menggali dan memperbarui jika saya menemukan jawabannya!

Info lebih lanjut:

Saya tidak me-restart SQL setelah menyalakan LPIM (tidak menyadari bahwa itu persyaratan) tapi saya membiarkan pengaturan ini dan restart untuk meningkatkan memori jadi sekarang saya tidak yakin apakah peningkatan memori atau LPIM telah meringankan masalah.

Akan melompat pada malam ini ketika server menganggur dan memeriksa tampilannya 20GB lagi.

Bahkan Lebih Jauh Lebih Banyak Info Lebih Lanjut:

Saat ini server berdetak ok dengan alokasi 32GB dan kami tidak melihat masalah sejak itu. Jika ini muncul lagi saya akan kembali ke pertanyaan ini dan terus menggali.

Saat ini masih menjadi misteri tetapi dugaan saya adalah bahwa saya hanya menutupi masalah saat ini.

Charleh
sumber
3
Apakah ini Mesin Virtual? Sepertinya driver balon VMware menyebabkan tekanan memori.
Max Vernon
1
Jika ini adalah VM yang berjalan di VMWare, lihat artikel ini: Mengatasi Masalah Kinerja CPU pada VMware . Saya tahu tertulis CPU dalam judul, tetapi ada informasi tentang penghitung memori di sana juga.
Erik Darling
Ya itu adalah host hiper-v yang menjalankan 3 server. Terima kasih atas informasinya, saya akan memeriksanya
Charleh
Saya telah menemukan sejauh ini bahwa host memiliki cukup memori untuk menambah 12GB. Saya mengizinkan SQL 24GB (menjadikan total tamu hingga 32GB) dan sejauh ini tampaknya jauh lebih sehat, tetapi saya masih ingin memahami apa yang terjadi karena 14-16GB sepertinya lebih dari cukup untuk beban kerja yang akan dikonsumsi SQL setiap hari ..
Charleh
1
Apakah Anda menyelidiki Ballooning? Jika VMWare memompa driver balon, maka OS akan memberi sinyal rendah pada memori dan SQL Server akan merespons sesuai. Langkah pertama adalah menyelidiki apakah Anda mengalami balon atau tidak.
Tibor Karaszi

Jawaban:

4

Meskipun Anda sendiri yang tampaknya telah menyelesaikan masalah, berikut ini adalah ringkasan dari informasi yang relevan seputar solusi.

Opsi Konfigurasi Server Memori Server

Microsoft menulis di artikel mereka Opsi Konfigurasi Server Memori Server (Microsoft | SQL Documents) untuk bagian Mengatur opsi memori secara manual

( penekanan milikku)

Juga, menetapkan nilai min_server_memory sangat penting dalam lingkungan tervirtualisasi untuk memastikan tekanan memori dari host yang mendasari tidak berusaha untuk mengalokasikan memori dari kumpulan buffer pada mesin virtual SQL Server (VM) tamu di luar apa yang diperlukan untuk kinerja yang dapat diterima.

Bagian tentang Halaman Kunci dalam Memori (dokumen yang sama) memiliki paragraf yang setara dan setara yang berbunyi:

( penekanan milikku)

Kebijakan Windows ini menentukan akun mana yang dapat menggunakan proses untuk menyimpan data dalam memori fisik, mencegah sistem dari paging data ke memori virtual pada disk . Mengunci halaman dalam memori dapat membuat server responsif ketika paging memori ke disk terjadi. Opsi Halaman Kunci di Memori diatur ke AKTIF dalam hal edisi SQL Server Standard dan lebih tinggi ketika akun dengan hak istimewa untuk menjalankan sqlservr.exe telah diberikan hak pengguna Halaman Kunci Windows di Memori (LPIM).

Bagian LPIM selanjutnya menjelaskan bahwa:

( penekanan milikku)

Pengaturan opsi ini tidak mempengaruhi manajemen memori dinamis SQL Server, memungkinkan untuk memperluas atau menyusut atas permintaan pegawai memori lain. Saat menggunakan Halaman Kunci dalam Memori pengguna benar, disarankan untuk menetapkan batas atas untuk memori server maks seperti yang dijelaskan di atas.

... dan dalam komentar penting bahwa:

( penekanan milikku)

Pengaturan opsi ini hanya boleh digunakan bila perlu, yaitu jika ada tanda-tanda bahwa proses sqlservr sedang keluar . Dalam hal ini, kesalahan 17890 akan dilaporkan di Errorlog, mirip dengan contoh di bawah ini:

A significant part of sql server process memory has been paged out. 
This may result in a performance degradation. Duration: #### seconds. 
Working set (KB): ####, committed (KB): ####, memory utilization: ##%.  

Dimulai dengan SQL Server 2012 (11.x), jejak bendera 845 tidak diperlukan untuk Edisi Standar untuk menggunakan Halaman Terkunci.

Larutan

Berdasarkan temuan di atas dan pengamatan Anda, solusi untuk masalah Anda adalah mengonfigurasi pengaturan berikut:

  1. min_server_memory (5-10 GB?) Berdasarkan komentar Anda:

    Sekitar 8-9GB data dalam cache saat ini, tampaknya stabil.

    ... dan rekomendasi Microsoft untuk pengaturan a min_server_memory.

  2. max_server_memory (20-32 GB) berdasarkan pengamatan Anda:

    Tampaknya memberi kesan bahwa 20GB sudah cukup untuk beban kerja pada kotak ini. Saya senang meninggalkannya dengan 32GB untuk saat ini tetapi saya benar-benar ingin membahas hal ini sehingga saya dapat mengkonfigurasi VMs / SQL dengan lebih baik.

    ... dan rekomendasi Microsoft untuk pengaturan a max_server_memory.

  3. Halaman Kunci di Memori: Diaktifkan untuk Akun Layanan SQL Server.
    Berdasarkan entri ERRORLOG contoh SQL Server Anda yang Anda sebutkan dan referensi Microsoft dalam artikel.

    Pengaturan opsi ini hanya boleh digunakan bila perlu, yaitu jika ada tanda-tanda bahwa proses sqlservr sedang keluar .

Sebelum Anda Terus ...

(Salah satu) manfaat dari memiliki lingkungan tervirtualisasi adalah bahwa sumber daya dapat / harus dibagi, dan bahkan mungkin berlebihan. Namun, mengaktifkan Kunci Halaman Dalam Memori (LPIM) dapat berdampak negatif pada lingkungan Hyper-V Anda, jika perangkat keras Anda menampung banyak kejadian. Komitmen berlebihan pada RAM dapat menghabiskan banyak hal.

Sebelum Anda mempertimbangkan untuk mengaktifkan semua tuas, mulailah dengan pengaturan 1. dan 2. dan jika fine tuning pengaturan memori ini tidak berfungsi, maka pertimbangkan untuk mengaktifkan LPIM jika Anda memiliki cukup perangkat keras .

John alias hot2use
sumber