SQL Server - ใครก็ตามที่ใช้ SUMA, ค่าสถานะการสืบค้นกลับ 8048 หรือค่าสถานะการติดตาม 8015


21

เมื่อเร็ว ๆ นี้รวมถึงการเริ่มต้นของ SQL Server ติดตามการตั้งค่าสถานะ 8048 เพื่อแก้ไขปัญหา contention spinlock ที่ร้ายแรงในระบบ SQL Server 2008 R2

สนใจที่จะได้ยินจากผู้อื่นที่พบกรณีการใช้งานที่ค่าประสิทธิภาพถูกส่งโดยการติดตามค่าสถานะ 8048 (เลื่อนระดับกลยุทธ์การจัดสรรหน่วยความจำแบบสอบถามจากโหนดต่อ NUMA ไปยังแกนหลัก), สถานะการติดตาม 8015 (SQL Server ละเว้นฟิสิคัล NUMA) หรือ SUMA ( มีการเข้าถึงหน่วยความจำที่สม่ำเสมอเพียงพอตัวเลือก BIOS ในเครื่อง NUMA บางเครื่อง)

ติดตามสถานะ 8048 http://blogs.msdn.com/b/psssql/archive/2011/09/01/sql-server-2008-2008-r2-on-newer-machines-with-more-than-8-cpus -presented ต่อ Numa โหนด พ.ค. จำเป็นร่องรอยธง 8048.aspx

ติดตามสถานะ 8015 http://blogs.msdn.com/b/psssql/archive/2010/04/02/how-it-works-soft-numa-io-completion-thread-lazy-writer-workers-and-memory -nodes.aspx

รายละเอียดเกี่ยวกับปริมาณงานของระบบรวบรวมตัวชี้วัดจากระบบที่มีปัญหาและรวบรวมตัวชี้วัดจากระบบหลังจากการแทรกแซงตาม

การตั้งค่าสถานะการสืบค้นกลับ 8048 เป็น 'แก้ไข' แต่แก้ไขได้ดีที่สุดหรือไม่ SQL Server จะเพิกเฉย NUMA ทางกายภาพเนื่องจากการติดตามสถานะ 8015 ได้ทำสิ่งเดียวกันหรือไม่ สิ่งที่เกี่ยวกับการตั้งค่า BIOS ให้หน่วยความจำ interleave ปล่อยให้เซิร์ฟเวอร์ที่มีพฤติกรรม SUMA เลียนแบบ SMP แทนพฤติกรรม NUMA?

ความสงบ! tw: @sql_handle


เกี่ยวกับระบบ: - Xeon E7540 @ 2.00GHz จำนวน 4 แกนไฮเปอร์เธรด - 128 GB RAM - WS2008R2 - MSSQL 2008 R2 SP2 - maxdop 6


เกี่ยวกับปริมาณงาน: - รายงานที่จัดตารางเวลา / รอคิวเป็นชุดจำนวน 1,000 ชุดขับเคลื่อนจากแอปพลิเคชันเซิร์ฟเวอร์รายงาน 2 ชุด - 3 ชุดของรสชาติ: รายวันรายสัปดาห์รายเดือน - การเชื่อมต่อเซิร์ฟเวอร์แอปพลิเคชันรายงานทั้งหมดไปยัง SQL Server ทำขึ้นเป็นบัญชีบริการเดียว - รายงานพร้อมกันสูงสุด = 90


การค้นพบที่สำคัญเกี่ยวกับระบบที่มีปัญหา: - จาก Perfmon ช่วงเวลา 15 วินาที - - ระบบยังคงอยู่ที่ 95% -100% CPU ไม่ว่าง - - การค้นหาหน้าบัฟเฟอร์ของเซิร์ฟเวอร์ SQL <10,000 ต่อ / วินาที

  • จาก DMV รอและ spinlock ช่วงเวลา 5 นาที
    • บริกร CMEMTHREAD สูงและเวลารอ
    • SOS_SUSPEND_QUEUE สูงหมุนและถอยกลับ

โพสต์บล็อกของวิศวกร CSS ของ Bob Dorr บนค่าสถานะการสืบค้นกลับ 8048 บ่งชี้ว่าระบบที่มีมากกว่า 8 คอร์ต่อโหนด NUMA สามารถทำงานในอาการที่คล้ายกันเนื่องจากปัญหาคอขวดในการจัดสรรหน่วยความจำแบบสอบถาม การติดตามการตั้งค่าสถานะ 8048 จะเปลี่ยนกลยุทธ์เป็นต่อแกนแทนโหนดต่อ NUMA


การแทรกแซง

