การเริ่มต้นเซิร์ฟเวอร์ SQL ใหม่เร็วขึ้นหรือไม่


22

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

เป็นความจริงหรือไม่ที่การเริ่ม SQL Server ใหม่ทุกวันจะทำให้ทำงานเร็วขึ้นหรือไม่

คำตอบ:


37

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

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


ฉันไม่เห็นด้วย. SQL Server โฮสต์บนเซิร์ฟเวอร์ Windows ที่แพตช์รักษาความปลอดภัยและการอัพเกรด MS ต้องการการรีบูตเป็นระยะ ฉันเชื่อว่าการออกแบบ SQL ที่ดีกว่าคือกุญแจสำคัญในการแก้ไขปัญหาประสิทธิภาพการทำงานและไม่ต้องพึ่งการรีบูทเซิร์ฟเวอร์ แต่บางครั้งก็เป็นขั้นตอนที่จำเป็น
Fandango68

27

ในขณะที่คำตอบอื่น ๆ นั้นใช้ได้ดีพวกเขาขาดส่วนสำคัญ: แคชไฟล์ของ Windows

บน Windows 64 บิตไม่มีขีด จำกัด ปริมาณหน่วยความจำที่ Windows จะใช้เพื่อแคชไฟล์ Windows สามารถระบายหน่วยความจำของระบบของคุณจนหมดและในเวลานั้นคุณจะเริ่มสลับไปยังดิสก์ มีการบันทึกไว้ในไม่กี่แห่ง:

ด้วยการเริ่มต้น SQL Server ใหม่อีกครั้งคุณบังคับให้ SQL ยกเลิกการใช้หน่วยความจำซึ่งทำให้ Windows ได้รับมากขึ้นและเพจจิ้งจะหยุดชั่วคราว SQL จะเริ่มต้นอีกครั้งเมื่อมีการใช้หน่วยความจำใกล้ศูนย์และค่อยๆขึ้นไปและเมื่อกล่องหน่วยความจำหมดอีกครั้งการรีสตาร์ทจะช่วยชั่วคราว เมื่อรีสตาร์ททั้งระบบคุณจะบังคับให้แคชไฟล์ของ Windows หยุดทำงาน

การแก้ไขที่แท้จริง: หยุดการคัดลอกไฟล์จากเซิร์ฟเวอร์ Windows หรือกำหนดจำนวนแคชไฟล์ที่ใช้กับบริการแคชไฟล์แบบไดนามิกตามที่ระบุไว้ในโพสต์บล็อกเหล่านั้นด้านบน


3
+1 รับทราบถึงปัญหาไม่ทราบว่าแคชอาจถูก จำกัด โดยใช้บริการแคชแบบไดนามิก
Mark Storey-Smith

การฝึกฝนของ "การตรึง" หน่วยความจำกับ MIN และ MAX (แม้ว่าพวกเขาควรและอาจเป็นจำนวน KB ที่แน่นอน) จะช่วยให้มั่นใจได้ว่า SQL Server จะใช้จำนวน MIN / MAX RAM ที่กำหนดไว้ล่วงหน้าเท่านั้น เครือข่ายร้องขอให้ทำงานต่อไป นี่เป็นการฝึกฝนของฉันและทำงานได้ดี ความคิดอื่น ๆ ?
SnapJag

@SnapJag - ไม่จำเป็นเพราะ SQL ไม่ได้ใช้จำนวนเงินขั้นต่ำในทันที SQL เริ่มต้นที่ศูนย์และค่อยๆเพิ่มขึ้นตามความต้องการ
เบรนต์โอซาร์

11

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


นี่ควรเป็นคำตอบที่ยอมรับได้ การออกแบบ SQL ที่เหมาะสมและการออกแบบแผนเป็นสิ่งสำคัญในการหลีกเลี่ยงความจำเป็นในการรีบูตเซิร์ฟเวอร์ แต่การรีบูตเซิร์ฟเวอร์อาจมีความจำเป็นต่อไปเนื่องจากนโยบายเซิร์ฟเวอร์ - เช่นแพตช์รักษาความปลอดภัยเป็นต้น
Fandango68

