Saya telah mengalami kesalahan SQL Server OOM secara berkala, satu kali ke titik bahwa SQL Server dimatikan sendiri dan selalu terjadi pada malam hari, ketika tidak ada yang menggunakannya, dan tidak ada pekerjaan SQL Agent yang berjalan pada saat itu:
Inilah kesalahan tipikal:
08/17/2017 19: 31: 17, spid100, Tidak Dikenal, Ada memori sistem yang tidak mencukupi di kumpulan sumber daya 'internal' untuk menjalankan kueri ini.
17/08/2017 19: 31: 17, spid100, Tidak Dikenal, Kesalahan: 701 Tingkat Permasalahan: 17 Negara: 123.
17/08/2017 19: 31: 17, spid112, Tidak Dikenal, Kesalahan: 18056 Tingkat Permasalahan: 20 Negara: 29. (Params :). Kesalahan dicetak dalam mode singkat karena ada kesalahan selama pemformatan. Melacak notifikasi ETW dll dilewati.
Ini info servernya:
- Memori server SQL MIN 10GB
- Memori server SQL 21GB MAX
- hanya 4 DB di server
- ukurannya masing-masing hanya 1 hingga 2 GB
- Ukuran Tempdb tidak pernah tumbuh hingga lebih dari 1GB (diatur ke tumbuh otomatis menjadi 10GB)
- Semua indeks adalah frag yang rendah, statistik diperbarui
Versi: kapan:
Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) Oct 20 2015 15:36:27 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
Saya memeriksa beberapa item:
- Status memori DBCC
Statistik cepat:
SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB] FROM sys.dm_os_process_memory; GO Output: 20 GB Page Life Expectancy 155932
Tidak ada gubernur sumber daya diaktifkan:
select pool_id, cache_memory_kb, used_memory_kb, out_of_memory_count,used_memgrant_kb from sys.dm_resource_governor_resource_pools Output: pool_id | cache_memory_kb | used_memory_kb | out_of_memory_count | used_memgrant_kb --------+-----------------+----------------+---------------------+----------------- 1 | 295368 | 641416 | 0 | 0 select (physical_memory_in_use_kb/1024) Memory_usedby_Sqlserver_MB, (locked_page_allocations_kb/1024) Locked_pages_used_Sqlserver_MB, (total_virtual_address_space_kb/1024 )Total_VAS_in_MB, process_physical_memory_low, process_virtual_memory_low from sys. dm_os_process_memory Output: Memory_usedby_Sqlserver_MB | Locked_pages_used_Sqlserver_MB | Total_VAS_in_MB | process_physical_memory_low | process_virtual_memory_low ---------------------------------------------------------------------------------------------------------------------------------------- 20553 | 20393 | 134217727 | 0 | 0
Server pada SP3, saya tahu ada masalah kebocoran memori di SP1, jadi mengesampingkan itu.
Adakah yang melihat sesuatu dalam hasil DBCC yang harus saya fokuskan?
sumber
Jawaban:
Karena SQL Server berjalan di VM, seperti yang ditunjukkan oleh
(hypervisor)
indikator dalam pernyataan versi, Anda harus memastikan memiliki reservasi memori di VMWare (atau Hyper-V, dll) di server host.Reservasi memori biasanya 100% dari memori yang dialokasikan untuk VM untuk mesin virtual SQL Server yang digunakan dalam lingkungan produksi. Tanpa reservasi memori, server host dapat "mencuri" memori dari mesin virtual melalui penggunaan "driver balon" untuk digunakan oleh beberapa VM lain, yang kemungkinan merupakan penyebab kondisi kehabisan memori Anda.
Di VMWare vCenter, untuk mengatur Pemesanan Memori di Mesin Virtual:
Matikan mesin virtual sebelum mengkonfigurasi pengaturan memori.
Di vSphere Client, klik kanan mesin virtual dari inventaris dan pilih Edit Pengaturan.
Di jendela Properti Mesin Virtual, pilih tab Sumber Daya dan pilih Memori.
Di panel Alokasi Sumber Daya, pilih kotak centang Cadangan semua memori tamu (Semua terkunci).
Klik OK.
Jika Anda menggunakan Microsoft Hyper-V, nonaktifkan memori dinamis untuk VM, menggunakan proses ini di Hyper-V Manager:
sumber
Beberapa perubahan konfigurasi yang akan saya buat:
Anda dapat menggunakan skrip berikut untuk mencapai ini:
sumber