ค่ากลางของช่วงเวลาของ SQL Server อาจไม่ถูกต้องเมื่อคุณใช้โปรแกรมอรรถประโยชน์หรือเทคโนโลยีที่เปลี่ยนแปลงความถี่ของ CPU


สรุป


Microsoft SQL Server 2005 ใช้ตัวนับ CPU ที่มีความละเอียดสูงเพื่อให้มีความสามารถในการกำหนดเวลา microsecond การ microsecond เป็น millionth หนึ่งวินาที (หรือหนึ่งในพันส่วนของเป็นมิลลิวินาที) อย่างไรก็ตาม ค่ากลางของช่วงเวลาของ SQL Server อาจไม่ถูกต้องถ้าคุณใช้เทคโนโลยีที่เปลี่ยนแปลงความถี่ของ CPU ตัวอย่างเช่น ปัญหานี้อาจเกิดขึ้นเมื่อคุณใช้เทคโนโลยีต่อไปนี้:
  • CPU ดำเนินงาน
  • AMD Cool'n'Quiet เทคโนโลยี
  • ชุดรูปแบบพลังงานต่าง ๆ
บทความนี้ประกอบด้วยวิธีการและข้อมูลเพิ่มเติมเพื่อช่วยให้คุณหลีกเลี่ยงปัญหานี้

อาการ


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

สาเหตุ


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

การแก้ปัญหา


ข้อมูล Service pack

เมื่อต้องการแก้ไขปัญหานี้ ขอรับ service pack ล่าสุดสำหรับ SQL Server 2005 สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
913089วิธีการขอรับ service pack ล่าสุดสำหรับ SQL Server 2005
หมายเหตุ ใน SQL Server 2005 Service Pack 3 และรุ่นที่ใหม่กว่าเซอร์วิสแพ็ค จะไม่มีใช้การประทับเวลาของตัวประมวลผล SQL Server 2005 รุ่นเหล่านี้ใช้ตัวจับเวลาที่เชื่อถือได้ที่มีความแม่นยำสูงสุดของมิลลิวินาทีที่ 1

สถานะ


ปัญหานี้ถูกแก้ไขใน SQL Server 2005 Service Pack 3 ครั้งแรก

วิธีแก้ปัญหา


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

การตั้งค่าคอนฟิกการจัดการพลังงานบนคอมพิวเตอร์เพื่อบังคับใช้ Cpu จะยังคงอยู่ที่ความถี่สูงสุด

เมื่อต้องการทำเช่นนี้ ให้ทำตามขั้นตอนเหล่านี้
  1. คลิกเริ่มคลิกเรียกใช้พิมพ์Powercfg.cplและคลิกตกลง
  2. ในกล่องโต้ตอบคุณสมบัติตัวเลือกพลังงานคลิกบนเสมอในรายการชุดรูปแบบพลังงาน
  3. คลิก ตกลง
การเคลื่อนตัวอาจเกิดขึ้น การเคลื่อนตัวเป็นการ divergence ระหว่างค่าความถี่ของ CPU สำหรับข้อมูลเพิ่มเติม ให้ดูส่วน "เลื่อน" ในกรณีนี้ คุณต้องเริ่มต้น Microsoft Windows เพื่อรีซิงโครไนส์ความถี่ของ Cpu ทั้งหมดหลังจากคุณเปลี่ยนชุดรูปแบบพลังงาน

ถ้าคุณไม่รีสตาร์ทคอมพิวเตอร์ เปิดใช้งานความสัมพันธ์ตัวประมวลผลของ SQL Server เมื่อต้องการป้องกันไม่ให้ย้ายไปมาระหว่าง cpu หรือเธรดตัวทำงานของ SQL Server เมื่อคุณทำเช่นนี้ คุณไม่จำเป็นต้องรีสตาร์ทคอมพิวเตอร์แม้ว่าการ divergence ระหว่างค่าความถี่ของ CPU เกิดขึ้น เมื่อต้องการเปิดใช้งานการเชื่อมโยงกับตัวประมวลผลของ SQL Server สำหรับ Cpu ทั้งหมดบนเซิร์ฟเวอร์ คุณต้องใช้ตัวพรางที่แตกต่างกัน ขึ้นอยู่กับจำนวนของตัวประมวลผลแบบลอจิคัลที่อยู่บนเซิร์ฟเวอร์

