30 Eylül 2011 Cuma

Data Blocks, Extents and Segments

Selamun aleykum Arkadaşlar,
Bügüne kadar yaptığım çevirilerde genellikle Oracle şirketi tarafından sunulan Oracle® Database Concepts 11g Release 1 (11.1) yaralandım .Gönderilerimde ilk önce ingilizcesi olarak, ingilizcesi zayıf olan arkadaşlar için de türkçesi altında yer aldı.Şu andan itibaren ayrı ayrı olarak hem ingilizce hem türkçe gönderimlerine devam edeceğim inşallah.Malum derslerim başladı.Ama yinede fırsat buldukça gayret edeceğim.
Arkadaşlar Oracle etkin bir şekilde kullanmak ve önümüze gelebilecek sorunları çözmek için Oracle mimarisini anlamak zorundayız.Bir özelliği kullanırken onun yapacağı etkileri öngörmek icin bilmeliyiz,yoksa derdimiz yeni bir Oracle yazmak değil.
Oracle Veritabanı veritabanındaki tüm veriler için mantıksal veritabanı alanı ayırır. Veritabanı alanı tahsisi birimleri data bloklar, extents ve segmentlerdir.Extent'ler data block'larında oluşur, segment'lerse Extent'lerden oluşur. (Aslında bu sunumun en önemli konusu Data blocklarının yapısı ve allocation/deallocation mekanizması).Aşağıdaki resimde bu yapı görülmektedir:
 
Figure 2-1 The Relationships Among Segments, Extents, and Data Blocks 
 
Data Bloklar
Data Block'ları Oracle'in veriyi tutan en temel elemanlarıdır ve I/O birimidir.Yani okuma ve yazmalar blok bazında gerçekleşir.Mantıksal bloklardır.Bir blok genellikle birden fazla işletim sistemi bloğundan oluşur.Bu uzunluklar işletim sistemindeki blok uzunluklardan farklı olabilir.Bir tablo boşluğu yaratılırken , işletim sisteminde veri dosyalarının bulunduğu yer , Oracle tarafından kendi blok yapısına göre düzenlenir.Veri dosyasının tamamı dolu olmasa bile , işletim sistemi ayrılan yeri dolu olarak görür.Blok büyüklüğü Oracle init.ora parametre dosyasındaki DB_BLOCK_SIZE değerine bağlıdır.

Data Block Format
Data blockları Header, Table Directory, Row Directory, Row Data ve Free Space'ten oluşur. Bir Data Block'ta yanlızca bir objenin verisi bulunabilir, aynı tablespace'e ait olsa da birden fazla objenin verisi aynı data block'ta olamaz. Yanlız elbette bir objenin verisi birden fazla data block'lara dağılmış olabilir. Bu durumda Data Block zincirleri oluşturulur.Aşağıdaki resimde bu yapı görülmektedir.


Header (Common and Variable)

Header(başlık) blok adresi ve segment türü gibi genel blok bilgisini (örneğin, veri veya dizin) içerir

Table Directory(Tablo Dizini)

Data Bloğun bu bölümü, bu blok içinde satırlara sahip olan tablo hakkında bilgiler içerir.

Row Directory

Data bloğun bu bölümü blok içindeki gerçek satırlar hakkında bilgileri içerir(satır veri alanı, her satır parçası için adresleri dahil olmak üzere).
Bir data blok destek bitlerinin satır dizisinin içinde boşluk tahsis edildikten sonra, satır silindiğinde boşluğu geri kazanılmaz.Bu nedenle, şu anda boş ama bir kerede 50 satırdan fazla olsa, row directory için başlık içinde ayrılan 100 bayt sahip olana kadar devam eder.Oracle Veritabanı, bu alanı sadece bloğun içine yeni satırlar eklendiği zaman yeniden kullanır.

Overhead

Data block header, table directory ve row directory toplu bir şekilde overhead olarak adlandırılır.Bazı block overhead boyutu sabittir, toplam blok overhead boyutu değişkendir.Ortalama olarak, data block overhead toplam sabit ve değişken kısımları 84 ile 107 byte arasındadır.

Row Data

Bir veri bloğunun bu bölümü tablo ya da indexin verileri içerir. Satırlar blokları yayılabilirler.

Free Space

Free space yeni satır ekleme ve güncellemeleri için ek alan (örneğin, sonundaki boş bir değer dolu olarak güncellendiğinde) gereken satırlar tahsis edilir.


  • Data Block'larını yönetmek için Free List ve Used List'ler var. Fakat burda da çok mantıklı bir yaklaşımı var Oracle'ın. Bir Data Block'ta boşluk olması onun free list'te olması anlamına gelmez. Aynı şekilde bir miktar veri olması da used list'te olması anlamına gelmez. Bir block'tan bir miktar veri silindiğinde veri miktarı belirtilen yüzdenin(ki bu PCTUSED parametresidir) altına düşünce Used lis'te ise Free List'e alınır. Aynı şekilde, veri eklendiğinde veri miktarı aynı yüzdenin üstüne çıkarsa ve block Free List'te ise Used List'e alınır. 


      Son olarak, veri değişimleri(update'ler) göz önüne alınarak, Data Block'larda bir miktar boşluk bırakılır.Bunu da PCTFREE parametresi belirler. İçerdeki veri arttığında, bu free alan kullanılır. (Yeni veri eklemek için değil!) Veri, block'a sığmayacak kadar artarsa sistemden yeni bir block alınır ve mevcut veri bölünerek chain oluşturulur.

    Extents
    Oracle ikinci seviyedeki mantıksal gruplamadır.Bir extent ard arda gelen bloklardan oluşur.
    Extents ne zaman oluşturulur?
    Bir tablo oluşturduğunuzda, Oracle Veritabanı tablo veri segmentine data blokların belirlenmiş bir sayıda bir başlagıç extent oluşturulur.Henüz hiç bir satır eklenmemiş olmasına rağmen, başlangıç extentine karşılık gelen Oracle Veritabanı Data Blokları bu tablonun satırları için
    ayırır.
    Segments
    Segment, tabloları indexleri vs.oluşturan extendlerden oluşan mantıksal yapıdır.Oracle'da bir tablo, bir index vs. Oluşturduğumuz zaman Oracle bir segmenti alır.Bu segment az bir extentden ve bu extent de az bir bloktan oluşur.Daha anlaşılır olması için bir segment eşittir bir tablo diyerbiliriz.
    Oracle çeşitli segment tipleri vardır:
  • Veri Segmenti,
  • Index segmenti,
  • Geçici segment,
  • Gerialma segmentidir.






Hiç yorum yok:

Yorum Gönder