การซิงโครไนซ์ฐานข้อมูล SQL Server


21

นิยามปัญหา

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

จำนวนงาน

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

วิธีแก้ปัญหาและปัญหาปัจจุบัน

เราใช้ประโยชน์จากภาพรวมฐานข้อมูล เวลา 22.00 น. เราจะส่งและสร้างภาพรวม การประมวลผล ETL จะเริ่มขึ้น นี่คือการเก็บภาษีบนดิสก์ของเรา แต่ช่วยให้ผู้ใช้ของเราสามารถสืบค้นฐานข้อมูลโดยไม่ต้องล็อกฐานข้อมูล (พวกเขาใช้ Access Front End) พวกเขาใช้มันในตอนกลางคืนและตอนเช้าเพื่อที่พวกเขาจะสังเกตเห็นการหยุดทำงาน

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

แนวทางการพิจารณา

การจัดกลุ่ม

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

การจำลองแบบเซิร์ฟเวอร์ SQL

เราเริ่มดูการจำลองแบบเมื่อสัปดาห์ที่แล้ว ทฤษฎีของเราคือเราสามารถทำให้แคตตาล็อกที่สองโดดเด่นและประสานกับฐานข้อมูลการผลิต ก่อนการเริ่มต้น ETL เราจะตัดการเชื่อมต่อและเปิดใช้งานอีกครั้งเมื่อกระบวนการ ETL เสร็จสิ้น

ผู้ดูแลระบบเริ่มต้นด้วยการจำลองแบบ Snapshotแต่เขากังวลว่าต้องใช้เวลาหลายวันในการใช้งาน CPU สูงเพื่อสร้างสแนปชอตรวมถึงปริมาณการใช้ดิสก์ที่ต้องการ เขาระบุว่าดูเหมือนว่าจะเขียนข้อมูลทั้งหมดไปยังไฟล์จริงก่อนที่จะส่งไปยังผู้สมัครสมาชิกดังนั้นฐานข้อมูล. 6TB ของเราจะเสียค่าใช้จ่าย 1.8TB ในค่าใช้จ่ายในการจัดเก็บ นอกจากนี้หากใช้เวลาหลายวันในการสร้างสแน็ปอินก็จะไม่พอดีกับ SLA ที่ต้องการ

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

การทำมิเรอร์ฐานข้อมูล

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

บันทึกการจัดส่ง

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

MS Sync

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

SSIS

เราทำมากมายของ SSIS ที่นี่เพื่อสร้างไม่กี่ร้อยแพคเกจ SSIS เพื่อให้ตรงกันรองเป็นตัวเลือกสำหรับเราแม้ว่าน่าเกลียดอย่างใดอย่างหนึ่ง ฉันไม่ได้เป็นแฟนของการทำเช่นนี้เพราะเป็นค่าบำรุงรักษาจำนวนมากที่ฉันต้องการให้ทีมของฉันไม่ทำ

ภาพรวมของ "magic" SAN

ในอดีตฉันเคยได้ยินผู้ดูแลระบบของเราใช้เทคโนโลยี SAN บางอย่างเพื่อทำการสำรองข้อมูลดิสก์ทั้งหมดทันที บางทีอาจมีเวทมนตร์ EMC บางอย่างที่สามารถใช้ทำสำเนา uberquick ของ mdf / ldf และจากนั้นเราสามารถแยก / แนบฐานข้อมูลเป้าหมายได้

สำรองและเรียกคืน

ฉันคิดว่าเราใช้การสำรองข้อมูลเต็มรูปแบบสัปดาห์ละครั้งส่วนต่างทุกคืนและบล็อกข้อมูลทุก ๆ 15 นาที หากผู้ใช้สามารถใช้งานได้กับการหยุดทำงานนาน 3-4 ชั่วโมงสำหรับการกู้คืนแบบเต็มฉันคิดว่านี่อาจเป็นแนวทาง

ข้อ จำกัด

Windows 2008 R2, SQL Server 2008 R2 (Enterprise Edition), VMWare v5 Enterprise Edition, ที่เก็บข้อมูล EMC SAN พร้อมไดรฟ์ที่แมปไปยังไฟล์ vmdk, การสำรองข้อมูลการจัดการ commvault และ. 6TB ของข้อมูลในแค็ตตาล็อกแหล่งที่มา นี่เป็นแอปพลิเคชันบุคคลที่สามที่เราโฮสต์อยู่ภายใน การปรับเปลี่ยนโครงสร้างของพวกเขาโดยทั่วไปจะขมวดคิ้ว ผู้ใช้ไม่สามารถไปได้โดยไม่ต้องสอบถามฐานข้อมูลและปฏิเสธที่จะถูก จำกัด โดยการระบุตารางที่พวกเขาตรวจสอบเพื่อทำงานของพวกเขาในเชิงรุก

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

