ASYNC_NETWORK_IO รอพิมพ์อะไรที่กังวลหรือไม่


16

ในการดูรายการของโพรซีเดอร์ที่เก็บไว้ซึ่งใช้เวลาในการประมวลผลนานจะมีความโดดเด่นที่ทำให้เกิดการรอคอยมากที่สุด อย่างไรก็ตามการรอนั้นส่วนใหญ่ (81%) เป็น ASYNC_NETWORK_IO และฉันรู้ว่าทำไม: กระบวนการที่เก็บไว้จะถ่ายโอนข้อมูลประมาณ 400 MB

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

เมื่อได้รับข้อมูลนี้ฉันควรกังวลเกี่ยวกับประเภทรอ ASYNC_NETWORK_IO สำหรับกระบวนการนี้หรือไม่? จริง ๆ แล้วมันมีผลต่อประสิทธิภาพของเซิร์ฟเวอร์หรือไม่

ข้อมูลเพิ่มเติม:

  • ฉันใช้ Service Pack 2 ของ SQL Server 2005
  • แอปไคลเอ็นต์อยู่ในกล่องเดียวกับ SQL Server (ฉันรู้ว่าฉันรู้ ... แต่ฉันไม่สามารถทำอะไรกับมันได้)

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

แอปไคลเอ็นต์เชื่อมต่อโดยใช้หน่วยความจำที่แชร์หรือ TCP / IP หรือไม่ แอพไคลเอ็นต์และ SQL Server แชร์ชุดแกนประมวลผลชุดเดียวกันหรือคุณใช้เทคนิคการปิดบังความสัมพันธ์เพื่อแยกพวกเขาออกหรือไม่
Jon Seigel

เป็นประเภทการเชื่อมต่อเริ่มต้น - ไม่มีอะไรพิเศษ - ดังนั้นจึงใช้หน่วยความจำที่ใช้ร่วมกัน แอพทั้งสองที่ใช้คอร์ชุดเดียวกัน - ไม่มีความเกี่ยวข้อง
AngryHacker

ที่เก็บ SAN ของคุณหรือในพื้นที่?
Eric Higgins

@EricHiggins เพียงฮาร์ดไดรฟ์ RAIDed ในเครื่อง
AngryHacker

คำตอบ:


14

ตามที่คุณกล่าวไว้ประเภทการรอนี้จะระบุว่าแอปพลิเคชันไม่ได้ทำงานกับ SQL Server ตอนนี้สิ่งที่จริงหมายถึงคือว่า SQL Server ไม่สามารถส่งข้อมูลผ่านเครือข่ายเร็วเท่าที่ต้องการ

อาจมีสาเหตุสองประการ:

  1. แอปเขียนอย่างไม่มีประสิทธิภาพและประมวลผลแถวไม่เร็วพอ
  2. เครือข่ายมีการขยายสูงสุด

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

ในกรณีหลังคุณจะต้องมีการเชื่อมต่อทั้งหมดรอที่ ASYNC_NETWORK_IO คุณควรจะเห็นผลกระทบนั้นชัดเจน


สำหรับสัญลักษณ์หัวข้อ 1 การดึงข้อมูลทำได้ผ่าน ADO.NET โดยใช้รหัสมาตรฐาน: var dataSet = new DataSet(); var da = new SqlDataAdapter(command); da.Fill(dataSet); ดังนั้นฉันไม่แน่ใจว่าสิ่งที่อาจช้า
AngryHacker

สำหรับสัญลักษณ์แสดงหัวข้อ 2 แอปพลิเคชันอยู่ในกล่องเดียวกันกับ SQL และการเชื่อมต่อผ่านวิธีแชร์หน่วยความจำ ในทางทฤษฎีแล้วมันควรเร็วสุด ๆ
AngryHacker
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.