Blok boyutlarını anlama


11

Sorum Postgres'i hedefliyor, ancak cevaplar herhangi bir veritabanı arka planından gelebilecek kadar iyi olabilir.

Varsayımlarım doğru mu?

  • Disklerin sabit bir blok boyutu var mı?
  • RAID denetleyicisinin farklı bir blok boyutu olabilir mi? Bir RAID bloğu birden çok gerçek disk bloğuna bölünüyor mu?
  • Dosya sistemi ayrıca RAID blok boyutuna bölünen bağımsız bir blok boyutuna sahiptir?
  • Postgres sabit 8k bloklarla çalışır. Dosya sistemi blok boyutuyla eşleme burada nasıl olur? Postgres 8k blokları dosya sistemi tarafından bir araya getiriliyor mu?

Bir sistem kurarken tüm blokların 8k'de olması en iyisidir? Veya ayarlar gerçek değil mi? Ayrıca, bazı "yanlış" blok boyutu ayarlarının bir çökme durumunda veri bütünlüğünü tehlikeye atabileceğini merak ediyordum. Belki bir Postgres 8k bloğunun birden fazla disk bloğuna bölünmesi gerekiyorsa?

Yoksa hiçbir şey bir araya getirilmez ve bu nedenle tanımlanan blok boyutları arasındaki her uyumsuzluk ile disk alanı kaybeder miyim?

Yanıtlar:


16

Disk Sektörleri

Bir diskin sabit sektör boyutu vardır, bazı modern disklerde normalde 512 bayt veya 4096 bayt; bu disklerin 512 bayt sektörleri taklit ettikleri bir mod da olacaktır. Disk, değişen sayıda sektöre sahip parçalara sahip olacaktır; diskin dışına yakın olan izler, belirli bir bit yoğunluğu için daha fazla alana sahip oldukları için daha fazla sektöre sahiptir. Bu, disk alanının daha verimli kullanılmasını sağlar; tipik olarak bir yol, modern bir diskte 1.000 512 bayt sektör gibi bir şey içerir.

Bazı biçimlendirme yapıları, 520 veya 528 bayt sektörlerle düşük düzeyli biçimlendirilmiş disklerde kendini gösteren ikincillerdeki hata düzeltme bilgilerini de içerebilir. Bu durumda sektör hala 512 bayt kullanıcı verisine sahiptir. Ne Windows ne de Linux bunu doğrudan desteklemese de i5OS (IBM iSeries) ve çeşitli SAN denetleyicileri destekliyor.

Normalde sektör / kafa / parça mantıksal bir blok adresine çevrilir; geriye dönük uyumluluk ile ilgili tarihsel sorunlar nedeniyle, işletim sisteminin (özellikle IDE ve SATA disklerinde) gördüğü geometrinin (kafalar x sektörler x yol) normal olarak fiziksel yapısıyla ilgisi yoktur.

RAID şerit Boyutu

RAID denetleyicisi, şeritleme kullanan bir dizi için şerit boyutuna sahip olabilir (örn. RAID-5 veya RAID-10). Dizide (örnek olarak) 128k şerit varsa, her diskte 128k bitişik veri bulunur ve bir sonraki veri kümesi bir sonraki diskte olur. Normalde diskin her dönüşü için yaklaşık bir şerit almayı bekleyebilirsiniz, böylece şerit boyutu belirli iş yüklerindeki performansı etkileyebilir.

Bölüm Hizalama

Bir disk bölümü tam olarak bir RAID şeridi ile hizalanabilir veya hizalanmayabilir ve hizalanmamışsa bölünmüş okumalar nedeniyle performans düşüşüne neden olabilir. Bazı sistemler (örn. Windows 2008 sunucusu) bölümleri otomatik olarak disk birimi şerit boyutlarıyla hizalanacak şekilde yapılandırır. Bazıları (örn. Windows 2003 sunucusu) çalışmaz ve bunu sağlamak için şerit hizalamayı destekleyen bir bölüm yardımcı programı kullanmanız gerekir.

Dosya Sistemi Blok Boyutu

