ทำความเข้าใจกับขนาดบล็อก


11

คำถามของฉันตั้งเป้าหมาย Postgres แต่คำตอบอาจดีพอที่มาจากพื้นหลังฐานข้อมูลใด ๆ

สมมติฐานของฉันถูกต้อง:

  • ดิสก์มีขนาดบล็อกคงที่หรือไม่
  • ตัวควบคุม RAID สามารถมีขนาดบล็อก differnt ได้หรือไม่ หนึ่ง RAID block ถูกแบ่งออกเป็นหลายบล็อกดิสก์จริงหรือไม่?
  • ระบบไฟล์ยังมีขนาดบล็อกอิสระซึ่งจะถูกแบ่งออกเป็นขนาดบล็อก RAID อีกครั้ง
  • Postgres ทำงานกับบล็อกขนาด 8k แบบคงที่ การแม็พกับขนาดบล็อกของระบบไฟล์เกิดขึ้นที่นี่ได้อย่างไร? Postgres บล็อกขนาด 8k ถูกรวมเข้าด้วยกันด้วยระบบไฟล์หรือไม่?

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

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

คำตอบ:


16

ส่วนของดิสก์

ดิสก์มีขนาดเซกเตอร์คงที่โดยปกติ 512 ไบต์หรือ 4096 ไบต์บนดิสก์ที่ทันสมัยบางอย่าง ดิสก์เหล่านี้จะมีโหมดที่พวกเขาจำลองเซกเตอร์ 512 ไบต์ ดิสก์จะมีแทร็กที่มีจำนวนเซ็กเตอร์ต่างกัน แทร็กใกล้กับด้านนอกของดิสก์มีเซ็กเตอร์มากขึ้นเนื่องจากมีพื้นที่มากขึ้นสำหรับความหนาแน่นของบิตที่กำหนด สิ่งนี้ทำให้การใช้พื้นที่ดิสก์มีประสิทธิภาพมากขึ้น โดยทั่วไปแทร็กจะมีสิ่งต่างๆเช่น 1,000 512 ไบต์ในดิสก์ที่ทันสมัย

โครงสร้างการจัดรูปแบบบางอย่างยังสามารถรวมข้อมูลการแก้ไขข้อผิดพลาดใน secotrs ซึ่งปรากฏตัวเองในดิสก์ที่มีการจัดรูปแบบระดับต่ำที่มีภาค 520 หรือ 528 ไบต์ ในกรณีนี้เซกเตอร์ยังคงมีข้อมูลผู้ใช้ 512 ไบต์ Windows และ Linux ไม่รองรับสิ่งนี้โดยตรงแม้ว่า i5OS (IBM iSeries) และตัวควบคุม SAN ต่างๆ

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

RAID Stripe Size

คอนโทรลเลอร์ RAID สามารถมีขนาดสตริปสำหรับอาเรย์โดยใช้การสตริป (เช่น RAID-5 หรือ RAID-10) หากอาร์เรย์มี (สำหรับ exmaple) แถบ 128k แต่ละดิสก์จะมีข้อมูลที่อยู่ติดกัน 128k จากนั้นชุดข้อมูลถัดไปจะอยู่ในดิสก์ถัดไป โดยปกติคุณสามารถคาดได้ว่าจะมีแถบประมาณหนึ่งแถบต่อการปฏิวัติของดิสก์ดังนั้นขนาดของแถบอาจส่งผลกระทบต่อประสิทธิภาพการทำงานของเวิร์กโหลดบางอย่าง

การจัดตำแหน่งพาร์ติชัน

ดิสก์พาร์ติชันอาจจัดเรียงหรือไม่สอดคล้องกับแถบ RAID และอาจทำให้ประสิทธิภาพลดลงเนื่องจากการอ่านแยกหากไม่ได้จัดแนว บางระบบ (เช่นเซิร์ฟเวอร์ Windows 2008) จะกำหนดค่าพาร์ติชันให้สอดคล้องกับขนาดแถบไดรฟ์ข้อมูลดิสก์โดยอัตโนมัติ บางอย่าง (เช่นเซิร์ฟเวอร์ Windows 2003) จะไม่และคุณจะต้องใช้ยูทิลิตี้พาร์ติชันที่รองรับการจัดแนวแถบเพื่อให้แน่ใจว่าพวกเขาทำ

ขนาดบล็อกระบบไฟล์

