Setelah Anda menerapkan pembaruan ini, Anda harus menambahkan bendera pelacakan-T8075 sebagai parameter permulaan untuk mengaktifkan perubahan ini.
Gejala
Ketika Anda menjalankan kueri dalam versi 64-bit dari Microsoft SQL Server 2012, Anda menerima pesan kesalahan memori habis yang menyerupai berikut ini dalam log kesalahan SQL Server:
Gagal mengalokasikan Halaman: FAIL_PAGE_ALLOCATION 513
Kueri memakan waktu lama untuk menyelesaikan eksekusi dan pertemuan SOS_MEMORY_TOPLEVELBLOCKALLOCATOR menunggu. Saat Anda memeriksa titik informasi berikut ini, Anda akan menemukan bahwa ada ruang alamat virtual yang tersedia sangat rendah:
-
DBCC MEMORYSTATUS-bagian menghitung proses/sistem-tersedia memori virtual
-
DMV: virtual_address_space_available_kb sys.dm_os_process_memory kolom
Nilai ini memulai sekitar 8 terabyte (TB) pada proses x64 dan terus turun dan menjangkau beberapa gigabyte (GB). Saat Anda berada di tahap tempat ruang alamat virtual yang tersedia sangat rendah, kueri yang mencoba menjalankan alokasi memori mungkin juga mengalami tipe tunggu CMEMTHREAD. Titik data berikut ini akan terus meningkat seiring berjalannya waktu:
-
DMV: sys.dm_os_process_memory dan sys.dm_os_memory_nodes kolom virtual_address_space_reserved_kb
-
DBCC MEMORYSTATUS-Manajer memori bagian-VM reserved
Nilai ini biasanya akan meningkat dalam kelipatan dari nilai "memori server maks" hingga hampir 8 TB.
Penyebab
Saat proses SQL Server telah mencapai status di mana total memori server = Memory target server = memori server maks, ada kebijakan di Manajer memori SQL Server untuk memperbolehkan alokasi baru meminta beberapa halaman 8 KB untuk berhasil untuk sementara waktu. Pola alokasi berulang di bawah kondisi tersebut mungkin menyebabkan fragmentasi blok memori dan penggunaan ruang alamat virtual. Jika proses ini berulang berkali-kali, Ruang Alamat virtual SQL Server akan habis, dan Anda akan melihat gejala yang telah disebutkan sebelumnya.
Pemecahan Masalah
Informasi pembaruan kumulatif
Masalah ini pertama kali diperbaiki dalam pembaruan kumulatif SQL Server berikut ini.
Setiap pembaruan kumulatif baru untuk SQL Server berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Kami menyarankan Anda mengunduh dan menginstal pembaruan kumulatif terbaru untuk SQL Server:
Hotfix ini mencegah memori habis dan pengurangan berkelanjutan ruang alamat virtual yang tersedia.
Status
Microsoft telah melakukan konfirmasi bahwa masalah ini timbul pada produk Microsoft yang tertera pada bagian "Berlaku untuk".
Informasi Selengkapnya
-
Windows 2012 R2 memungkinkan ruang alamat virtual untuk tumbuh sebesar 128 TB. Oleh karena itu, Anda mungkin tidak melihat masalah ini di lingkungan Windows 2012 R2. Untuk informasi selengkapnya, lihat topik berikut ini di pusat pengembangan Windows:batas memori untuk rilis Windows dan Windows Server
-
Jika Anda melihat perkembangan berkelanjutan dalam ruang alamat virtual bahkan setelah Anda menerapkan perbaikan, Anda bisa menentukan kueri atau operasi mana yang meminta bongkahan memori yang besar dengan menggunakan Page_allocated acara yang diperluas. Contoh skrip terlihat seperti ini:
CREATE EVENT SESSION [memory_tracking] ON SERVERADD EVENT sqlos.page_allocated( ACTION(package0.callstack,sqlos.cpu_id,sqlos.task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.query_hash,sqlserver.request_id,sqlserver.session_id,sqlserver.sql_text) WHERE ([number_pages]>(1)))ADD TARGET package0.event_file(SET filename=N'E:\Data\MSSQL11.MSSQLSERVER\MSSQL\Log\memory_tracking.xel')WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=PER_CPU,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)GO
Biasanya ini adalah cadangan log dan operasi pemeliharaan indeks, yang sering kali terjadi.