ฉันฉันอยู่ด้านการพัฒนาของ hosue เพื่อให้ฉันสามารถเสนอแนวทางและไม่ต้องจัดการกับด้านการบริหารจัดการของสิ่งต่าง ๆ ดังนั้นเมื่อไม่มีเวลาในการดูแลของผู้ดูแลระบบฉันลังเลที่จะพูดว่าวิธีการหนึ่งจะดีกว่าวิธีอื่น --- มันทั้งหมดดูดีตามเอกสาร ฉันเต็มใจที่จะดำเนินการทุกทิศทางที่ทุกคนแนะนำเพราะอย่างที่ฉันเห็นมันเป็นเพียงการทำให้ฉันมีค่ามากขึ้นในฐานะมืออาชีพ DB ฉันมีสาลี่ แต่ไม่มีเสื้อคลุมหายนะใช้ได้

คำถามที่เกี่ยวข้อง

การแก้ไข

หากต้องการตอบคำถามของ @ onpnt

การยอมรับความล่าช้าของข้อมูล

ขณะนี้ผู้ใช้ดูข้อมูลที่ช้ากว่า 24 ชั่วโมง ข้อมูลเป็นเพียงปัจจุบัน ณ 2200

จำนวนข้อมูลที่เปลี่ยนแปลงในนาทีชั่วโมงและวันที่กำหนดไม่แน่ใจว่าจะหาปริมาณได้อย่างไร เวลาทำการอาจมีการเปลี่ยนแปลงหลายร้อยครั้งต่อชั่วโมง ประมวลผลทุกคืนหลายล้านแถวต่อวันทำการ

เชื่อมต่อกับสายรอง

เครือข่ายภายในแยกโฮสต์เสมือนและพื้นที่เก็บข้อมูลเฉพาะ

อ่านข้อกำหนดในอินสแตนซ์รอง

กลุ่ม Windows จะมีการอ่านเพื่อเข้าถึงตารางรองทั้งหมด

เวลาของอินสแตนซ์รอง

ไม่มีคำจำกัดความที่ชัดเจนของข้อกำหนดด้านเวลา ผู้ใช้ต้องการให้ใช้งานได้ตลอดเวลา แต่พวกเขายินดีจ่ายสำหรับสิ่งนั้นอาจไม่มาก ตามจริงแล้วฉันจะบอกว่า 23 ชั่วโมงต่อวันก็เพียงพอแล้ว

การเปลี่ยนแปลงคีมาที่มีอยู่และวัตถุทั้งหมด

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

ความปลอดภัย

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

@ ช่องแคบดาริน

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

@cfradenburg

ข้อสันนิษฐานของฉันคือเราใช้เพียงหนึ่งในวิธีการเหล่านี้ แต่นั่นเป็นจุดที่ดีที่การกู้คืนจะทำให้เทคโนโลยีการซิงค์ "อื่น ๆ " เสียหาย พวกเขากำลังตรวจสอบว่ากำลังทำอะไรโดยใช้เวทมนตร์ของ EMC ดังที่ผู้ดูแลระบบอธิบายไว้พวกเขาจะถ่ายภาพในเวลา 1900 และย้ายภาพไปยังโซนที่สอง ที่ควรจะเสร็จสมบูรณ์โดย 2,200 และจากนั้นพวกเขาจะดำเนินการแยกออกและติดตั้งใหม่ของฐานข้อมูลรอง

สรุป

2012-10-29 เราได้ประเมิน EMC snapshot magic และตัวเลือกการจำลองอื่น ๆ แต่ DBA ตัดสินใจว่าพวกเขาสามารถหา Mirroring ได้ดีที่สุด โหวตคำตอบเพราะพวกเขาทุกคนช่วยเหลือและให้ทางเลือกมากมายแก่ฉันรวมถึง "การบ้าน" เพื่อตรวจสอบ


เป็นไปได้หรือไม่ที่คุณจะเปลี่ยนกลับ snapshot ของฐานข้อมูลเมื่อมีปัญหา ที่ควรจะนำคุณกลับไปที่ที่ db เป็นเมื่อถ่าย snapshot จากนั้นคุณสามารถถ่ายภาพใหม่แก้ไขปัญหาการประมวลผลและดำเนินการต่อ ด้วยการจัดส่งบันทึก W / R / T คุณไม่จำเป็นต้องเรียกคืนการสำรองข้อมูลบันทึกไปยังสำเนาของคุณตลอดทั้งวันในเวลาเดียวกับที่คุณรับมัน คุณสามารถปล่อยให้พวกเขาสร้างขึ้นแล้วคืนค่าพวกเขาในเครือ วิธีนี้ช่วยลดการขัดจังหวะของผู้ใช้ในการคัดลอกเนื่องจากคุณสามารถเลือกเวลาที่ช้าในการทำสำเนาและหมายความว่าสำเนาจะไม่เปลี่ยนแปลงตลอดทั้งวัน
darin strait