Dosya sistemi, belirli bir boyuttaki yığınlara depolama blokları tahsis edecektir. Genellikle bu yapılandırılabilir - örneğin NTFS (IIRC) 4K ila 64K arasındaki ayırma birimlerini destekleyecektir. Bölümlerin ve dosya sistemi bloklarının RAID şeritlerine yanlış hizalanması, tek bir dosya sistemi bloğunun birden çok disk erişimi oluşturmasına neden olabilir; burada dosya sistemi RAID şeritleriyle doğru hizalanmışsa yalnızca bir tanesi gerekli olur.

Veritabanı Bloğu Boyutu

Veritabanı, belirli bir blok boyutunda bir tablo veya dizinde alan ayıracaktır. SQL Server söz konusu olduğunda bu 8K'dır ve birçok sistemde 8K varsayılan değerdir. Oracle gibi bazı sistemlerde bu yapılandırılabilir ve PostgreSQL'de bir oluşturma zamanı seçeneğidir. Çoğu sistemde tablolara alan tahsisi normalde daha büyük parçalar halinde yapılır ve bu parçalar içinde bloklar tahsis edilir.

Dosya sisteminin ve veri ayırma bloklarının yanlış hizalanması, tek bir blok yazma için birden fazla G / Ç oluşturabilir ve bu da performans cezası verebilir.

G / Ç Tıklaması

Normalde bir DBMS aslında I / O'yu birden fazla bloğun yığınlarında yapar. Örneğin, SQL Server'da, tüm G / Ç, toplam 64k olan 8 blokluk parçalar halinde yapılır). Oracle'da bu yapılandırılabilir. PostgreSQL belgelerinin gündelik denetimi, PostgreSQL'in bunu yapıp yapmadığının belirli bir açıklamasını ortaya koymaz, bu yüzden bu platformda nasıl çalıştığından emin değilim.

G / Ç yığını dosya sistemi blok boyutundan daha büyük olduğunda veya RAID şerit sınırları ile yanlış hizalandığında, DB'den disk yazma işlemi birden fazla disk yazılmasına neden olabilir ve bu da performans cezası oluşturur.

Disk Alanı Kullanımı

Disk alanı boşa harcanmaz - veritabanı G / Ç işlemi tamamlamak için disk üzerinde bir veya daha fazla fiziksel G / Ç işlemi kullanır - ancak yanlış ayarlanmış G / Ç, veritabanını yavaşlatacak verimsizliklere neden olabilir. Hizalanması gereken ana şeyler şunlardır:

  • RAID şeritleri ve bölümleri - bölüm bir RAID şerit sınırında başlamalıdır.

  • Dosya sistemi G / Ç ayırma ve raid şeridi / bölüm sınırları - RAID şerit sınırı bir dosya sistemi ayırma birimiyle hizalanmalı ve dosya sistemi ayırma birimi boyutunun katı olmalıdır.

  • Disk yazma boyutu ve dosya sistemi ayırma birimi boyutu. Veritabanı G / Ç işlemleri ile dosya sistemi G / Ç işlemleri arasında 1: 1 ilişki olmalıdır.

Yanlış hizalama, aksi takdirde mevcut olandan daha büyük bir veri bütünlüğü sorunu yaratmaz. Veritabanı ve dosya sistemi, dosya sistemi işlemlerinin atomik olmasını sağlayan mekanizmalara sahiptir. Genellikle disk çökmesi veri kaybına neden olur, ancak veri bütünlüğü sorunlarına neden olmaz.


Çok güzel bir cevap. Sana sadece bir oy verebiliyorum ...
Franz Kafka

sadece bir soru daha: Hizalama hakkında konuşurken tam olarak ne demek istiyorsun? Bu, daha küçük blok boyutunun katı mıdır? Örneğin, 32k 8k ile hizalanmıştır? Veya başka faktörler var mı?
Franz Kafka

@FranzKafka - Hayır, bu, bir şeyin (genellikle disk bölümü) hizalanması gereken şeyin ayrılmaz bir katı olmayan bir konumda başladığı anlamına gelir. Örneğin, 128K RAID şerit boyutum varsa ve bölüm 'blok 0'dan 128K'nın katında başlamıyorsa, iki okuma işlemi gerektiren iki okuma işlemi gerektiren, performans cezası.
ConcernedOfTunbridgeWells
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.