ตารางต่อไปนี้แสดงสถานการณ์สมมติตัวอย่าง
หมายเลขของ CPUคำสั่งเพื่อเปิดใช้งานการเชื่อมโยงกับตัวประมวลผล
Cpu หรือ 02exec sp_configure 'ความเกี่ยวข้องของตัวพราง' 0x00000003
GO
กำหนดค่าใหม่
GO
04 Cpuexec sp_configure 'ความเกี่ยวข้องของตัวพราง' 0x0000000F
GO
กำหนดค่าใหม่
GO
Cpu หรือ 08exec sp_configure 'ความเกี่ยวข้องของตัวพราง' 0x000000FF
GO
กำหนดค่าใหม่
GO
Cpu หรือ 16exec sp_configure 'ความเกี่ยวข้องของตัวพราง' 0x0000FFFF
GO
กำหนดค่าใหม่
GO
Cpu 32exec sp_configure 'ความเกี่ยวข้องของตัวพราง' 0xFFFFFFFF
GO
กำหนดค่าใหม่
GO
หมายเหตุ คุณอาจไม่เพียงพอในการปิดใช้งานลักษณะการทำงานของการเปลี่ยนแปลงความถี่ของ CPU ในระดับ BIOS โปรแกรมอรรถประโยชน์ของบริษัทต่าง ๆ สามารถเปลี่ยนความถี่ของ CPU บางอย่างใช้งานเปิดใช้งานการปรับปรุงความถี่แม้ว่า Cpu อยู่ภายใต้การตั้งค่าชุดรูปแบบพลังงานสูงสุด ในกรณีนี้ คุณต้องปิดใช้งานโปรแกรมอรรถประโยชน์ของบริษัทอื่นเหล่านี้เมื่อคุณทำการปรับแต่งใน SQL Server 2005 ประสิทธิภาพการทำงาน

ใช้โปรแกรมอรรถประโยชน์ของบริษัทอื่นและโปรแกรมควบคุมเพื่อซิงโครไนส์ความถี่ที่ CPU และตัวนับนาฬิกาของ CPU

ยาก ระบบอาจต้องการปรับปรุงจากผู้ผลิตเมื่อต้องการแก้ไขปัญหาความถี่ของ CPU แนวทางปฏิบัติในการตรวจสอบระบบสำหรับโปรแกรมปรับปรุง BIOS, microcode และเฟิร์มแวร์รุ่นล่าสุดหากคุณสงสัยว่า ระบบอาจมีปัญหาได้

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


Microsoft SQL Server 2000 และรุ่นก่อนหน้านี้ของ SQL Server ใช้กลไกการกำหนดเวลาของ Windows กลไกการกำหนดเวลาที่ใช้ค่าความแม่นยำของมิลลิวินาที โดยทั่วไป ความแม่นยำนี้เป็น ms. 10 ถึง 15 อย่างไรก็ตาม ความแม่นยำอาจมีขนาดใหญ่ 55 ms แบบสอบถาม SQL Server ให้เสร็จสมบูรณ์ภายในมิลลิวินาทีโดยบ่อย หรือระยะเวลา microsecond ความแม่นยำนี้จำเป็นต้องมีตัวจับเวลาที่มีความละเอียดสูง ดังนั้น รุ่นของ SQL Server รายงานระยะเวลาของแบบสอบถามบางอย่างเป็น 0 ms. Therefore จึงยากที่จะตรวจสอบประสิทธิภาพการทำงาน และปรับแต่งประสิทธิภาพการทำงาน SQL Server ใน SQL Server รุ่นก่อนหน้า

SQL Server 2005 ช่วยปรับปรุงความถูกต้อง โดยใช้ตัวตรวจนับ CPU ที่มีความละเอียดสูงเพื่อให้มีความสามารถในการกำหนดเวลา microsecond เมื่อคุณใช้เทคโนโลยีที่ระบุไว้ในส่วน "สรุป" กำหนดเวลารายงานค่าอาจไม่ถูกต้อง

ปัญหานี้อาจมีผลต่อวัตถุและลักษณะการทำงานต่อไปนี้:
  • เหตุการณ์การสืบค้นกลับ:
    • เหตุการณ์ดึงดูดความสนใจ
    • เหตุการณ์ในกระบวนงานที่เก็บไว้โหนด
    • เหตุการณ์ในโหน TSQL
    • เหตุการณ์ในโหนวัตถุ
    • เหตุการณ์ในโหนธุรกรรม
  • มุมมองการจัดการแบบไดนามิก:
    • sys.dm_exec_query_stats
    • sys.dm_exec_requests
    • sys.dm_exec_sessions
    • sys.dm_io_pending_io_requests

    • sys.dm_os_ring_buffers
    • sys.dm_os_sys_info
    • sys.dm_io_virtual_file_stats
    • sys.dm_os_wait_stats
  • คำสั่งเวลาตั้งค่าสถิติ
  • ตารางระบบsysprocesses
