Hiểu kích thước khối


11

Câu hỏi của tôi nhắm vào Postgres, nhưng câu trả lời có thể đủ tốt đến từ bất kỳ nền tảng cơ sở dữ liệu nào.

Các giả định của tôi có đúng không:

  • Đĩa có kích thước khối cố định?
  • Bộ điều khiển RAID có thể có kích thước khối differnt? Có một khối RAID được chia thành nhiều khối đĩa thực không?
  • Hệ thống tập tin cũng có kích thước khối độc lập một lần nữa được chia thành kích thước khối RAID?
  • Postgres hoạt động với các khối 8k cố định. Làm thế nào để ánh xạ đến kích thước khối hệ thống tập tin xảy ra ở đây? Các khối Postkres 8k được kết hợp với nhau bởi hệ thống tập tin?

Khi thiết lập một hệ thống, tốt nhất là có tất cả các khối ở mức 8k? Hoặc các thiết lập không quan trọng? Tôi cũng đã tự hỏi nếu một số cài đặt kích thước khối "sai" có thể gây nguy hiểm cho tính toàn vẹn dữ liệu trong trường hợp xảy ra sự cố? Có lẽ nếu một khối Postkres 8k phải được chia thành nhiều khối đĩa?

Hoặc không có gì được gộp lại với nhau, và do đó tôi mất không gian đĩa với mọi sự không khớp giữa các kích thước khối được xác định?

Câu trả lời:


16

Ngành đĩa

Một đĩa có kích thước cung cố định, thường là 512 byte hoặc 4096 byte trên một số đĩa hiện đại; các đĩa này cũng sẽ có chế độ mô phỏng các cung 512 byte. Đĩa sẽ có các bản nhạc với số lượng ngành khác nhau; các rãnh gần bên ngoài đĩa có nhiều cung hơn vì chúng có nhiều chỗ hơn cho mật độ bit nhất định. Điều này cho phép sử dụng không gian đĩa hiệu quả hơn; thông thường, một bản nhạc sẽ có thứ gì đó giống như 1.000 cung 512 byte trên một đĩa hiện đại.

Một số cấu trúc định dạng cũng có thể bao gồm thông tin sửa lỗi trong secotrs, biểu hiện chính nó trong các đĩa được định dạng mức thấp với các cung từ 520 hoặc 528 byte. Trong trường hợp này, sector vẫn có 512 byte dữ liệu người dùng. Cả Windows và Linux đều không hỗ trợ điều này trực tiếp, mặc dù i5OS (IBM iSeries) và các bộ điều khiển SAN khác nhau làm được.

Thông thường, sector / head / track được dịch thành một địa chỉ khối logic; do các vấn đề lịch sử với khả năng tương thích ngược, hình học (đầu x sector x track) mà hệ điều hành (đặc biệt là trên các đĩa IDE và SATA) thường không liên quan đến cấu trúc vật lý của nó.

Kích thước sọc RAID

Bộ điều khiển RAID có thể có kích thước sọc cho một mảng bằng cách sử dụng phân dải (ví dụ: RAID-5 hoặc RAID-10). Nếu mảng có (cho exmaple) một dải 128k, thì mỗi đĩa có 128k dữ liệu liền kề, và sau đó bộ dữ liệu tiếp theo nằm trên đĩa tiếp theo. Thông thường bạn có thể mong đợi nhận được khoảng một sọc trên mỗi vòng quay của đĩa, vì vậy kích thước sọc có thể ảnh hưởng đến hiệu suất trên một số khối lượng công việc nhất định.

Sắp xếp phân vùng

Phân vùng đĩa có thể hoặc không thể căn chỉnh chính xác với dải RAID và có thể gây suy giảm hiệu suất do đọc tách nếu nó không được căn chỉnh. Một số hệ thống (ví dụ: máy chủ Windows 2008) sẽ tự động định cấu hình phân vùng để căn chỉnh với kích thước sọc ổ đĩa. Một số (ví dụ: máy chủ Windows 2003) sẽ không và bạn phải sử dụng tiện ích phân vùng hỗ trợ căn chỉnh sọc để đảm bảo chúng hoạt động.

Kích thước khối hệ thống tệp

