SQL Server สร้างแผนใหม่ในแต่ละวัน


14

เรามีปัญหานี้ในสภาพแวดล้อมการผลิตของเรา

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) - รุ่นองค์กร (64 บิต) บน Windows NT 6.1 (รุ่น 7601: Service Pack 1)

SQL Server กำลังวางแผนปฏิบัติการเกือบทั้งหมด (เกือบ 100%) และสร้างใหม่ทุกวันข้ามคืน (จาก 11:00 PM ถึง 8:00 AM) สิ่งนี้เกิดขึ้นเมื่อ 'สถิติการอัปเดตอัตโนมัติ' อยู่ในสถานะปิดใช้งาน เราได้เปิด 'สถิติการอัปเดตอัตโนมัติ' ในช่วง 2-3 สัปดาห์ที่ผ่านมา แต่มันก็ยังคงเกิดขึ้น

เราไม่รู้จริง ๆ ว่าอะไรเป็นต้นเหตุของแผนยุคใหม่นี้ แต่เรามั่นใจว่าเราจะไม่ทำด้วยตนเอง

สิ่งเดียวที่เกิดขึ้นจริงกับช่วงเวลาของแผนที่ถูกสร้างใหม่คืองานบำรุงรักษาฐานข้อมูลที่เรามี: ดัชนีรายวันปรับโครงสร้างองค์กรใหม่ (เมื่อการแยกส่วนเป็น 5-30%) และดัชนีสร้างใหม่ทุกวัน (เมื่อการแยกส่วนมากกว่า 30% ) งาน โดยปกติงานบำรุงรักษารายวันนี้จะจัดระเบียบใหม่เท่านั้น (เนื่องจากการกระจายตัวของดัชนีไม่เกิน 30% ทุกวัน)

ผลกระทบ:

แผนที่สร้างขึ้นใหม่เหล่านี้ทำให้การเรียก UDF / การเรียกแบบสอบถาม (ที่เรียกจาก UI / หน้าเว็บ) ใช้เวลานานขึ้น (นาทีเมื่อเทียบกับน้อยกว่า 1 วินาที) ดังนั้นเซสชันเพิ่งรับซ้อนโดยใช้ CPU ใกล้ 90% .

ปัญหาหายไปทันทีที่เซสชันที่ติดอยู่นั้นถูกลบไปอย่างแรง (ทางด้าน DB) และ 1) เมื่อแผนการดำเนินการที่เกี่ยวข้องทั้งหมดถูกล้างด้วยตนเอง (สำหรับการค้นหา) หรือ 2) เมื่อ UDFs ถูกเปลี่ยน (สำหรับฟังก์ชั่น) แผนใหม่ใด ๆ ที่สร้างขึ้นโดยเซิร์ฟเวอร์ SQL จากช่วงเวลานั้นทำงานได้อย่างสมบูรณ์แบบตลอดทั้งวันจนกว่าจะมีปัญหาเดียวกันในเช้าวันรุ่งขึ้น พฤติกรรมนี้ไม่สอดคล้องกัน 100% เราไม่ได้เห็นมันทุกเช้า แต่มีช่วงเวลาที่เราได้เห็นมันอย่างต่อเนื่องเป็นเวลา 4-5 วันติดต่อกัน

ปัญหาเกิดขึ้นในตอนเช้าของธุรกิจนั่นคือเมื่อ UI / หน้าเว็บมีการเข้าถึงอย่างเข้มข้นมากขึ้นดูเหมือนว่า

ไม่มีใครมีเงื่อนงำสิ่งที่ทำให้เกิดสิ่งนี้และวิธีการแก้ปัญหานี้หรือไม่? ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก


3
plancache สามารถปล่อยได้เมื่อเครื่องอยู่ภายใต้แรงกดดันหน่วยความจำหรือถ้าคุณเปลี่ยนการตั้งค่าตามระดับ db (แก้ไข db) เนื่องจากคุณบอกว่าคุณไม่ได้ลบ "ด้วยตนเอง" ฉันคิดว่ามันอาจเป็นความกดดันของหน่วยความจำ เครื่องมีหน่วยความจำเท่าไหร่? การตั้งค่าหน่วยความจำสูงสุดของคุณคืออะไร คุณมีสภาพแวดล้อมเสมือนจริงและ RAM โดยรวมหรือไม่
RayofCommand

