Blog ' da Ara

Loading

5 Ağustos 2011

ORACLE DEPOLAMA BIRIMLERI YÖNETIMI

                                
                Oracle depolama birimleri dendiğinde akla tablespaceler gelir. Biz de bu yazımızda tabloların nerede depolandığını, oracle veritabanında tablespace ve data file ne amaçla kullnıldığını ve Oracle yen depolama teknolojosi olarak sunulan ASM (Automatic Storage Management) konularını açıklamaya çalışacağız.
                Depolama Birimleri( Storage Structures): Aşağıda verilmiş olan şekil1 oracle depolama birimlerini sembolize etmektedir.
  Şekil1 : Oracle Depolama Birimleri
                                             
                Oracle Veritabanı mantıksal olarak tablespace depolama birimlerinden oluşur.Tablespacelerin ise en küçük yapı birimleri Oracle data blocklar dır diyebiliriz. Bu blokların boyutu 2 KB ile 32 KB arasında dır. Bu boyutu DB_BLOCK_SIZE parametresini set ederek ayarlayabilriz. OLTP sistemler için 8KB data warehouse sitemler için 16KB dir genellikle.
                Öylseyse bir tablo nasıl depolanır?
Bir tablo oluşturulduğunda , bu tabloya ait verilerin tutulması için bir segment oluşturulur.Tablospace ise segmentlerden oluşur.Mantıksal olarak bakıldığında bir tablo, sütunların satır bilgilerinden oluşur diyebiliriz.Her bir satır bilgisi datablock larda row piece denilen kısımda tutulur.Her bir row piece bir satır hücresine ait bilgiyi tutar(Tüm satırdaki bilgiyi değil).
  Şekil 2 : Tablo Nasıl depolanır.
                                                
Oracle veritabanında tüm bilgiler block larda tutulur.Blockların içeriğinden bahsetmek gerekirse;
                Block Header : Block Header segment tipini tutar (tablo mu, index mi.etc..).Bununla birlikte datanın adresi, tablonun  dizini, herbiri 24 Byte olan Transaction slotları block header de tutulur.
                Row Data : Blocklarda ki rowlar içinde tutulan gerçek datadır.
                Free Space :Block içindeki boş alandır.
Şekil 3   : DB Block  İçeriği

                Oracle database mantıksal olarak verileri Tablespace de fiziksel oalrakda data file lerde depolar demiştik.Bir tablespace yanlızca bir veritabanına ait olabilir.Bir data file ise sadece bir tablespace ve bir veritabanına ait olabilir.Tablespace birden çok datafile içerir.Tablespace ile Datafile arasındaki ilişkiye aslında bir tablespace oluşturma scriptine bakarak anlayabiliriz.Aşağıdaki script system tablespace ine aittir.Script te görüldüğü gibi data file aslında tablespace ait fiziksel katmanla aradaki bir köprü gibidir.
CREATE TABLESPACE SYSTEM DATAFILE
  '/oradata/vmora/vm/system01.dbf' SIZE 2014M AUTOEXTEND OFF
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
FLASHBACK ON;
                Tablespace lerde boş alan yönetimi iki şekilde olur, Local ve Dictionary.
                Local yönetilen tablespacelerde free extentler tablespace tarafından yönetilir. Bir bitmap tarafından free extentlerin bilgisi tutulur.Het bir bit veri, bir yada bir kaç block ile mutlaka uygundur.Oracle tarafından da zaten local managed tablespace kullanılması tavsiye edilir.
                Dictionary yönetilen Tablespacelerde extent yönetimi data dictionary tarafından yapılır.Bir extent genişlediğin de  yada değiştiğinde gerekli biligi oracle server tarafından data dictionary ' ye yazılır.Ancak bu yönetim şekli oracle tarafından tavsiye edilmeyen eski bir space yönetim biçimidir.
                Dictionary yönetilen bir tablespace yi local yapmak için DBMS_SPACE_ADMIN paketi kullanılabilir.
                DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL
Local Management Tablespace de Depolama;
Exten konumlandırması iki şekilde olabilir.
Automatic: Bu opsiyonda extentler sistem tarafından otomatik belirlenir.
Uniform : Bu opsiyonda ise extentlere bir size verilir. Meseşla TEMP tablespace için Uniformdur ve default                extent boyutu 1MB dir Ancak UNDO tablespace için uniform extent belirleyemezsiniz.

