หลังจากที่คุณนำการอัปเดตนี้ไปใช้แล้วคุณจำเป็นต้องเพิ่ม ค่าสถานะการติดตาม-T8075 เป็นพารามิเตอร์เริ่มต้นเพื่อเปิดใช้งานการเปลี่ยนแปลงนี้
อาการ
เมื่อคุณเรียกใช้คิวรีใน Microsoft SQL Server ๒๐๑๒เวอร์ชัน๖๔คุณจะได้รับข้อความแสดงข้อผิดพลาดของหน่วยความจำที่คล้ายกับต่อไปนี้ในบันทึกข้อผิดพลาด SQL Server:
หน้าการจัดสรรที่ล้มเหลว: FAIL_PAGE_ALLOCATION ๕๑๓
แบบสอบถามใช้เวลานานในการดำเนินการเสร็จสิ้นและพบ SOS_MEMORY_TOPLEVELBLOCKALLOCATOR รอ เมื่อคุณตรวจสอบจุดข้อมูลต่อไปนี้คุณจะพบว่ามีพื้นที่ที่อยู่เสมือนที่พร้อมใช้งานต่ำมาก:
-
DBCC MEMORYSTATUS-กระบวนการ/ระบบตรวจนับส่วน-หน่วยความจำเสมือนที่พร้อมใช้งาน
-
DMV: sys.dm_os_process_memory-virtual_address_space_available_kb คอลัมน์
ค่าเหล่านี้จะเริ่มต้นประมาณ8เทราไบต์ (TB) บนกระบวนการ x 64 และดำเนินการต่อไปจนถึงจำนวนกิกะไบต์ (GB) เมื่อคุณอยู่ที่ขั้นตอนที่พื้นที่ที่อยู่เสมือนที่พร้อมใช้งานจะต่ำมากแบบสอบถามที่พยายามดำเนินการการจัดสรรหน่วยความจำอาจยังพบชนิดการรอของ CMEMTHREAD จุดข้อมูลต่อไปนี้จะยังคงเพิ่มขึ้นตลอดเวลา:
-
DMV: sys.dm_os_process_memory และ sys.dm_os_memory_nodes-คอลัมน์ virtual_address_space_reserved_kb
-
การ DBCC MEMORYSTATUS-ส่วนตัวจัดการหน่วยความจำ-VM ที่สงวนไว้
ค่าเหล่านี้โดยทั่วไปจะเพิ่มขึ้นในหลายส่วนของค่า "หน่วยความจำสูงสุดของเซิร์ฟเวอร์" จนถึงเกือบ 8 TB
สาเหตุ
เมื่อกระบวนการ SQL Server ได้มาถึงสถานะที่รวมหน่วยความจำของเซิร์ฟเวอร์ = เป้าหมายเซิร์ฟเวอร์หน่วยความจำ = หน่วยความจำเซิร์ฟเวอร์สูงสุด = หน่วยความจำของเซิร์ฟเวอร์ใน SQL Server เพื่อให้การร้องขอการปันส่วนใหม่มีหลายหน้า 8 KB เพื่อให้สำเร็จชั่วคราว รูปแบบการปันส่วนที่ซ้ำกันภายใต้เงื่อนไขดังกล่าวอาจทำให้เกิดการกระจายตัวของบล็อกหน่วยความจำและการใช้พื้นที่ที่อยู่เสมือน ถ้ากระบวนการนี้ทำซ้ำหลายครั้งช่องว่างที่อยู่เสมือนของ SQL Server จะหมดและคุณจะสังเกตเห็นอาการที่กล่าวถึงก่อนหน้านี้
การแก้ไข
ข้อมูลโปรแกรมอัปเดตสะสม
ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตที่สะสมของ SQL Server ครั้งแรก
การอัปเดตที่สะสมใหม่แต่ละรายการสำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตที่สะสมก่อนหน้านี้ เราขอแนะนำให้คุณดาวน์โหลดและติดตั้งการอัปเดตที่สะสมล่าสุดสำหรับ SQL Server:
โปรแกรมแก้ไขด่วนนี้จะป้องกันไม่ให้หน่วยความจำทั้งหมดและการลดพื้นที่ที่อยู่เสมือนที่พร้อมใช้งานที่คุณอาจพบได้อย่างต่อเนื่อง
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"
ข้อมูลเพิ่มเติม
-
Windows ๒๐๑๒ R2 อนุญาตให้มีช่องว่างที่อยู่เสมือนขยายใหญ่เป็น๑๒๘ TB ดังนั้นคุณอาจไม่สังเกตว่าปัญหานี้ในสภาพแวดล้อมของ Windows ๒๐๑๒ R2 สำหรับข้อมูลเพิ่มเติมให้ดูหัวข้อต่อไปนี้ใน Windows Dev Center:ขีดจำกัดของหน่วยความจำสำหรับ windows และการเผยแพร่ Windows Server
-
ถ้าคุณเห็นการเติบโตอย่างต่อเนื่องในช่องว่างที่อยู่เสมือนแม้ว่าคุณจะใช้การแก้ไขคุณสามารถกำหนดว่าจะมีคิวรีหรือการดำเนินการใดที่กำลังร้องขอขนาดใหญ่ของหน่วยความจำโดยใช้ Page_allocated การขยายเหตุการณ์ สคริปต์ตัวอย่างจะมีลักษณะดังนี้
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
โดยทั่วไปแล้วจะเป็นการดำเนินการบันทึกการสำรองข้อมูลและการบำรุงรักษาดัชนีซึ่งเกิดขึ้นบ่อยครั้ง