6
ทำไมคุณถึงอยู่ที่ SP1 ก่อนที่คุณจะทำสิ่งใดก็ตามให้ใช้ SP3 SQL Server สามารถบังคับแผนออกหากพบว่ามีแรงกดดันต่อหน่วยความจำและจำเป็นต้องมีหน่วยความจำเพิ่มเติมเพื่อรองรับหน้าพิเศษจากการสร้างดัชนีใหม่เป็นพิเศษหากคุณมีตารางขนาดใหญ่ การสร้างดัชนีใหม่จะพยายามนำหน้าให้มากที่สุด สิ่งที่คุณสามารถทำได้คือหยุดใช้ MP และใช้โซลูชัน Ola Hallengren และดูว่าจะช่วยได้หรือไม่ หน่วยความจำเซิร์ฟเวอร์สูงสุดคืออะไร?
Shanky

1
พวกฉันไม่ใช่ DBA เพียงผู้พัฒนา SQL ฉันแค่ขอทั้งหมดนี้เพราะมันเกิดขึ้นบางครั้ง ขอขอบคุณสำหรับความคิดเห็นของคุณฉันจะพยายามตอบกลับทั้งหมดแม้ว่าตอนนี้ฉันจะพบว่ามันยากที่จะติดตาม (และทุกอย่างดูเหมือนจะชัดเจนสำหรับคุณ) MP คืออะไร
peter.petrov

1
@ peter.petrov เราพยายามช่วยคุณโดยทำความรู้จักกับสภาพแวดล้อมของคุณ MP = แผนการบำรุงรักษา
Kin Shah

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

คำตอบ:


2

ฉันมีความคิดบางอย่างที่อาจทำให้เกิดพฤติกรรมนี้

  1. คุณตรวจสอบความดันหน่วยความจำของคุณหรือไม่ บางทีคำค้นหาของคุณจะเพิ่มขีด จำกัด ที่แน่นอนซึ่งจะทำให้แคชของแผนล้าง ฉันไม่รู้จักแอปพลิเคชันของคุณ แต่สิ่งนี้สอดคล้องกับบันทึกของคุณจากเซิร์ฟเวอร์ส่วนหน้าหรือไม่ มีความกดดันในช่วงเวลานี้หรือไม่?
  2. คุณมีเซิร์ฟเวอร์ SQL เฉพาะหรือเซิร์ฟเวอร์ใช้ฮาร์ดแวร์ร่วมกับกระบวนการ / บริการอื่น ๆ หรือไม่? มิฉะนั้นให้ลองพิจารณาการ outsource SQL Server ของคุณไปที่เครื่องเฉพาะแทน สิ่งนี้จะลดผลข้างเคียงจากบริการอื่น ๆ
  3. คุณอาจต้องการใช้optimize for ad hoc workloadsซึ่งจะบันทึกแผนต้นขั้วและรวบรวมหากจำเป็น วิธีนี้จะช่วยลดภาระของ plancache ของคุณซึ่งจะช่วยลดโอกาสในการล้าง plancache sp_configure 'optimize for ad hoc workloads',1; reconfigureคุณสามารถเปิดใช้งานได้โดยใช้ สิ่งนี้สามารถทำได้หากคุณเปิดใช้งานการadvanced optionsใช้sp_configure 'show advanced options',1; reconfigureโดยใช้
  4. แนวคิดอื่นสามารถสำรอง สำรองข้อมูลง่ายๆ หากมีความก้าวร้าวก็อาจเกิดขึ้นได้ว่าเครื่องของคุณได้รับแรงกดดันเช่นกัน เวลาที่คุณกล่าวถึงดูเหมือนเป็นช่วงเวลาที่ดีสำหรับการวางแผนการสำรองข้อมูล
  5. อาจเป็นข้อบกพร่องง่ายๆในสคริปต์บำรุงรักษาของคุณ คุณได้ตรวจสอบแล้วว่ามีปัญหาเชิงตรรกะหรือไม่ซึ่งทำให้สคริปต์ของคุณสร้างดัชนีทั้งหมดใหม่แทนที่จะเป็นเพียงผู้ที่ตรงกับเกณฑ์ นี่อาจเป็นสาเหตุให้เช่นกัน

เพียงข้างทั้งหมดของความเป็นไปได้นี้มันอาจจะมีประโยชน์ในการตรวจสอบไฟล์บันทึกสำหรับการเปลี่ยนแปลงบางอย่างเพื่อให้ตัวเลือกaffinity mask, affinity I/O maskและคู่ค้า x64 ของพวกเขา สิ่งอื่นอาจเป็นการเปลี่ยนแปลงของMAXDOPเลือกของอินสแตนซ์ของคุณ โปรดตรวจสอบบันทึกสำหรับพวกเขาด้วย พวกเขาจะต้องล้างอาการปวดหัวด้วยเช่นกัน

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

หวังว่านี่จะช่วยคุณได้แม้ว่าคำตอบจะออกมาในภายหลัง

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