หลังจากที่คุณติดตั้ง SQL Server 2005 Service Pack 2 (SP2), SQL Server ล็อกข้อผิดพลาดในล็อกข้อผิดพลาดเมื่อเซิร์ฟเวอร์ SQL ตรวจพบว่า ตัวจับเวลาความละเอียดสูงจะซิงค์กันระหว่าง Cpu ข้อความแสดงข้อผิดพลาดบ่งชี้ว่า เวลาประสิทธิภาพการทำงานอาจไม่ถูกต้อง และผู้ใช้ควรใช้ข้อมูลประสิทธิภาพการทำงาน ด้วยความระมัดระวัง

ข้อความของข้อความแสดงข้อผิดพลาดคล้ายกับข้อความแสดงข้อผิดพลาดต่อไปนี้:
ข้อความแสดงข้อผิดพลาด 1
ไม่มีการซิงโครไนส์นับการประทับเวลาของ CPU บน id ตัวจัดกำหนดการ 2 กับ cpu หรืออื่น ๆ
ข้อความแสดงข้อผิดพลาด 2
ความถี่ของการประทับเวลาของ CPU ได้มีเปลี่ยนจาก 191469 เป็นเครื่องหมายขีด 1794177 ต่อมิลลิวินาที จะใช้ความถี่ใหม่
SQL Server ใช้คำสั่งตัวนับการประทับเวลาจริง (RDTSC) เพื่อรับการตรวจนับขีด CPU 64-บิต คุณสามารถแบ่งค่านี้ ด้วยความถี่ที่ CPU เพื่อแปลงค่าเป็นค่ามิลลิวินาที ความแตกต่างของเวลาสามารถเกิดขึ้นได้เมื่อมีการเปลี่ยนแปลงความถี่ที่ CPU หรือเลื่อนเกิดซ้ำ

CPU ดำเนินงาน

CPU ดำเนินงานถูกกำหนดให้เป็นการเปลี่ยนแปลงที่กระทำในความถี่ที่ CPU CPU ดำเนินงานอาจถูกรู้จักกันในชื่อเทคโนโลยี Intel SpeedStep หรือ AMD PowerNow เทคโนโลยี เมื่อ CPU ดำเนินงานเกิดขึ้น ความเร็วของ CPU อาจเพิ่ม หรือลดขนาดเล็ก 50 MHz เพื่อประหยัดพลังงาน และลดผลผลิตความร้อนขึ้น Cpu ที่อยู่ภายในโหนดเดียว (NUMA) ในการเข้าถึงหน่วยความจำที่ไม่เหมือนกัน ปรับความถี่อย่างอิสระ

ตารางต่อไปนี้อธิบายวิธีเปลี่ยนแปลงการดำเนินงานของ CPU อาจมีผลต่อกำหนดเวลาคำนวณ
การดำเนินการเครื่องหมายขีด RDTSCเครื่องหมายขีดต่อมิลลิวินาที (ความถี่)เวลาของนาฬิกาในพื้นที่โพสต์ข้อมูล
เริ่มต้นชุดงาน12000
ความถี่ขั้นตอนลง2001001ms
ชุดงานสิ้นสุด5003ms
ผลรวม5004ms
SQL Server รวบรวมเครื่องหมายขีด RDTSC ที่เครื่องหมายขีด RDTSC เริ่มต้นและสิ้นสุด แล้ว SQL Server หารเครื่องหมายขีด ด้วยค่าความถี่

ในตัวอย่างนี้ การคำนวณเวลาดังต่อไปนี้เกิดขึ้นเมื่อคุณใช้ค่าความถี่ของ 200 หรือ 100:
  • ความถี่ที่ 200: 500/200 = 2.5 ms
  • ความถี่ที่ 100: 500/100 = 5 มิลลิวินาที
การคำนวณช่วงเวลาที่ไม่ตรงกันกับเวลานาฬิกาผนังจริงของ 4 ms

