ความยืดหยุ่นในการขัดข้องของ SQL Server สามารถปรับปรุงได้หรือไม่


20

เรามีพีซีที่ใช้ SQL Server (2008 SP4 และ 2016 SP1) ซึ่งสูญเสียพลังงานเป็นประจำ เห็นได้ชัดว่าบางครั้งสิ่งนี้นำไปสู่ความเสียหาย (ดัชนี) ของฐานข้อมูล SQL Server ซึ่งเราจำเป็นต้องกู้คืนหลังจากนั้น

ฉันทราบว่า SQL Server ไม่ได้ออกแบบมาสำหรับสถานการณ์ดังกล่าวและวิธีการแก้ไขที่ถูกต้องคือการแก้ไขสาเหตุของการสูญเสียพลังงาน (เพิ่มเติมที่ด้านล่างถ้าคุณอยากรู้) อย่างไรก็ตามมีตัวเลือกการปรับแต่งใด ๆ ใน SQL Server ที่ฉันสามารถตั้งค่าเพื่อลดความเสี่ยงของความเสียหายของฐานข้อมูลจากการสูญเสียพลังงานหรือไม่?


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

คำตอบ:


28

ฉันทราบว่า SQL Server ไม่ได้ออกแบบมาสำหรับสถานการณ์ดังกล่าวและวิธีการแก้ไขที่ถูกต้องคือการแก้ไขสาเหตุของการสูญเสียพลังงาน [... ]

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

อย่างไรก็ตามมีตัวเลือกการปรับแต่งใด ๆ ใน SQL Server ที่ฉันสามารถตั้งค่าเพื่อลดความเสี่ยงของความเสียหายของฐานข้อมูลจากการสูญเสียพลังงานหรือไม่?

ไม่ SQL Server กำลังทำสิ่งที่ควรทำ คุณควรดูนอก SQL Server (การตั้งค่า windows สำหรับการแคชไดรฟ์ [ซึ่ง SQL ต้องการปิด แต่เราไม่สามารถบังคับให้คุณได้], อัปเดตฮาร์ดแวร์ / เฟิร์มแวร์ ฯลฯ ) หรือตามที่ Eric ได้กล่าวไว้ ราคาถูกซึ่งสามารถแก้ปัญหาได้ (ปัญหาจริงน่าจะเป็นชนิดแคชหรือแบตเตอรี่สำรองเขียนที่ไม่ได้สำรองจริง ๆ )


2
บทความที่มีประโยชน์: support.microsoft.com/en-us/help/234656/…
David Browne - Microsoft

1
ฉันมีการคาดเดาที่ดีงามที่การตั้งค่าเป็นผู้ร้ายถ้ามันเป็นปัญหาของระบบปฏิบัติการ (แม้ว่านี่อาจเป็นหนึ่งในระบบปฏิบัติการแบบฝังตัวเก่าถ้าฉันจะเดาไม่เคยตรวจสอบว่าพวกเขามีการตั้งค่าเช่นกัน) และอย่างน้อยที่สุดฮาร์ดดิสก์ระดับผู้บริโภคส่วนใหญ่ที่ไร้ยางอายโกหกเกี่ยวกับการเขียนให้เสร็จสมบูรณ์สำหรับ "เหตุผลการเพิ่มประสิทธิภาพการทำงาน" ดังนั้นจึงไม่มีความหวังโดยทั่วไป
Voo

26

หากแท็บเล็ตมีแบตเตอรี่ที่ทำงานคุณสามารถกำหนดค่า Windows ที่จะปิดตัวลงเมื่อพลังงานแบตเตอรี่อยู่ในระดับต่ำ

หากแท็บเล็ตมีแบตเตอรี่ที่ใช้งานไม่ได้ให้ลองเปลี่ยนแบตเตอรี่ใหม่ (ฉันมีแลปท็อปแบบนั้น - คุณจะประหลาดใจที่แบตเตอรี่ทดแทนราคาไม่แพงสามารถอยู่บน eBay ได้พวกเขาไม่ทำงานเช่นเดียวกับ OEM แต่เฮ้ไม่มีอะไรดีไปกว่าอะไรในสถานการณ์นี้)

หากแท็บเล็ตไม่มีความสามารถของแบตเตอรี่เลยให้ลองเพิ่มแหล่งจ่ายไฟสำรอง (UPS) ขนาดเล็กที่มีช่องต่อ USB ที่สามารถสื่อสารกับ Windows เพื่อแจ้งให้ทราบเมื่อกำลังใช้พลังงานแบตเตอรี่ (ตัวอย่างเช่นฉันมีเดสก์ท็อปของฉันกำหนดค่าให้ปิดตัวเองเมื่อ UPS มีพลังงานแบตเตอรี่เหลือน้อย - ด้วยวิธีนี้มันจะปิดระบบไฟฟ้าดับแม้ว่าฉันจะไม่ได้อยู่ที่บ้าน)