MSSQL เริ่มต้นใหม่ด้วย -T8048 ความแตกต่างเห็นได้ชัดทันที: อัตราการค้นหาหน้าบัฟเฟอร์เพิ่มขึ้นมากกว่า 1 ล้านและเพิ่มขึ้นเป็น 8 ล้านต่อวินาที ภาระงานแบตช์ที่มีปัญหาซึ่งก่อนหน้านี้ไม่สามารถเสร็จสมบูรณ์ใน 24 ชั่วโมงแล้วเสร็จในเวลาน้อยกว่า 4 ชั่วโมง ปริมาณงานชุดอื่นที่ไม่ได้มุ่งเน้นการตรวจสอบหรือการแทรกแซงถูกส่งเป็นส่วนหนึ่งของการตรวจสอบค่าการแก้ไขของการติดตามธง 8048 (และสร้างความมั่นใจว่าผลข้างเคียงที่ไม่พึงประสงค์ของมันน้อยที่สุด) ชุดรายงานนี้เสร็จสมบูรณ์ก่อนหน้านี้ใน 2 ชั่วโมง; ด้วยการตั้งค่าสถานะการติดตาม 8048 ชุดรายงานจะเสร็จสมบูรณ์ในเวลาประมาณ 20 นาที

ETL ทุกคืนก็ได้รับประโยชน์เช่นกัน เวลา ETL ลดลงจากประมาณ 60 นาทีเป็น 40 นาที

ดึงข้อมูลจากหลาย ๆ ที่เข้าด้วยกันฉันคาดการณ์ว่าการจัดคิวรายงานในระดับสูงรายงานที่เกิดขึ้นพร้อมกันจะนับมากกว่าจำนวนเธรดของฮาร์ดแวร์และบัญชีผู้ใช้เดียวสำหรับรายงานทั้งหมดที่รวมกันเพื่อสร้างแรงกดดันต่อโหนด NUMA โหนดเดียว จะไม่ได้รับการร้องขอการเชื่อมต่อขาเข้าครั้งต่อไปสำหรับบัญชีผู้ใช้เดียวกันซึ่ง ณ จุดนี้ NUMA โหนดถัดไปจะได้รับการเชื่อมต่อจำนวนหนึ่งใกล้ทันที แต่ละโหนด NUMA จะจบลงด้วยความน่าจะเป็นสูงในการทำให้เกิดปัญหาคอขวดของหน่วยความจำแบบสอบถาม

การเปิดช่องทางเพิ่มเติมสำหรับหน่วยความจำคิวรีให้ลบคอขวด แต่ฉันไม่แน่ใจว่าค่าใช้จ่าย การโพสต์ CSS ของ Bob Dorr ทำให้ชัดเจนว่ามีโอเวอร์เฮดหน่วยความจำเพิ่มเติมด้วยค่าสถานะการติดตาม 8048 ค่าใช้จ่ายนั้นอยู่ในขอบเขตการจัดสรรหน้าเดียวซึ่งควบคุมโดยหน่วยความจำเซิร์ฟเวอร์ MSSQL 2008 R2 สูงสุดหรือไม่ ถ้าเป็นเช่นนั้นฉันเดาว่าระบบจะมีหน้าฐานข้อมูลจำนวนน้อยลงในแคชพูลบัฟเฟอร์ ถ้าไม่ควรหน่วยความจำเซิร์ฟเวอร์สูงสุดควรลดลงเพื่อรองรับ?

คำตอบ:


12

นี่เป็นโพสต์ที่ยอดเยี่ยม

ในการตอบคำถามสุดท้ายของคุณฉันคาดการณ์ว่าคำตอบของคุณคือ "ใช่"

ที่กล่าวว่าฉันอาจจะมีการติดตาม Numa อ่อนก่อนที่จะหันไปใช้ธงติดตาม ฉันคิดว่าคุณพูดถูกเกี่ยวกับการจัดสรรโหนด numa และนั่นอาจเป็นสาเหตุของปัญหาของคุณ ผ่าน soft numa คุณสามารถขยายคำร้องขอได้ขึ้นอยู่กับจำนวนโหนด numa ของคุณ (4?) - ถึง 4 หากเป็นจำนวนที่ถูกต้องจากนั้นกำหนดผ่านที่อยู่ ip แต่ละโฮสต์ไปยังโหนด numa ที่เฉพาะเจาะจงเพิ่มเติม เพื่อที่ฉันจะปิดการใช้งานเธรดไฮเปอร์ เมื่อรวมกันแล้วปัญหาน่าจะลดลง แต่ก็ทำได้ด้วยค่าใช้จ่ายของตัวกำหนดเวลาที่น้อยลง

ในความคิดที่แยกจากกันฉันจะดูการกำหนดพารามิเตอร์แบบบังคับ - ความจริงที่ว่าโหลดของคุณกำลังขับ CPU ของคุณสูงมากน่าสนใจและอาจคุ้มค่าที่จะดู

สุดท้ายในหลายโหนดระบบฉันมักจะมีผลลัพธ์ของแบบสอบถามต่อไปนี้ทิ้งไปยังตารางทุก ๆ N วินาที ทำการวิเคราะห์ที่น่าสนใจเมื่อมีการเปลี่ยนแปลงเวิร์กโหลดหรือแฟล็กการติดตาม:

SELECT getdate() as poll_time, node_id, node_state_desc, memory_node_id, online_scheduler_count, active_worker_count, avg_load_balance, idle_scheduler_count
FROM sys.dm_os_nodes WITH (NOLOCK) 
WHERE node_state_desc <> N'ONLINE DAC'

และ

SELECT top 10 getdate() as sample_poll, wait_type, count (*)
FROM sys.dm_os_waiting_tasks
WHERE [wait_type] NOT IN
('CLR_SEMAPHORE','LAZYWRITER_SLEEP','RESOURCE_QUEUE','SLEEP_TASK','SLEEP_SYSTEMTASK',
'SQLTRACE_BUFFER_FLUSH','WAITFOR', 'BROKER_TASK_STOP',
'BROKER_RECEIVE_WAITFOR', 'OLEDB','CLR_MANUAL_EVENT', 'CLR_AUTO_EVENT' ) 
GROUP BY wait_type
ORDER BY COUNT (*) DESC

ขอขอบคุณที่กล่าวถึง sys.dm_os_nodes และ sys.dm_os_waiting_tasks ฉันกำลังเขียนโพรซีเดอร์ที่เก็บไว้จำนวนหนึ่งไปยังระบบโปรไฟล์แบบแอคทิวิตี้ก่อนอื่นเพื่อทำการหาค่าพื้นฐานที่เหมาะสมที่สุดจากนั้นจึงดูความแปรปรวน ตอนนี้จับรอและสปินถัดมามอบให้แก่หน่วยความจำ (รวม DOP ต่อทุนหน่วยความจำ) ... บริกรของแต่ละบุคคลต่อไปและโหนดที่คุณกล่าวถึง ... แล้วอาจจะไปเสมียนหน่วยความจำและเคาน์เตอร์แคช ...
sql_handle ที่

1
ตัวนับที่น่าสนใจอีกตัวที่ต้องดูคือใน perfmon: SQLServer: Buffer Node: ตัวนับในตระกูลที่น่าสนใจ ได้แก่ เพจต่างประเทศหน้าฟรีหน้าคาดหวังชีวิตหน้ารวมหน้าเป้าหมายและหน้าถูกขโมย ฉันคาดเดาว่าก่อนที่คุณจะใช้การตั้งค่าสถานะการติดตามว่าคุณมีเพจต่างประเทศจำนวนมาก - คุณเปิดใช้งาน TF 834 หรือไม่? ถ้าเป็นเช่นนั้นฉันพบว่ามันไม่ได้จัดสรรหน่วยความจำให้กับแต่ละโหนด numa ในรูปแบบที่สมดุลซึ่งนำไปสู่การค้นหาหน่วยความจำโหนด numa ระยะไกลที่มีราคาแพงมาก ระบบที่ฉันมีปัญหานี้มี ram ขนาด 1TB ในเวลานั้น
Jeremy Lowell

จุดที่ดี ฉันเฝ้าดูตัวชี้วัดโหนดบัฟเฟอร์ สิ่งที่อยากรู้มากที่สุดคือในตอนแรกโหนด 00 ไม่มีเพจต่างประเทศในขณะที่โหนดอื่นมีจำนวนมาก ฉันคิดว่าเป็นเพราะ ETL ของเรามีการเพิ่มบัฟเฟอร์ด้วยจำนวนเธรดที่ต่ำพอที่จะพอดีกับบัฟเฟอร์โหนด / NUMA โหนด 00 เราไม่ได้เปิดใช้งานการติดตามสถานะ 834 แต่จะเริ่มการทดสอบในไม่ช้า การทดสอบเวิร์กโหลดของเราบน Linux Oracle 11gR2 มีประโยชน์อย่างมากต่อหน่วยความจำเพจขนาดใหญ่ฉันคิดว่าเราจะเห็นผลกำไรใน Windows ด้วย SQL Server ด้วย
sql_handle

@Mike Soft NUMA กับ TF 8048 ฉันคิดว่า soft NUMA จะอนุญาตให้ฉันสร้าง 'memory nodes' ภายใน NUMA nodes ดังนั้นถ้าฉันสร้าง NUMA ที่อ่อนนุ่มสำหรับแต่ละคอร์จะมี (อาจ) เป็น 24 เลนสำหรับการร้องขอให้หน่วยความจำแบบสอบถาม แต่อาจเป็น 24 หน่วยความจำโหนด? ฉันกังวลเกี่ยวกับค่าใช้จ่ายเล็กน้อยในการจัดการหน่วยความจำ 24 โหนดกับทุกแกนที่ทำการอ้างอิงหน้า 'ต่างประเทศ' ทุกครั้งที่ข้ามขอบเขต NUMA ที่อ่อนนุ่มและการอ้างอิงจากต่างประเทศจริง ๆเมื่อข้ามเขตแดนไปยังหน้าอ้างอิงที่แตกต่างกัน อ่อน NUMA และยาก NUMA ฉันจะคนจรจัดและดูว่าฉันสามารถมองเห็นอะไร
sql_handle
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.