Hệ thống tập tin sẽ phân bổ các khối lưu trữ trong các khối có kích thước nhất định. Nói chung, đây là cấu hình - ví dụ NTFS sẽ hỗ trợ các đơn vị phân bổ từ (IIRC) 4K đến 64K. Việc sắp xếp sai các phân vùng và khối hệ thống tệp thành các sọc RAID có thể khiến một khối hệ thống tệp duy nhất được đọc để tạo ra nhiều truy cập đĩa trong đó chỉ cần một khối nếu hệ thống tệp được căn chỉnh chính xác với các sọc RAID.

Kích thước khối cơ sở dữ liệu

Cơ sở dữ liệu sẽ phân bổ không gian trong một bảng hoặc chỉ mục trong một số kích thước khối nhất định. Trong trường hợp SQL Server, đây là 8K và 8K là mặc định trên nhiều hệ thống. Trên một số hệ thống như Oracle, đây là cấu hình và trên PostgreSQL, đây là tùy chọn thời gian xây dựng. Trên hầu hết các hệ thống, việc phân bổ không gian cho các bảng thường được thực hiện trong các khối lớn hơn, với các khối được phân bổ trong các khối đó.

Việc sắp xếp sai các khối phân bổ dữ liệu và hệ thống tập tin có thể tạo ra nhiều I / O cho một lần ghi khối, điều này có thể dẫn đến một hình phạt hiệu suất.

I / O Chunking

Thông thường, một DBMS thực sự sẽ thực hiện I / O của nó trong các khối nhiều hơn một khối. Ví dụ: trên SQL Server, tất cả I / O được thực hiện theo khối 8 khối, tổng cộng 64k). Trên Oracle đây là cấu hình. Việc kiểm tra ngẫu nhiên các tài liệu PostgreSQL không tiết lộ một mô tả cụ thể về việc PostgreQuery có làm điều này hay không, vì vậy tôi không chắc nó hoạt động như thế nào trên nền tảng này.

Khi khối I / O lớn hơn kích thước khối hệ thống tệp hoặc bị sai lệch với ranh giới dải RAID, việc ghi đĩa từ DB có thể gây ra nhiều lần ghi đĩa, tạo ra hình phạt hiệu năng.

Sử dụng không gian đĩa

Không có dung lượng đĩa bị lãng phí - I / O cơ sở dữ liệu sẽ sử dụng một hoặc nhiều thao tác I / O vật lý trên đĩa để hoàn thành - nhưng I / O được điều chỉnh không chính xác có thể tạo ra sự thiếu hiệu quả sẽ làm chậm cơ sở dữ liệu. Những điều chính phải được liên kết là:

  • Các sọc và phân vùng RAID - phân vùng sẽ bắt đầu trên ranh giới sọc RAID.

  • Phân bổ I / O của hệ thống tệp và các ranh giới phân vùng / phân vùng đột kích - ranh giới dải RAID phải thẳng hàng với đơn vị phân bổ hệ thống tệp và phải là bội số của kích thước đơn vị phân bổ hệ thống tệp.

  • Kích thước ghi đĩa và kích thước đơn vị phân bổ hệ thống tập tin. Cần có mối quan hệ 1: 1 giữa các hoạt động I / O cơ sở dữ liệu và các hoạt động I / O của hệ thống tệp.

Sai lệch không tạo ra vấn đề toàn vẹn dữ liệu lớn hơn so với hiện tại. Cơ sở dữ liệu và hệ thống tệp có các cơ chế để đảm bảo các thao tác hệ thống tệp là nguyên tử. Nói chung, một sự cố đĩa sẽ dẫn đến mất dữ liệu nhưng không phải là vấn đề toàn vẹn dữ liệu.


Câu trả lời rất hay. Tôi cảm thấy tồi tệ khi chỉ có thể cung cấp cho bạn một upvote ...
Franz Kafka

chỉ có một câu hỏi nữa: chính xác ý bạn là gì khi nói về việc căn chỉnh? Đó có phải là bội số của kích thước khối nhỏ hơn không? Ví dụ 32k được căn chỉnh thành 8k? Hoặc có những yếu tố khác liên quan?
Franz Kafka

@FranzKafka - Không, điều đó có nghĩa là khi một cái gì đó (thường là phân vùng đĩa) bắt đầu tại một vị trí không phải là bội số của những gì nó phải phù hợp. Ví dụ: nếu tôi có kích thước sọc RAID 128K và phân vùng không bắt đầu bằng bội số 128K từ 'khối 0' thì tôi có thể có các lần đọc logic phân chia thành hai đơn vị phân bổ vật lý, yêu cầu hai thao tác đọc, gây ra một thực hiện phạt.
Mối quan tâmOfTunbridgeWells
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.