ถ้ามีการคำนวณนี้จะใช้ในการRPC: เสร็จสมบูรณ์ติดตามเหตุการณ์ระยะเวลาและเวลาสิ้นสุดคอลัมน์ข้อมูลที่มีรายงานอย่างไม่ถูกต้อง การRPC: เสร็จสมบูรณ์เวลานาฬิกาผนังเริ่มต้นที่รวบรวมเหตุการณ์ และ CPU ขีดนับ เมื่อต้องการรับช่วงเวลาความละเอียดสูงกว่าที่ Windows จัดหาใน SQL Server 2005ระยะเวลาและเวลาสิ้นสุดคอลัมน์ข้อมูลใน SQL Server สืบค้นกลับจะถูกคำนวณ โดยใช้จำนวนสัญญาณนาฬิกา CPU ผ่านไป คอลัมน์เวลาสิ้นสุดจะคำนวณ โดยการเพิ่มระยะเวลาคอลัมน์ไปยังคอลัมน์เวลาเริ่มต้น ในตัวอย่างนี้เวลาสิ้นสุดคอลัมน์ถูกคำนวณ โดยการเพิ่ม 2.5 ms หรือ 5 ms จนถึงเวลาเริ่มต้นไม่ถูกต้อง

การเคลื่อนตัวของ

เลื่อนเป็นการ divergence ในค่านาฬิกา CPU ระบบที่มีหลาย cpu หรือสามารถสร้างค่านาฬิกา CPU แตกต่างกันสำหรับจุดเดียวกันในเวลา ถึงแม้ว่าจะไม่ทั่วไป cpu หรืออาจพบนาฬิกาเว้นวรรคเมื่อเวลาผ่านไป

ตัวอย่างต่อไปนี้สาธิตวิธีการเคลื่อนตัวของการเปลี่ยนแปลงอาจมีผลต่อผลลัพธ์ของคอลัมน์ข้อมูลระยะเวลาในการสืบค้นกลับ SQL Server ตัวอย่างนี้สันนิษฐานว่า ความถี่ที่ CPU ยังคงมั่นคงที่เครื่องหมายขีด 200 ต่อมิลลิวินาที ตารางต่อไปนี้แสดงให้เห็นเหตุการณ์ในสถานการณ์นี้
การดำเนินการCPU ที่กำหนดเวลาไว้ของ WindowsCPU 1 RDTSCCPU 2 RDTSCเวลาของนาฬิกาในพื้นที่โพสต์ข้อมูล
เริ่มต้นชุดงาน110011000
ชุดงานสิ้นสุด290019004 ms
ผลรวม4 ms
SQL Server รวบรวมเครื่องหมายขีด RDTSC ทั้งระดับจุดเริ่มต้นและจุดสิ้นสุด แล้ว SQL Server หารเครื่องหมายขีด RDTSC ด้วยค่าความถี่ ในตัวอย่างนี้ Windows จัดกำหนดการเธรดของผู้ปฏิบัติงาน SQL Server บน Cpu ที่แตกต่างกันสอง เธรดของผู้ปฏิบัติงาน SQL Server ที่ให้บริการชุดงานรันบน CPU แรก (CPU 1) ก่อน

อย่างไรก็ตาม การดำเนินการชุดงานถูกขัดจังหวะในบางจุด และ SQL Server ดำเนินการชุดงานที่ส่งไปยังคิวที่ค้างอยู่ เมื่อ SQL Server ส่งเธรดของผู้ปฏิบัติงาน SQL Server ที่ให้บริการชุดงานนี้ลงในคิว runnable อีกครั้ง Windows จัดการเธรดที่เรียกใช้บน CPU ตัวที่สอง (CPU 2) เธรดของผู้ปฏิบัติงาน SQL Server เสร็จสมบูรณ์แล้วเรียกใช้บน CPU 2 เนื่องจาก มีการเคลื่อนตัวของ CPU ค่าขีดสิ้นสุดที่ถูกจับภาพจาก CPU 2 1900 แทน 900 คุณสามารถหลีกเลี่ยงปัญหานี้ถ้าคุณเปิดใช้งานการเชื่อมโยงกับตัวประมวลผลของ SQL Server

การคำนวณเวลาดังต่อไปนี้จะใช้ในตัวอย่างนี้:
  • แต่ไม่ถูกต้องในรายงานมูลค่า: (1900 – 100 = 1800) / 200 = 9 ms
  • แก้ไขค่า: (900 – 100 = 800) / 200 = 4 ms
ค่าของคอลัมน์สำหรับช่วงเวลา RPC: เสร็จสมบูรณ์จะมีรายงานเหตุการณ์เป็น ms 9 แทนที่เป็น 4 ms. ผลลัพธ์นี้เป็นคู่ค่าถูกต้องของ 4 ms มากกว่า

