ใครใช้เธรดคนงานของฉัน SQL Server 2014 - HADR


10

เมื่อเร็ว ๆ นี้เรามีปัญหาเกี่ยวกับสภาพแวดล้อม HADR ของ SQL Server 2014 ซึ่งเซิร์ฟเวอร์ตัวใดตัวหนึ่งขาดเธรดของผู้ปฏิบัติงาน

เราได้รับข้อความ:

กลุ่มเธรดสำหรับกลุ่มความพร้อมใช้งาน AlwaysOn ไม่สามารถเริ่มเธรดผู้ปฏิบัติงานใหม่ได้เนื่องจากมีเธรดผู้ปฏิบัติงานที่พร้อมใช้งานไม่เพียงพอ

ข้อความผิดพลาดเมื่อมันเริ่ม

ฉันแล้วเปิดคำถามอื่นเพื่อให้ได้คำสั่งที่ (ผมคิดว่า) จะช่วยให้ผมวิเคราะห์ปัญหา ( มันเป็นไปได้ที่จะเห็นการใช้งานซึ่ง SPID ซึ่งจัดตารางเวลา (ด้ายคน)? ) แม้ว่าตอนนี้ฉันจะมีแบบสอบถามเพื่อค้นหาเธรดที่ใช้ระบบนี้ แต่ฉันไม่เข้าใจว่าทำไมเซิร์ฟเวอร์นั้นถึงไม่มีเธรดของผู้ปฏิบัติงาน

สภาพแวดล้อมของเรามีดังนี้:

  • 4 Windows Server 2012 R2
  • SQL Server 2014 Enterprise
  • 24 ตัวประมวลผล -> 832 เธรดผู้ทำงาน
  • 256 GB ราม
  • 12 กลุ่มความพร้อมใช้งาน (โดยรวม)
  • 642 ฐานข้อมูล (โดยรวม)

ดังนั้นเซิร์ฟเวอร์ที่มีปัญหามีการกำหนดค่าต่อไปนี้:

  • 5 กลุ่มความพร้อมใช้งาน (3 หลัก / 2 รอง)
  • 325 ฐานข้อมูล (127 หลัก / 198 รอง)
  • MAXDOP = 8
  • Cost Threshold for Parallelism = 50
  • แผนการใช้พลังงานถูกตั้งค่าเป็น "ประสิทธิภาพสูง"

ในการ "แก้ไข" ปัญหาเราจึงล้มเหลวกลุ่มความพร้อมใช้งานหนึ่งกลุ่มไปยังเซิร์ฟเวอร์รอง การกำหนดค่าของเซิร์ฟเวอร์นั้นอยู่ในขณะนี้:

  • 5 กลุ่มความพร้อมใช้งาน (2 หลัก / 3 รอง)
  • 325 ฐานข้อมูล (77 หลัก / 248 รอง)

ฉันกำลังตรวจสอบกระทู้ที่มีอยู่กับคำสั่งนี้:

declare @max int
select @max = max_workers_count from sys.dm_os_sys_info

select 
    @max as 'TotalThreads',
    sum(active_Workers_count) as 'CurrentThreads',
    @max - sum(active_Workers_count) as 'AvailableThreads',
    sum(runnable_tasks_count) as 'WorkersWaitingForCpu',
    sum(work_queue_count) as 'RequestWaitingForThreads' ,
    sum(current_workers_count) as 'AssociatedWorkers'
from  
    sys.dm_os_Schedulers where status='VISIBLE ONLINE'

โดยปกติเซิร์ฟเวอร์จะมีเธรดของผู้ปฏิบัติงานประมาณ 250 - 430 เธรด แต่เมื่อปัญหาเริ่มต้นขึ้นจะไม่มีพนักงานเหลืออยู่

-119 เธรดที่พร้อมใช้งาน

ทุกวันนี้พนักงานที่มีอยู่ลดลงจาก 327 ลงเหลือ 50 แต่เพียงหนึ่งนาทีจากนั้นกลับขึ้นไปอยู่ที่ประมาณ 400

ฉันเห็นคำถามอื่นแล้ว ( การใช้เธรดผู้ทำงานระดับสูงของ HADR ) แต่มันไม่ช่วยฉัน

ระบบของเราทำงานอย่างเสถียรมานานกว่าหนึ่งปีโดยไม่มีปัญหาใด ๆ เราไม่มีข้อผิดพลาดหรือการเปลี่ยนแปลงที่สำคัญอื่น ๆ ในการกระจายฐานข้อมูล

เรากำลังใช้ "การกระทำแบบซิงโครนัส" ระหว่างแบบจำลอง จากความเข้าใจของฉันไม่มีการบีบอัดที่เกี่ยวข้องดูการปรับแต่งการบีบอัดสำหรับกลุ่มความพร้อมใช้งานในเอกสารประกอบ

มีใครมีความคิดว่าสิ่งที่ใช้เธรดผู้ปฏิบัติงานทั้งหมดหรือไม่

แก้ไข: พบหน้านี้ที่มีข้อมูลจำนวนมากเกี่ยวกับปัญหาเหล่านั้นอย่างแน่นอน http://www.techdevops.com/Article.aspx?CID=24

คำตอบ:


1

ชุมชนวิกิพีเดียคำตอบ :

คุณมีฐานข้อมูลจำนวนมากในกลุ่มห้องว่างนั่นจะเป็นที่ที่เธรดของคุณจะไป มีหลายอย่างที่เกี่ยวข้องกับการบีบอัดการเข้ารหัสและค่าใช้จ่ายในการขนส่ง ลองปิดการบีบอัดซึ่งจะลดการใช้เธรดของคุณประมาณหนึ่งในสาม (ขึ้นอยู่กับจำนวนเรพลิกา)

คำถามถูกติดแท็ก SQL Server 2014 ซึ่งจะเป็นการบีบอัดการใช้งานเริ่มต้น ตามค่าเริ่มต้นแล้ว SQL Server 2016 จะไม่ใช้การบีบอัดเพื่อซิงค์

คุณอาจจำเป็นต้องเพิ่มเธรดผู้ปฏิบัติงานบนอินสแตนซ์หรือดีกว่า: สร้างความสมดุลให้กับเธรดที่แอ็คทีฟและที่ไม่แอ็คทีฟบนหลายเซิร์ฟเวอร์ ดูที่เกี่ยวข้อง Q & A AlwaysOn แบบสอบถามกลุ่มความพร้อมช้ามาก

คุณอาจพบว่าเป็นแอปพลิเคชันที่ไม่สามารถปิดคำขอได้อย่างถูกต้อง ซึ่งอาจส่งผลให้เซสชันการนอนหลับจำนวนมากอยู่รอบ ๆ (ซึ่งกินคนงาน)

จำนวนเธรดที่ใช้จริงขึ้นอยู่กับการใช้งานฐานข้อมูล คุณสามารถมีฐานข้อมูลได้ 1,000 ฐานและหากส่วนใหญ่ไม่มีการใช้งาน 95% คุณจะไม่มีปัญหาใด ๆ ดูเหมือนว่าฐานข้อมูลของคุณมีการใช้งานบ่อยขึ้นและกินเธรดของคุณมากขึ้น นั่นคือความยาวและระยะสั้นของมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.