ฉันหลังจากการยืนยันแนวคิดนี้เพื่อแก้ไขฐานข้อมูลที่มีประสิทธิภาพไม่ดีหรือมีข้อเสนอแนะที่ดีกว่าถ้ามีใครมี เปิดรับข้อเสนอแนะที่ดีกว่าเสมอ
ฉันมีฐานข้อมูลขนาดใหญ่มาก (มากกว่า 20 ล้านบันทึกการเติบโตประมาณ 1/2 ล้านต่อวัน) ซึ่งใช้ GUID เป็น PK
การดูแลในส่วนของฉัน แต่ PK นั้นทำคลัสเตอร์บนเซิร์ฟเวอร์ SQL และทำให้เกิดปัญหาประสิทธิภาพการทำงาน
เหตุผลสำหรับ guid - ฐานข้อมูลนี้มีการซิงโครไนซ์บางส่วนกับฐานข้อมูลอื่น 150 ฐานดังนั้น PK จึงจำเป็นต้องไม่ซ้ำกัน การซิงโครไนซ์ไม่ได้รับการจัดการโดย SQL Server แต่มีกระบวนการแบบกำหนดเองที่สร้างขึ้นซึ่งเก็บข้อมูลให้ตรงกับความต้องการของระบบ - ทั้งหมดขึ้นอยู่กับ GUID นั้น
ฐานข้อมูลระยะไกล 150 ตัวแต่ละตัวไม่เก็บข้อมูลแบบเต็มตามที่เก็บไว้ในฐานข้อมูล SQL ส่วนกลาง พวกเขาจัดเก็บชุดย่อยของข้อมูลที่พวกเขาต้องการจริงและข้อมูลที่ต้องการนั้นไม่ซ้ำกัน (10 จาก 150 ฐานข้อมูลอาจมีบางระเบียนเดียวกันจากฐานข้อมูลไซต์อื่นเช่นพวกเขาแบ่งปัน) นอกจากนี้ - ข้อมูลถูกสร้างขึ้นจริงที่ไซต์ระยะไกล - ไม่ใช่ที่จุดศูนย์กลาง - ดังนั้นจึงจำเป็นต้องมี GUID
ฐานข้อมูลกลางไม่เพียง แต่ใช้สำหรับการซิงค์ทุกอย่างเท่านั้น แต่ยังมีการเรียกใช้แบบสอบถามจากผู้ใช้มากกว่า 3,000 รายกับฐานข้อมูลที่มีขนาดใหญ่มาก นี่เป็นปัญหาใหญ่ในการทดสอบครั้งแรก
โชคดีที่เรายังไม่ได้อยู่ - ดังนั้นฉันสามารถเปลี่ยนแปลงและทำสิ่งต่าง ๆ แบบออฟไลน์ได้ถ้าจำเป็นซึ่งอย่างน้อยก็มีบางอย่าง
ประสิทธิภาพของฐานข้อมูลระยะไกลไม่ใช่ปัญหา - ชุดย่อยของข้อมูลมีขนาดค่อนข้างเล็กและโดยปกติฐานข้อมูลจะไม่มีขนาดใหญ่กว่า 1GB ข้อมูลจะถูกส่งกลับไปยังระบบหลักอย่างสม่ำเสมอและลบออกจาก BD ที่มีขนาดเล็กลงเมื่อไม่ต้องการใช้อีกต่อไป
ประสิทธิภาพของฐานข้อมูลส่วนกลางซึ่งเป็นผู้ดูแลบันทึกทั้งหมดนั้นมีความเลวร้ายเนื่องจาก GUID แบบคลัสเตอร์เป็นคีย์หลักสำหรับบันทึกจำนวนมากนั้น การกระจายตัวของดัชนีปิดแผนภูมิ
ดังนั้น - ความคิดของฉันในการแก้ไขปัญหาด้านประสิทธิภาพคือการสร้างคอลัมน์ใหม่ - รหัสประจำตัว BIGINT ที่ไม่ได้ลงชื่อ (1,1) จากนั้นเปลี่ยน PK แบบกลุ่มของคอลัมน์ BIGINT ตาราง
ฉันจะสร้างดัชนีที่ไม่เป็นคลัสเตอร์แบบไม่ซ้ำกันในฟิลด์ GUID ซึ่งเป็นคีย์หลัก
ฐานข้อมูลระยะไกลขนาดเล็ก 150 ไม่จำเป็นต้องรู้เกี่ยวกับ PK ใหม่ในฐานข้อมูล SQL Server กลาง - มันจะใช้สำหรับการจัดระเบียบข้อมูลในฐานข้อมูลและหยุดประสิทธิภาพและการกระจายตัวที่ไม่ดี
มันจะทำงานและปรับปรุงประสิทธิภาพของฐานข้อมูล SQL กลางและป้องกันการแตกแฟรกเมนต์ดัชนีในอนาคต (ในระดับหนึ่ง) หรือไม่? หรือฉันพลาดบางสิ่งที่สำคัญมากที่นี่ซึ่งจะกระโดดขึ้นไปกัดฉันและทำให้เกิดความเศร้าโศกมากยิ่งขึ้น?
int
ใน 4255 วัน (11.5 ปี) ถ้าเขาทำอย่างนั้นเขาจะโทษคุณใน 11.5 ปีเท่านั้น)