ระบบไฟล์จะจัดสรรบล็อกของหน่วยเก็บข้อมูลเป็นกลุ่มขนาดที่แน่นอน โดยทั่วไปสิ่งนี้สามารถกำหนดค่าได้ - ตัวอย่างเช่น NTFS จะสนับสนุนหน่วยการจัดสรรจาก (IIRC) 4K ถึง 64K การวางแนวของพาร์ติชันและบล็อกระบบไฟล์ให้เป็นลายทาง RAID อาจทำให้บล็อกระบบไฟล์เดียวถูกอ่านเพื่อสร้างการเข้าถึงดิสก์หลาย ๆ ครั้งซึ่งจำเป็นต้องใช้เพียงครั้งเดียวหากบล็อกระบบไฟล์จัดแนวอย่างถูกต้องกับแถบ RAID

ขนาดบล็อกฐานข้อมูล

ฐานข้อมูลจะจัดสรรพื้นที่ในตารางหรือดัชนีในขนาดบล็อกที่กำหนด ในกรณีของ SQL Server นี่คือ 8K และ 8K เป็นค่าเริ่มต้นในหลาย ๆ ระบบ ในบางระบบเช่น Oracle สิ่งนี้สามารถกำหนดค่าได้และบน PostgreSQL มันเป็นตัวเลือกเวลา build ในการจัดสรรพื้นที่ของระบบส่วนใหญ่ไปยังตารางโดยทั่วไปแล้วจะทำในกลุ่มที่มีขนาดใหญ่กว่าโดยมีการจัดสรรบล็อกภายในกลุ่ม

การวางแนวของระบบไฟล์และบล็อกการจัดสรรข้อมูลสามารถสร้าง I / O หลาย ๆ ตัวสำหรับการเขียนบล็อกเดียวซึ่งสามารถทำให้ประสิทธิภาพลดลง

I / O Chunking

โดยปกติแล้ว DBMS จะทำ I / O ของมันในบล็อกมากกว่าหนึ่งบล็อก ตัวอย่างเช่นบน SQL Server I / O ทั้งหมดจะทำในกลุ่มของ 8 บล็อกรวม 64k) บน Oracle นี่สามารถกำหนดค่าได้ การตรวจสอบเอกสาร PostgreSQL อย่างไม่เป็นทางการไม่เปิดเผยคำอธิบายที่เฉพาะเจาะจงว่า PostgreSQL ทำสิ่งนี้หรือไม่ดังนั้นฉันไม่แน่ใจว่ามันทำงานบนแพลตฟอร์มนี้ได้อย่างไร

เมื่อก้อน I / O มีขนาดใหญ่กว่าขนาดบล็อกของระบบไฟล์หรือมีการจัดแนวที่ไม่ถูกต้องกับขอบเขตของแถบ RAID การเขียนดิสก์จากฐานข้อมูลอาจทำให้เกิดการเขียนดิสก์หลายครั้งซึ่งสร้างโทษประสิทธิภาพ

การใช้พื้นที่ดิสก์

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

  • RAID stripes และพาร์ติชั่น - พาร์ติชั่นควรเริ่มจากขอบเขตของ RAID RAID.

  • การจัดสรรระบบไฟล์ I / O และขอบเขตการโจมตีสไทรป์ / พาร์ติชั่น - ขอบเขตสไทรพด์ RAID จะต้องจัดแนวกับหน่วยการจัดสรรระบบไฟล์และควรเป็นขนาดของหน่วยการจัดสรรระบบไฟล์หลายขนาด

  • ขนาดการเขียนดิสก์และขนาดหน่วยการจัดสรรระบบไฟล์ ควรมีความสัมพันธ์แบบ 1: 1 ระหว่างการดำเนินการ I / O ฐานข้อมูลและการดำเนินการ I / O ของระบบไฟล์

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


คำตอบที่ดีมาก ฉันรู้สึกไม่ดีเพียงสามารถให้ upvote หนึ่งคุณ ...
Franz Kafka

อีกหนึ่งคำถาม: คุณหมายถึงอะไรเมื่อพูดถึงการจัดตำแหน่ง นั่นเป็นขนาดบล็อกที่เล็กลงหรือไม่? เช่น 32k อยู่ในแนวเดียวกับ 8k? หรือมีปัจจัยอื่น ๆ ที่เกี่ยวข้อง?
Franz Kafka

@FranzKafka - ไม่มันหมายถึงเมื่อบางสิ่ง (โดยทั่วไปคือพาร์ติชั่นดิสก์) เริ่มต้นในตำแหน่งที่ไม่ใช่ตัวคูณที่สำคัญของสิ่งที่จะต้องจัดแนว ตัวอย่างเช่นถ้าฉันมีแถบสแต็กขนาด 128K RAID และพาร์ติชันไม่ได้เริ่มต้นที่ 128K หลาย ๆ ตัวจาก 'บล็อก 0' ฉันสามารถอ่านแบบลอจิคัลที่แยกเป็นสองหน่วยการจัดสรรทางกายภาพซึ่งต้องใช้การอ่านสองครั้ง โทษประสิทธิภาพ
ConcOfOfTunbridgeWells
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.