บันทึกและไดรฟ์ข้อมูลมีรูปแบบการเข้าถึงข้อมูลที่แตกต่างกันซึ่งขัดแย้งกัน (อย่างน้อยก็ในทางทฤษฎี) เมื่อพวกเขาแชร์ไดรฟ์
บันทึกการเขียน
การเข้าถึงบันทึกประกอบด้วยการเขียนเรียงลำดับขนาดเล็กจำนวนมาก ค่อนข้างง่ายบันทึก DB เป็นบัฟเฟอร์แหวนที่มีรายการคำสั่งในการเขียนรายการข้อมูลออกไปยังตำแหน่งเฉพาะบนดิสก์ รูปแบบการเข้าถึงประกอบด้วยการเขียนเรียงลำดับขนาดเล็กจำนวนมากซึ่งต้องรับประกันว่าจะเสร็จสมบูรณ์ - ดังนั้นจึงถูกเขียนลงดิสก์
ตามหลักแล้วบันทึกควรอยู่ในความเงียบ (เช่นไม่ได้แบ่งปันกับสิ่งอื่น) โวลุ่ม RAID-1 หรือ RAID-10 คุณสามารถดูกระบวนการในขณะที่ DBMS หลักเขียนรายการบันทึกและเธรดตัวอ่านบันทึกอย่างน้อยหนึ่งเธรดที่ใช้บันทึกและเขียนการเปลี่ยนแปลงออกไปยังดิสก์ข้อมูล (ในทางปฏิบัติกระบวนการถูกปรับให้เหมาะสมเพื่อให้การเขียนข้อมูลถูกเขียน ออกไปทันทีที่เป็นไปได้) หากมีปริมาณการใช้งานอื่น ๆ บนดิสก์บันทึกหัวจะถูกย้ายไปรอบ ๆ โดยการเข้าถึงอื่น ๆ เหล่านี้และการเขียนบันทึกตามลำดับกลายเป็นการสุ่มเขียนบันทึก สิ่งเหล่านี้ช้ากว่ามากดังนั้นดิสก์บันทึกที่ไม่ว่างสามารถสร้างฮอตสปอตซึ่งทำหน้าที่เป็นคอขวดในระบบทั้งหมด
Data Writes
(อัปเดต) บันทึกการเขียนจะต้องส่งไปยังดิสก์ (เรียกว่าสื่อที่มั่นคง) เพื่อให้การทำธุรกรรมมีความถูกต้องและมีสิทธิ์ในการส่ง หนึ่งสามารถดูเหตุผลนี้เป็นรายการบันทึกการเขียนและใช้เป็นคำแนะนำในการเขียนหน้าข้อมูลออกไปยังดิสก์โดยกระบวนการไม่ตรงกัน ในทางปฏิบัติแล้วการเขียนหน้าดิสก์จะถูกจัดทำขึ้นจริงและถูกบัฟเฟอร์ในเวลาที่มีการสร้างรายการบันทึก แต่ไม่จำเป็นต้องเขียนทันทีเพื่อให้การทำธุรกรรมเกิดขึ้น บัฟเฟอร์ดิสก์ถูกเขียนลงในสื่อที่มีเสถียรภาพ (ดิสก์) โดยกระบวนการ Lazy Writer (ขอบคุณ Paul Randal สำหรับการชี้จุดนี้) ซึ่งบทความ Technet นี้กล่าวถึงรายละเอียดเพิ่มเติมเล็กน้อย
นี่เป็นรูปแบบการเข้าถึงที่สุ่มมากดังนั้นการแชร์ฟิสิคัลดิสก์เดียวกันกับไฟล์บันทึกจึงสามารถสร้างคอขวดเทียมในประสิทธิภาพของระบบ รายการบันทึกจะต้องเขียนสำหรับการทำธุรกรรมที่จะกระทำการเพื่อให้มีการสุ่มพยายามชะลอกระบวนการนี้ (สุ่ม I / O เป็นมากช้ากว่าบันทึกลำดับ I / O) จะเปิดล็อกจาก sequenital ลงในอุปกรณ์ที่เข้าถึงโดยสุ่ม สิ่งนี้จะสร้างคอขวดของประสิทธิภาพที่ร้ายแรงในระบบไม่ว่างและควรหลีกเลี่ยง เช่นเดียวกับเมื่อแบ่งปันพื้นที่ชั่วคราวที่มีปริมาณการบันทึก
บทบาทของการแคช
ตัวควบคุม SAN มักจะมีแคช RAM ขนาดใหญ่ซึ่งสามารถรองรับปริมาณการใช้งานการเข้าถึงแบบสุ่มในระดับหนึ่ง อย่างไรก็ตามสำหรับความสมบูรณ์ของทรานแซคชันมันเป็นที่พึงปรารถนาที่จะมีการเขียนดิสก์จาก DBMS รับประกันว่าจะเสร็จสมบูรณ์ เมื่อคอนโทรลเลอร์ถูกตั้งค่าให้ใช้การแคชการเขียนกลับบล็อกสกปรกจะถูกแคชและการรายงาน I / O จะถูกรายงานว่าเสร็จสมบูรณ์ไปยังโฮสต์
สิ่งนี้สามารถทำให้ปัญหาการช่วงชิงเป็นจำนวนมากได้อย่างราบรื่นเนื่องจากแคชสามารถดูดซับ I / O จำนวนมากที่จะออกไปที่ดิสก์ทางกายภาพ นอกจากนี้ยังสามารถปรับความเท่าเทียมกันในการอ่านและเขียนสำหรับ RAID-5 ซึ่งลดผลกระทบต่อประสิทธิภาพการทำงานที่โวลุ่ม RAID-5 มี
นี่คือลักษณะที่ขับเคลื่อน 'ให้ SAN จัดการกับมัน' โรงเรียนแห่งความคิดโดยที่มุมมองนี้มีข้อ จำกัด บางประการ:
แคชการเขียนกลับยังคงมีโหมดความล้มเหลวที่อาจสูญเสียข้อมูลและคอนโทรลเลอร์ได้ทำหน้าที่เป็น DBMS โดยบอกว่ามีการเขียนบล็อกลงดิสก์ในความเป็นจริง ด้วยเหตุนี้คุณอาจไม่ต้องการใช้แคชการเขียนกลับสำหรับแอปพลิเคชันการทำธุรกรรมโดยเฉพาะอย่างยิ่งสิ่งที่เก็บข้อมูลภารกิจสำคัญหรือข้อมูลทางการเงินซึ่งปัญหาความสมบูรณ์ของข้อมูลอาจมีผลกระทบร้ายแรงต่อธุรกิจ
SQL Server (โดยเฉพาะ) ใช้ I / O ในโหมดที่แฟล็ก (เรียกว่า FUA หรือ Forced Update Access) บังคับให้เขียนทางกายภาพไปยังดิสก์ก่อนที่การโทรจะส่งกลับ ไมโครซอฟท์มีโปรแกรมการรับรองและหลาย SAN ผู้จำหน่ายฮาร์ดแวร์การผลิตที่ได้รับเกียรตินิยมความหมายเหล่านี้ (ต้องการสรุปที่นี่ ) ในกรณีนี้ไม่มีจำนวนแคชที่จะเพิ่มประสิทธิภาพการเขียนดิสก์ซึ่งหมายความว่าปริมาณการใช้งานบันทึกจะฟาดถ้ามันนั่งอยู่บนปริมาณที่ใช้ร่วมกันไม่ว่าง
หากแอปพลิเคชั่นสร้างปริมาณการใช้งานดิสก์จำนวนมากชุดการทำงานอาจล้นแคชซึ่งจะทำให้เกิดปัญหาการเขียน
หาก SAN ถูกแชร์กับแอปพลิเคชั่นอื่น ๆ (โดยเฉพาะอย่างยิ่งในดิสก์โวลุ่มเดียวกัน) การรับส่งข้อมูลจากแอปพลิเคชันอื่นสามารถสร้างคอขวดบันทึกได้
แอปพลิเคชั่นบางตัว (เช่นคลังข้อมูล) สร้างสไปค์โหลดขนาดใหญ่ชั่วคราวซึ่งทำให้พวกมันต่อต้านโซเชียลบน SAN ได้ค่อนข้างมาก
แม้กระทั่งบนโวลุ่มบันทึกแยก SAN ขนาดใหญ่ก็ยังแนะนำให้ใช้ คุณอาจไม่ต้องกังวลกับเลย์เอาต์ในแอพพลิเคชั่นที่ใช้งานเบา ในแอปพลิเคชันขนาดใหญ่จริง ๆ คุณอาจได้รับประโยชน์จากคอนโทรลเลอร์ SAN หลายตัว Oracle เผยแพร่ชุดของโครงร่างคลังข้อมูลกรณีศึกษาที่การกำหนดค่าขนาดใหญ่บางส่วนเกี่ยวข้องกับคอนโทรลเลอร์หลายตัว
รับผิดชอบต่อการแสดงในที่ที่เป็นของมัน
สำหรับบางสิ่งที่มีปริมาณมากหรือประสิทธิภาพอาจทำให้เกิดปัญหาให้ทีม SAN รับผิดชอบต่อประสิทธิภาพของแอปพลิเคชัน หากพวกเขาจะเพิกเฉยต่อคำแนะนำของคุณสำหรับการกำหนดค่าจากนั้นตรวจสอบให้แน่ใจว่าการจัดการตระหนักถึงเรื่องนี้และความรับผิดชอบต่อประสิทธิภาพของระบบอยู่ในสถานที่ที่เหมาะสม โดยเฉพาะอย่างยิ่งให้สร้างแนวทางที่ยอมรับได้สำหรับสถิติประสิทธิภาพของคีย์ DB เช่น I / O waits หรือรอ latch หน้าหรือแอปพลิเคชัน I / O SLA ที่ยอมรับได้
โปรดทราบว่าการมีความรับผิดชอบในการแยกการแสดงข้ามหลายทีมจะสร้างแรงจูงใจให้ใช้นิ้วชี้และส่งเงินให้ทีมอื่น นี่คือรูปแบบการต่อต้านการจัดการที่เป็นที่รู้จักและสูตรสำหรับปัญหาที่ลากออกมาเป็นเดือนหรือเป็นปีโดยที่ไม่ได้รับการแก้ไข ตามหลักแล้วควรมีสถาปนิกเดียวที่มีสิทธิ์ในการระบุการเปลี่ยนแปลงการกำหนดค่าแอปพลิเคชันฐานข้อมูลและ SAN
นอกจากนี้เกณฑ์มาตรฐานระบบภายใต้การโหลด หากคุณสามารถจัดเรียงได้เซิร์ฟเวอร์มือสองและอาร์เรย์ที่แนบโดยตรงสามารถซื้อได้ค่อนข้างถูกบน Ebay หากคุณตั้งค่ากล่องเช่นนี้ด้วยหนึ่งหรือสองอาร์เรย์ดิสก์คุณสามารถ frig ด้วยการกำหนดค่าดิสก์ทางกายภาพและวัดผลกระทบต่อประสิทธิภาพ
ตัวอย่างเช่นฉันได้ทำการเปรียบเทียบระหว่างแอปพลิเคชันที่ทำงานบน SAN ขนาดใหญ่ (IBM Shark) และกล่องสองซ็อกเก็ตที่มีอาร์เรย์ U320 แนบโดยตรง ในกรณีนี้ฮาร์ดแวร์มูลค่า 3,000 ปอนด์ที่ซื้อจาก ebay มีประสิทธิภาพสูงกว่า SAN ระดับไฮเอนด์ 1 ล้านปอนด์โดยใช้สองตัว - บนโฮสต์ที่มี CPU และการกำหนดค่าหน่วยความจำเทียบเท่าโดยประมาณ
จากเหตุการณ์เฉพาะนี้อาจเป็นเรื่องที่ถกเถียงกันอยู่ว่าการมีเรื่องแบบนี้เป็นวิธีที่ดีมากในการทำให้ผู้ดูแลระบบ SAN ซื่อสัตย์