ข้อความคำเตือนเกี่ยวกับการเลื่อนบวกเข้ากับ SQL Server 2005 เพื่อบ่งชี้ว่า การแสดงผลลัพธ์ของประสิทธิภาพการทำงานที่กล่าวถึงก่อนหน้านี้อาจเชื่อถือไม่ ในบางสถานการณ์ uncovered, SQL Server 2005 SP2 อาจรายงานข้อความเตือนต่อไปนี้:
  • ข้อความคำเตือนการเคลื่อนตัวของเท็จ
  • การเคลื่อนตัวจะกลายเป็น หลักสิบมิลลิวินาทีโดยไม่ก่อให้เกิดผลเป็นระบบอย่างเห็นได้ชัด
คุณต้องระมัดระวังเมื่อคุณประเมินการแสดงผลลัพธ์ที่เกี่ยวข้องกับประสิทธิภาพการทำงานและเมื่อคุณเปรียบเทียบการแสดงผลอื่นที่เกี่ยวข้องกับประสิทธิภาพการทำงานเพื่อกำหนดเวลาของนาฬิกาผนัง ถ้ามีอยู่ไม่มีสัญญาณของปัญหาด้านประสิทธิภาพอื่น ๆ คุณสามารถละเว้นข้อความคำเตือนการเคลื่อนตัวโดยทั่วไป ตัวอย่างเช่น คุณสามารถละเว้นข้อความคำเตือนการเคลื่อนตัวในสถานการณ์ต่อไปนี้โดยทั่วไป:
  • กระบวนจะทำงานตามที่คาดไว้
  • แบบสอบถาม SQL Server ไม่ได้กำลังทำงานในรูปแบบ durational ที่ผิดปกติ
  • คุณไม่เห็นสัญญาณที่บ่งบอกว่าปัญหาคอขวดอื่น ๆ
อย่างไรก็ตาม ก่อนที่คุณละเว้นการเลื่อนการเตือนข้อความ เราขอแนะนำให้ คุณติดต่อ ผู้ผลิตของคุณเพื่อให้แน่ใจว่า ไม่รู้จัก RDTSC ปัญหาที่มีอยู่

คุณสามารถใช้ค่าสถานะการสืบค้นกลับ 8033 (– T8033) เพื่อกลับไปยังรายงานลักษณะการทำงาน ใน SQL Server 2005 รุ่นวางจำหน่ายต้นฉบับ และ ใน SQL Server 2005 SP1 ได้ รายงานข้อความเตือนการเคลื่อนตัวของ SQL Server 2005 และ SQL Server 2005 SP1 รุ่นแรกที่วางจำหน่าย ถ้าคุณกำลังเรียกใช้รุ่นวางจำหน่ายต้นฉบับของ SQL Server 2005 หรือ SQL Server 2005 SP1 โดยไม่มีปัญหา คุณสามารถละเว้นข้อความโดยทั่วไป

เหตุใดจึงไม่งบการหน่วงเวลา WAITFOR ทำงานได้อย่างถูกต้องหรือไม่ อะไรเกี่ยวกับกระบวนการของระบบเป็นครั้งคราวหรือไม่

กลไกการหมดเวลาไม่ได้รับผลกระทบจากการออกแบบมีความละเอียดสูง SQL Server ใช้ตัวจับเวลาที่มีความละเอียดสูงสำหรับยึดจับเวลากิจกรรม หมดเวลากิจกรรมบางอย่างจะเป็นไปตามการลดความละเอียดของตัวจับเวลาที่ใช้ฟังก์ชันGetTickCount กิจกรรมเหล่านี้หมดเวลารวมหมดเวลาล็อก การหน่วงเวลา WAITFOR งบ และตรวจหาการชะงักงัน
สำหรับข้อมูลเพิ่มเติม คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:

938448เซิร์ฟเวอร์ใช้ A Windows Server 2003 อาจพบการเคลื่อนตัวนับการประทับเวลาถ้าเซิร์ฟเวอร์ใช้ตัวประมวลผลของ AMD Opteron จากสองหลักหรือตัวประมวลผลหลายตัวประมวลผลของ AMD Opteron

895980โปรแกรมที่ใช้ฟังก์ชัน QueryPerformanceCounter อาจทำดี ใน Windows Server 2003 และ ใน Windows XP

ผลิตภัณฑ์ของบริษัทอื่นที่กล่าวถึงในบทความนี้ผลิตขึ้น โดยบริษัทที่ไม่ขึ้นอยู่กับ Microsoft ไมโครซอฟท์ไม่รับประกัน ทั้งโดยนัย หรืออย่างอื่น ใด เกี่ยวกับประสิทธิภาพหรือความน่าเชื่อถือของผลิตภัณฑ์เหล่านี้