หากคุณต้องการกู้คืนฐานข้อมูลเป็นระยะ ๆ วิธีใดก็ตามที่รวดเร็วก็จะต้องเริ่มต้นใหม่ หากคุณกำลังกู้คืนการสำรองข้อมูล DIFF หรือ LOG การกู้คืนแบบเต็มจะต้องดำเนินการเพื่อซิงค์ฐานข้อมูลอีกครั้ง สิ่งเดียวกันกับการมิเรอร์และฉันไม่แน่ใจเกี่ยวกับการจำลองแบบ ทางออกที่ดีที่สุดของคุณคือดูว่า EMC สามารถทำอะไรให้คุณได้บ้าง ฉันรู้ว่าเมื่อฉันพูดคุยกับ NetApp พวกเขามีทางออกที่จะทำสิ่งที่คุณกำลังมองหา แต่มันเป็นเครื่องมือเสริม
cfradenburg

คำตอบ:


6

การปรับเปลี่ยนโครงสร้างของพวกเขาโดยทั่วไปจะขมวดคิ้ว

การจำลองแบบมีโอกาสมากกว่าและฉันจะทิ้งการซิงค์ก่อนหน้านั้น (จากการทดสอบ transacitonal ระดับสูงในชีวิตจริงบน Sync Framework)

หาก 3-4 ชั่วโมงคือเวลาในการตอบสนองต่อข้อมูลของคุณการจัดส่งบันทึกอาจเป็นทางออกที่ดีที่สุดของคุณที่นี่ในการอ่านอย่างเดียว แต่จะมีการเปลี่ยนแปลงจำนวนเท่าใดในบันทึก พบว่ามีการตรวจสอบเพื่อดูว่ารวดเร็วและจำนวนที่คุณต้องผลักดัน

หากคุณไม่สามารถไปที่ Mirroring หรืออัปเกรดเป็นองค์กรปี 2012 ได้นั่นก็เป็นไปได้ว่าจะเป็นกลยุทธ์ที่ดีหากคุณสามารถใช้ Enterprise หากไม่ได้อยู่ในนั้น

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

จริงๆแล้วจะมีการ จำกัด ตัวเลือกที่แตกต่างกันโดยขึ้นอยู่กับการตอบคำถามสองสามข้อ

  • การยอมรับความล่าช้าของข้อมูล
  • ปริมาณข้อมูลที่เปลี่ยนแปลงในนาทีชั่วโมงและวันที่กำหนดการเชื่อมต่อกับอุปกรณ์รอง
  • อ่านข้อกำหนดในอินสแตนซ์รอง
  • เวลาของอินสแตนซ์รอง
  • การเปลี่ยนแปลงคีมาที่มีอยู่และวัตถุทั้งหมด
  • ความปลอดภัย

4

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

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

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

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


4

มากพอ ๆ กับที่ผู้คนมีความสุขกับการจำลองแบบของทรานแซคชันดูเหมือนว่าเหมาะสมกับสถานการณ์ของคุณ หมายเหตุสองประการ:

  1. คุณไม่จำเป็นต้องเริ่มต้นสมาชิกด้วย snapshot คุณสามารถสำรองข้อมูลของผู้เผยแพร่และเริ่มต้นด้วย
  2. คุณสามารถหยุดการส่งคำสั่งไปยังผู้สมัครสมาชิกเพียงแค่หยุดงานการกระจาย (เป็นเพียงงานตัวแทน SQL ปกติไม่ว่าจะเป็นผู้จัดจำหน่ายหรือผู้สมัครสมาชิกขึ้นอยู่กับว่าคุณได้ตั้งค่าการสมัครสมาชิกแบบพุชหรือพูลตามลำดับ) เพียงแค่คำนึงถึงการรักษาของคุณที่ตัวแทนจำหน่ายเพื่อให้คุณมีประวัติที่เพียงพอซึ่งคุณสามารถติดต่อกลับได้
  3. คุณสามารถเปลี่ยนการจัดทำดัชนีที่ผู้สมัครสมาชิกเพื่อรองรับปริมาณงานที่จะทำที่นั่น (สันนิษฐานประเภทรายงาน) แทนที่จะต้องยอมรับการจัดทำดัชนีจากผู้เผยแพร่ของคุณ (สันนิษฐานประเภท OLTP) หากคุณต้องการ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.