11

คุณไม่ควรรีสตาร์ท SQL Server จนกว่าคุณจะเปลี่ยนคุณสมบัติของบริการหรือตั้งค่าร่องรอยการเริ่มต้นที่คุณต้องการให้มีผลทันที

ในฐานะที่เป็น @RemusRusanu ได้ระบุไว้หลายจุดมันล้างจำนวนมากแคชและเป็นสาเหตุของ SQL Server เพื่อทำมากของการทำงานเริ่มต้นที่ไม่จำเป็น

ดูเหมือนว่าเซิร์ฟเวอร์นี้ไม่ใช่เซิร์ฟเวอร์ SQL / ฐานข้อมูลเฉพาะ วิธีที่ดีที่สุดคือให้เซิร์ฟเวอร์ฐานข้อมูลการผลิตมีจุดประสงค์เดียวเท่านั้น ... เพื่อเป็นเซิร์ฟเวอร์ฐานข้อมูล ในกรณีนี้คุณจะจัดสรรหน่วยความจำและทรัพยากรเพียงพอสำหรับระบบปฏิบัติการและมอบทุกอย่างให้กับ SQL Server สิ่งนี้จะทำให้คุณไม่ต้องอดอาหารแอปพลิเคชันหรือบทบาทเซิร์ฟเวอร์อื่น


2

ฉันเห็นด้วยกับความเชื่อมั่นว่าถ้าคุณทำทุกอย่างถูกต้องแล้วคุณอาจไม่จำเป็นต้องรีบูต / รีสตาร์ทเซิร์ฟเวอร์ MSSQL ของคุณ
สำหรับฉันนี่ใช้กับสถานการณ์ที่ทุกคนมีความสามารถและคุณสามารถแก้ไขอะไรก็ได้

ฉันไม่ใช่ DBA ฉันเป็นสถาปนิกซอฟต์แวร์และเป็นส่วนหนึ่งที่เกี่ยวข้องกับการสร้างสกีมาฐานข้อมูลทั้งหมดตั้งแต่ต้นและน่าเสียดายที่ทำงานกับฐานข้อมูลของบุคคลที่สามที่ฉันไม่สามารถควบคุมได้
คนที่สร้างและบำรุงรักษาหนึ่งในฐานข้อมูลบุคคลที่สามที่สำคัญของเราทำให้แทบจะไม่สามารถใช้งานได้

ฉันพูดถึงฉันยังไม่ได้เป็นผู้เชี่ยวชาญด้านความปลอดภัยหรือวิศวกรเครือข่ายหรือไม่

  • อย่างน้อยหนึ่ง Major Window OS Update, Security Update, BIOS Update, OS / MSSQL Service Pack หรือ MSSQL Cumulative Update ถูกผูกไว้ที่จะออกมาทุกเดือนหรือสองเดือน
  • การใช้สิ่งเหล่านี้ในเวลาที่เหมาะสมหมายถึงการรีบูต / รีสตาร์ทเซิร์ฟเวอร์ของคุณทุก ๆ ไตรมาส
  • แม้ว่าจะทำงานภายในอินทราเน็ตทำไมคุณไม่ใช้การปรับปรุงความปลอดภัย
  • หากฉันได้รับอนุญาตให้มี SSL บนเว็บไซต์ PHI อินทราเน็ตของฉันฉันจะทำเพราะไม่มีเครือข่ายที่ผิดพลาด ฉันหวาดระแวงฉันเดา


สำหรับฉันแล้วคำถามจะกลายเป็น: ฉันควรเริ่ม SQL Server บ่อยกว่าทุก ๆ 3 เดือนหรือไม่

การจัดตารางเวลาเริ่มใหม่เพื่อให้สัญญาว่าจะได้ประสิทธิภาพเพิ่มขึ้นอีกหนึ่งนิ้วเหมือนกับการเต้นรำท่ามกลางสายฝน
บางทีมันอาจจะมาบางทีมันอาจจะไม่ แต่คุณจะไม่รู้ว่าอะไรทำให้เกิดฝน

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

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

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

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