|
|
|
Turkcell Staj Günlüğü - 2: Data Blocks, Extends and Segments
|
Category: SQL-Oracle-PL/SQL
Date: 05.07.2007 18:30:15
|
Tekrar merhaba, bu makalede de stajımızın ikinci günü hakkında birşeyler karalayacağım :)
Tekrar hatırlatayım ki "Turkcell Staj Günlüğü"ne blogdaki bir yazı dizisi olarak başladım. Bu da ilk makale'nin devamı niteliğinde. Lütfen okumayanlar ilk makaleyi de okusunlar.
2. gün (04.07.2007) sabah çok fazla aksiyonlu geçmese de, kendime güzel basit bir Oracle kitabı bulmayı başardım: "Oracle 9i: New features for Administration" Hoş bir kitaptı, biraz göz attım. "11g'nin çıkmak üzere olduğu bir dönemde 9i: New Features kitabından daha güncel birşeyler bulamadın mı" diye söylenmeyin, çünkü dün Tonguç bey bahsetti, Turkcell bünyesinde 10g olduğu gibi bir miktar 9i ve 8i database'ler de var. Bu yüzden en azından son dakikada şaşırmamak adına onlar hakkında da bir miktar bilgi sahibi olmamızda fayda var. Eminim Türkiye'deki diğer bir çok şirketin de geçmişten kalma database'leri vardır. O kitapta kısa bir gözatmada gözüme database'lerde güvenliğin önemini anlatan şu söz takıldı ve çok hoşuma gitti: "Having an insecure database is equivalent to not having a database at all" :) Her ne kadar bir developerlar güvenlikten ziyade kod geliştirmek ve performansla ilgileniyor olsak da bu sözü de kafamızın bir ucunda tutarsak gelecekte torunlarımıza "zamanında bir söz vardı..." tarzı şeyler söyleyeceğimiz bir şeyler olur sanıyorum :) Şaka bir yana, teknoloji geliştikçe herhalde güvenliğin önemi hiç azalmayacak aksine artacak gibi geliyor bana. Yani bu söz torunlarımız için çok da nostaljik olmayacaktır sanırım :))
2. gün öğleden sonra sevgili Ersin ÜNKAR'ın sunumu vardı. "Data Blocks, Extends and Segments" başlıklı, çok keyifli bir sunum oldu. Temelde Oracle'ın data block yapılarını öğrenmiş olduk. Birçok şey öğrendiğimi hissederek gerçekten çok keyif aldım. Haa, birde sunumun başında iyi bir developer(!)'ın nasıl olması gerektiğini anlatan hoş bir giriş vardı :) Ersin'in sunumunu da dinleyici notlarıyla birlikte buradan indirerek göz gezdirmenizi tavsiye ederim.
Çok verimli geçtiğini düşündüğüm sunumla ilgili bazı notlarım:
● İyi developer olmak kolay birşey değildir. (bknz: slayt, sayfa 1) :)
● Oracle mimarisini anlamak zorundayız. Derdimiz Oracle'ı baştan yazmak değil, ancak [efficient kod yazmak ve] bir özelliği kullanırken onun yapacağı etkileri öngörmek için bilmeliyiz.
● Kara kutu anlayışından vazgeçmeli. Veritabanı verilerin tutulduğu yer [ve aslında Oracle bunun öok daha fazlası] onu hep kullancağız. Onu incelemeli, onunla dost olmalı ve ondan uzak durmamalıyız. (Mümkün olan herşeyi veritabanı üzerinde [uygulamada değil] halletmek, hem efficiency hem de reliability için çok çok önemli)
● Oracle'ın veri anlayışında mantıksal kısımda [low level'dan high'e doğru sırayla] Datablock, Extent, Segment, Tablespace ve Database var. Fiziksel olarak da bu aslında OS blocklarından ve Data file'lardan ibaret. (Aslında dosya da bir OS abstraction'ıdır, yani o da fiziksel birşey değil, fiziksel olan manyetik diskteki 0 ve 1 lerden oluşan veridir, ama insanoğlu olarak fazla derine inmemek, gözün görebildiğini temel olarak kabul etmek lazım, ki konumuz OS Data abstraction değil bu arada :) ) (Data file'lardan ve Tablespace'lerden bir sonraki başlıkta OSman'ın sunumu doğrultusunda bahsedeceğim)
● Bir çok segment tipleri var. Bunlardan da yeri geldiğinden bahsedilecek.
● 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ı)
● Data Block'ları Oracle'in veriyi tutan en temel elemanlarıdır ve I/O birimidir. Mantıksal bloklardır. Boyutları OS Bloklarının katı olmalıdır.
● Data blockları Header, Table Dictionary, Row Dictionary, 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.
● 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, hınca hınç doldurulmaz :) 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.
Bu sunumdan da bu kadar. Özellikle "Oracle'a nereden başlayayım?" diyen arkadaşların bu yazı dizisini ve sunumları takip etmesini şiddetle öneririm. Fakat sunumlarda yazılanların yanında çok fazla şey anlatılıyor, bu yüzden bunlarla kalmamak lazım, bir Concepts Guide'a girip okumak, yine ayrıntılı bilgi linklerini gezmek, birde Tom KYTE'ın birbirinden değerli 2 kitabını (Expert One-on-One Oracle ve Expert oracle Database Architecture) edinmek lazım.
Turkcell'deki yoğun bir projeden ve ufak birkaç eksikten dolayı stajyerler olarak henüz aktif çalışmaya başlayamadığımız için şimdilik sadece sunumlardan bu kadar bilgi veriyorum. Diziyi takip etmeye devam edin.
İyi çalışmalar…
|
|
Related Topics |
|
|
|
Links & References |
|
|
|
|
|