หากไม่มีตัวเลือกใดแสดงว่าคุณโชคไม่ดี มันเป็นเอกสารทางเทคนิคเก่า แต่SQL Server 2000 I / O Basicsจาก Microsoft อธิบายโดยทั่วไปว่าคุณต้องการระบบย่อย I / O ที่สามารถจัดการกับกระแสไฟฟ้าขัดข้องได้อย่างงดงาม

มีตัวเลือกที่คุณสามารถใช้เพื่อเพิ่มความเสี่ยงเช่นDelayed Durabilityหรือ Memory-only (ไม่คงทน) แต่โดยปกติแล้ว SQL Server จะพยายามอย่างดีที่สุดเพื่อเพิ่มความน่าเชื่อถือด้วยการเขียนบันทึกการทำธุรกรรมทุกครั้ง หากการเขียนบันทึกธุรกรรมแม้ไม่สามารถรับประกันได้เนื่องจากไฟดับแบบสุ่มให้ใช้จ่าย $ 100 ในแบตเตอรี่ UPS


6

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

อย่างไรก็ตามตามที่ Brent แนะนำให้ตั้งแท็บเล็ตให้ปิดไฟเองหลังจาก x นาทีโดยใช้พลังงานจากแบตเตอรี่หรือมีเกณฑ์ที่คล้ายกัน

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


1
"สมมติว่าคุณมีฐานข้อมูลท้องถิ่นบนรถยกมากกว่าเซิร์ฟเวอร์เนื่องจากการเชื่อมต่อไร้สายที่ไม่แน่นอน?" ใช่ว่าเป็นกรณี แอปพลิเคชั่นรักษาฐานข้อมูลโลคัลและฐานข้อมูลเซิร์ฟเวอร์ให้ตรงกันซึ่งช่วยให้รถยกสามารถออกจากพื้นที่ที่ครอบคลุมโดย WLAN และยังคงใช้แอปพลิเคชันได้
Heinzi

2

ระบบปฏิบัติการพื้นฐานจะต้องรับประกันว่าการเขียนที่ประสบความสำเร็จหรือข้อผิดพลาดจะถูกส่งกลับ ระบบปฏิบัติการนั้นขึ้นอยู่กับไดรเวอร์ที่ใช้เฟิร์มแวร์ซึ่งขึ้นอยู่กับฮาร์ดแวร์หากไดรเวอร์ฮาร์ดแวร์เฟิร์มแวร์อยู่ไม่มีอะไรที่ windows หรือ sql server สามารถทำอะไรได้

นี่คือเหตุผลที่คุณต้องตรวจสอบกับไดรเวอร์ / เฟิร์มแวร์ / ผู้ผลิตฮาร์ดแวร์

การเขียนคำสั่งจะต้องมีการรับประกันในทุกเลเยอร์เพื่อที่จะต้องมีการตรวจสอบเช่นกัน

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

https://www.postgresql.org/docs/devel/static/wal-reliability.html

https://brad.livejournal.com/2116715.html

http://rhaas.blogspot.com/2010/10/wal-reliability.html?m=1


1

หากต้องการขยายคำตอบอื่น ๆ :

ก่อนอื่นให้ลองดึง SQL ออกจากรถยกหากเป็นไปได้ คิดว่าการกู้คืนจากการสูญเสียพลังงานไม่ดีลองทำหลังจากแล็ปท็อปมีน้ำหนักมากกว่า 7,000 ปอนด์ ด้วยกิจกรรมคลังสินค้าหลายชั่วโมงไม่สามารถทำการสำรองข้อมูล ...

ประการที่สองกลไกสำหรับแล็ปท็อปในการปิดเครื่องอัตโนมัติหลังจากเวลา x บนแบตเตอรี่ควรอยู่ในสถานที่ต่อไป

ประการที่สามการเชื่อมต่อแล็ปท็อปกับตัวป้อนพลังงานที่ไม่ได้สลับบนรถยกเป็นทางเลือกหรือไม่? ตรวจสอบให้แน่ใจว่าได้พิจารณากฎความปลอดภัย (สภาพแวดล้อมอาจจำเป็นต้องใช้ทุกอย่างด้วยกุญแจรถยก) และระยะเวลาที่รถยกอยู่ระหว่างการใช้งาน (โดยเฉพาะในช่วงสุดสัปดาห์และวันหยุด) เพื่อหลีกเลี่ยงการระบายแบตเตอรี่ในเครื่อง

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