Segment Alanı Yönetimi de otomatik yada kullanıcının bazı parametreleri belirlediği manuel şeklinde yapılabilir.
                Automatic;Oracle Database segment içindeki alanın yönetimi için bitmap leri kullnır.Bitmap lerde her bir blok içindeki boşluğu hesaplayarak yeni bir kayıt için yeterli alan olup olmadığını tarif eder.
                Manuel ; Manuel segment yönetiminde PCTUSED,FREELIST gibi depolama parametreleri kullanıcı tarafından belirlenir. Bu parametrelerin belirlediği değerler şu şekilde özetlenebilir;
                PCTFREE : Updateler için ayrılan blok bölümüdür. 1-100 arasında girilen parametre değeri % cinsinden kabul edilir.Ynai PCTFREE 5 dendiğinde %5 lik blok bölümü updateler için ayrılmış demektir.Bu değer çok küçük olduğunda bir blok tam bir row insert alamayabilir ve dolayısıyla bloklar arası data taşınaması artacağı için block chaining oluşur ve buda bir performans problemidir.
                PCTUSED:İnsert ler için kullanılan block alanıdır.
                Bu noktada PCTFREE ve PCTUSED değerleri ne olmalıdır şeklinde bir soru akla gelebilir:Kullnadığınız sisteme ve sistemin gereksin,mlerine göre belirlemeniz daha doğru olacaktır.Eğer bir DataWarehouse sisteminde çalışıyorsanız updateler çok az olacağından PCTFREE 5 veya daha az verebilirsiniz.PCTUSED ise herzaman 100-PCTFREE değerinden daha küçük olmalıdır. Yani PCTUSED değerinide 90 verebilir ve  böylece effektive bir tablespace tasarımı yapmış olusunuz.OLTP sistemlerde ise 15 PCTFREE 80 PCTUSED için verilebilir.Böylece bu tablespace blokların doluluk oranının maximum %80 olduğunuda belirlemiş olursunuz.
                Compression (Sıkıştırma): Sıkıştırma seçeneği diskte yer kaplanmasını azaltacağı gibi memoryde  deyar kazanılmasını ve ayrıca okuma hızınında artmasını sağlar. Ancak DML işlemlerini ve data yüklemelerini yavşlatır ve cpu için maliyetlidir.
                Logging; Loglama eğer inactive edilirse blocklara direck insert lerde yada SQL*Loader ile yapılan insertlerde redolglara yazılmayacaktır.Dolyaısıyla data kaybı olasıdır ve kaybolan yada silinen veriler kurtarılamaz.Eğer tablespace nologging ise oluşturduğunuz bir objeni backupını almalısınız.
                Bir Oracle Database oluşturduğunuzda aşağıdaki Tablespaceler default olarak oluşturulur.Şimdi bu default tablespaceleri inceleyelim;
                SYSTEM:System tablespace oracle server tarafından database in yönetimi için kullanılır.Sys userına ait tüm objeler , datadictionary gibi bilgiler burada tutulur.Bu tablespace ye sadece SYS user yada admin hakkı olan kullnıcılar erişebilir.
                SYSAUX:System tablepspace için yedek tablepscedir.
                TEMP:Geçici oalrak segmentlerin oluşturulduğu tablespacedir.Mesela Bir sql query çalıştırıldığında okunan datalar default olarak burada tutulur ve sonrasında eğer işlem görmezse tekrar silinir.
                UNDOTBS;Undo bilgilerinin tutulduğu veritabanıdır.Eğer Automatic Undo Management seçilirse oracle herbir instance için bir adet undo tablepsace oluşutacaktır.Örneğin bir insert yada update yaptınız ve henuz commit yada rollback yapmadıysanız bilgileriniz redolog dosyalarına yada diske henuz yazılmamıştır.İşte bu bilgiler undo tablespacede tutulur.
                USER:Kullnıcı bilgilerinin tutulduğu tablespacedir.SYS ve SYSTEM kullnıcılarının bilgileri SYSTEM tablespacede tutulur.
                EXAMPLE: Örnek yada DEfault şemaların tutulduğu tablespacedir.
                Tablespaceler hakkında bilgi almak için
                V$TABLESPACE ,
                DBA_TABLESPACES,
                DBA_HIST_TABLESPACE_STAT,
                DBA_TABLESPACE_USAGE_METRICS viewlarınada bakabilirsiniz.

                Bir tablespace sadece okuma olarak set edilebileceği gibi hem okuma hem yazmada set edilebilir.İsmi değiştirilebilir ve statusu (online/ofline) değiştirilebilir.Bir tablespace ' e sonradan data file eklenebilir.Datafileler hakkında bilgi almak için DBA_DATA_FILES veya V$DATAFILE tablolarına bakabilirsiniz.
Oracle Dosyaları create ederken aşağıdaki parametreleri kullanarak OS üzerinde ki directory belirler.Bu parametreler;
DB_CREATE_FILE_DEST :File oluşturuldu defult oalrak kullanılacak directorydir.
DB_CREATE_ONLINE_LOG_DEST_n : Redolog ve contorl dosyaları oluşturulduğunda default olarak kullanılacak directory.
DB_RECOVERY_FILE_DEST : Flash recovery area için default direcory dir.
                Bu parametrelerin değerlerini öğrenmek için show parameter parameter_name Şeklinde bir sorgu çalıştırmanız yeterlidir.Bu parametrelerin değerlerini değiştirmek için ise aşağıdaki scriptleri kullanabilirsiniz.
                ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata';
            AUTOMATIC STORAGE MANAGEMENT (ASM)
                Asm mimarisini aşağıdaki şekildede görebilirsiniz.
Şekil 4 :ASM concept
                ASM oracle tarafından yine oracle veritabanı için üretilmiş bir dosya tip yada storage çözümüdür.Oracle 10 g versiyonu ile birlikte gelmiştir. ASM sayesinde disk yönetimini sqlplus yada queryler ile yapabiliriz.
Avantajlarına aşağıdaki gibi sayabiliriz.
Disk ekleme , Çıkarma.
I/O Paylaşımı: I/O yükünü mevcut disklere taksim ve böylece performans kazanımı sağlanmış olur.
Direct I/O kullanımı yapılmasına izin verir.
                Bu yazıda sadece ASM nedir tanımlamış olduk.Yönetim ve diğer detaylarını daha sonraki yazılarımızda inceliyor olacağız.

1 yorum:

"Sorularınız ve Eleştirileriniz Değerlidir"