ORACLE VERĐTABANINDA TABLO ve INDEX SIKIŞTIRMA



Benzer belgeler
PCTFREE - PCTUSED ORACLE DEĞERLERĐ

ORACLE INDEX SIKIŞTIRMA TEKNĐKLERĐ

Exadata Üzerinde Veri Sıkıştırma Yöntemleri

DĐNAMĐK ve STATĐK SQL KULLANMANIN PERFORMANSA ETKĐSĐ

Bellek Yönetimiyle İlgili Notlar ORACLE BELLEK YÖNETĐMĐYLE ĐLGĐLĐ NOTLAR

VERİ TABANI YÖNETİM SİSTEMLERİ I

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

UTL_FILE PERFORMANSI

VIEW LERDE SQL HINT KULLANIMI

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

HP Yazılım Zirvesi - İstanbul 20 May Wyndham Grand Levent Erdem Alaşehir / Finansbank Güvenlik Olay Korelasyonunda Büyük Veri Kullanımı

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir. Çok satır dönerse hata verir.

Unutulmuş Özellikler: Oracle Veritabanına Yaptığınız Yatırımı Sonuna Kadar Kullanın

Advanced Oracle SQL Tuning

SQL TRIGGERS (Tetikleyiciler)

TRIGGER. Trigger lar, tablo üzerinde tanımlanabilen ve bu tablo üzerinde bir işlem gerçekleştiğinde tetiklenen programlama ögeleridir.

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

8 Oracle da tablo yapısı içinde otomatik artan kolon yoktur. (identity kolon

Veritabanı Tasarımı. Veritabanı Hareketleri

Oracle da kullanılan veri tipleri:

PostgreSQL ve PL/pgSQL

SQL Komutları (2) Uzm. Murat YAZICI

ORACLE DATAFILE RECOVER (KURTARMA) TESTLERĐ

ACCESS PLATFORMUNDA SQL

BÖLÜM- 8: DİĞER ŞEMA NESNELERİNİ OLUŞTURMA

İLERİ VERİTABANI SİSTEMLERİ SUAT ÜSTKAN

VERİ TABANI YÖNETİM SİSTEMLERİ I

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

YAPISAL SORGULAMA DİLİ (SQL)

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

Veritabanı sistemlerinde veri bütünlüğünü sağlayabilmek için CONSTRAINTS olarak adlandırılan bazı zorlayıcı ifadeler kullanılabilir.

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

PostgreSQL ve PL/pgSQL

MOBİL UYGULAMA GELİŞTİRME

Veri Tabanı Programlamaya Giriş

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir, aksi durumda hata olur.

ASM (Automatic Storage Manager) 11 Mayıs 2009

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

Veritabanı Tasarımı. Seriler ile Çalışma

5 SQL- Yapısal Sorgulama Dili. Veritabanı 1

Yukarıdakilerden hangileri DML (Data Manipulation Language) ile gerçekleştirilir?

STORED PROCEDURE LER (Saklı Yordamlar)

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

LOG SHIPPING Yusuf KAHVECİ Senior Database

Çok tablolu sorgulamalar

Veritabanı Tasarımı. İndeksler ve Eşanlamlar

SORGULAR. Öğr.Gör.Volkan Altıntaş

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

Bölüm 4: DDL Veri Tanımlama Dili

KULLANICI TANIMLI FONKSİYONLAR (Devam)

Aşağıdaki tabloyu inceleyin. Yeni kayıt girme, var olan bir kaydı silme veya güncelleme işlemlerini bu tabloya göre yapacağız.

İNTERNET PROGRAMCILIĞI HAFTA. MYSQL ile VERİTABANI İŞLEMLERİ - 1. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Veritabanı Oluşturma, Silme

VERİ TABANI YÖNETİM SİSTEMLERİ II. 5. SQL PROGRAMLAMADA CURSOR (İMLEÇ) ve TRIGGERS (TETİKLEMELER)

20461C Querying Microsoft SQL Server Modül Seviye Belirleme Testi

YAPISAL SORGULAMA DİLİ. BARIŞ ARIBURNU barisariburnu.com

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

FABREKA YAZILIM ELEKTRONİK DANIŞMANLIK TİC. LTD. ŞTİ.

BACKUP BİLGİLERİ YUSUF.KAHVECİ. Yusuf KAHVECİ

Veritabanı Tasarımı. Tablo Değiştirme

Emrah UYSAL 1 TABLESPACE ENCRYPTION ORACLE 11G

BÖLÜM -6: VERİLERİ DEĞİŞTİRMEK

VERİTABANI ve YÖNETİMİ

SQL PROGRAMLAMA. Bir batch, bir arada bulunan bir dizi SQL deyimidir. Batch ayıracı GO deyimidir.

SQL (Structured Query Language) kendisi bir programlama dili olmamasına rağmen bir çok kişi tarafından programlama dili olarak bilinir.

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

-- işareti tek satırlık açıklamalarda kullanılır. Açıklama olarak yazılan satırın önüne konulması yeterlidir.

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

Basit SQL Sorguları Veritabanından verilerin SELECT cümleleri ile alınması işlemine sorgulama denir.

Tavsiye Edilen Önhazırlık Veritabanı kavramını öğrenmek

Veritabanı Tasarımı. Tablo Oluşturma

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

BÖLÜM- 9: KULLANICI ERİŞİMLERİNİ YÖNETMEK

Tavsiye Edilen Önhazırlık Veritabanı kavramınıöğrenmek. Hedefler Shrink yapılmasının amacının kavranması. Shrink yapılma yöntemlerinin öğrenilmesi.


EXISTS VE NOT EXISTS fonksiyonları

VERİTABANI Veritabanı Yönetimi

Mysql Veritabanı Komutları

VERİ TABANI YÖNETİM SİSTEMLERİ-II

Veri Tabanı Yönetim Sistemleri Bölüm - 4

Veritabanı Yönetim Sistemleri I HAFTA 1

ORACLE 11G DIRECT NFS

VERİTABANI. SQL (Structured Query Language)

SUNGURLU MESLEK YÜKSEKOKULU 5. T-SQL-2

2. hafta Bulut Bilişime Giriş

-Birden çok tablo ile çalışırken gereksiz karmaşadan(özellikle her seferinde uzun bir SQL sorgu cümlesi yazmakla uğraşmaktan) kurtulmak.

Kets DocPlace LOGO Entegrasyonu

TEMEL SQL SORGU ÖRNEKLERİ. Yukarıdaki sorguyu yazıp çalıştırdığımızda db_market adında bir veritabanı oluşturulur.

SQL SERVER VERİTABANINI EKLEME-ÇIKARMA ve YEDEKLEME-GERİ YÜKLEME

Veritabanı Tasarımı. DML İşlemleri ve Görünümler

Fonksiyonlar istenilen deger tipinde dönüs yapabilir. INT, VARCHAR deger döndürebileceğiniz gibi bir tablo da döndürebilirsiniz.

Bunyamin Demir, <bunyamindemir at gmail dot com>, webguvenligi.org, 20/01/2011 ORACLE VERĠTABANI TRAFĠĞĠNĠN GÜVENLĠĞĠ

Veritabanlarına ve SQL'e Giriş. Devrim GÜNDÜZ. Teknoloji Destek Merkezi --

ORACLE PARAMETRE DOSYALARI ( PFILE & SPFILE )

Üst Düzey Programlama

Anahtar. kelimeler: Sayfa 1 / 5

SORGULAR VE ÇEŞİTLERİ II

EBE-368 Veri Tabanı Yönetim Sistemleri İlişkisel Model (The Relational Model)

Transkript:

ORACLE VERĐTABANINDA TABLO ve INDEX SIKIŞTIRMA 1

İçerik 1.Giriş... 3 2. Sıkıştırma Mantığı... 3 3. Sıkıştırma İşlemini Kullanabileceğimiz Durumlar... 3 4. Sıkıştırılacak Tablolara Karar Vermek... 4 5. Performans... 5 7. Sıkıştırılmış ve Normal Tablo Farkının Uygulamalı Gösterilmesi... 7 2

1.Giriş Oracle veritabanında tablo ve index sıkıştırma özelliği sayesinde, disk alanından önemli ölçüde tasarruf etmek mümkündür. Oracle a ait teknik dökümanlarda 12 de 1 e kadar ufalan tablolardan bahsedilmektedir 1. Özellikle büyük bilgi ambarlarında 12 GB lık bir tabloyu 1 GB olarak saklayabilmek büyük fayda getirecektir. Ayrıca sıkıştırma işleminin faydası bununla da sınırlı kalmaz; sorgulara ait cost ların da önemli ölçüde düşmesini sağlayabilir. 2. Sıkıştırma Mantığı Tekrar eden datanın defalarca yazması yerine, data yı bir kere yazıp, diğer satırların bu data yı işaret etmesi sağlanırsa, disk alanından önemli ölçüde kazanım sağlayabilirsiniz. Oracle ın sıkıştırma mantığı da bu şekildedir. Sıkıştırma block bazında gerçekleşir. Bunun anlamı, uncompressed data nın açılabilmesi için gereken bütün bilginin yine aynı block ta tutulmasıdır. Aynı block içindeki aynı veriye sahip satır ve sütunlar, symbol table olarak adlandırılan datablock un başına kaydedilir. Tekrar eden datanın geçtiği her satır, symbol table daki alanı refere eder. Başındaki symbol table dışında, sıkıştırılmış bir block, normal bir datablock tan pek farklı değildir. Veritabanında normalde yaptığınız her işlemi, bir fark sezmeden gerçekleştirebilirsiniz. Sıkıştırma ve sıkıştırılan veriyi açma, Oracle ın sunucu tarafında lokal de gerçekleşen bir işlemdir. 3. Sıkıştırma İşlemini Kullanabileceğimiz Durumlar Bir tabloya, index e sıkıştırma uygulayabilirsiniz. Ya da tablespace seviyesinde sıkıştırma istediğinizi de belirtebilirsiniz. Böylece ilgili tablespace de yaratacağınız tablo ve index ler varsayılan olarak sıkıştırılmış şekilde ortaya çıkacaktır. Bir tabloyu sıkıştırılmış olarak yarattıktan sonra, ona girilecek yeni değerler, sıkıştırılmış olmaz. Örneğin daha sonra gerçekleştirilen insert ifadeleri sıkıştırılmaz, normal bir şekilde kaydedilir. Eğer bir bulk işlem söz konusu ise ve mutlaka compressed olmasını istiyorsanız, APPEND HINT kullanabilirsiniz. Ama kullanmadığınız sürece, compress bir tabloya girilen insert ifadesinin normal bir tabloya girilen bir insert ifadesinden hiçbir farkı yok. Bu nedenle yavaşlama olmayacaktır. Compress özelliğini belirterek CTAS (CREATE TABLE... AS) şeklinde tablolar yaratırsanız, oluşturulacak tablo sıkıştırılmış şekilde yaratılacaktır. Daha önceden sıkıştırılmış bir tabloya 1 Table Compression in Oracle9i Relase2 3

veri girilecekse, parallel insert (veya APPEND Hint i ile insert) gerçekleştirildiğinde ve Direct Path SQL*Loader sayesinde veriyi sıkıştırılmış olarak aktarmanız mümkündür. 4. Sıkıştırılacak Tablolara Karar Vermek Sıkıştırma özelliği ne kadar kulağa hoş gelse de; yanlış tablolarda kullanmak, hem fazla disk kullanımı hem de lüzumsuz yere CPU tüketimine yol açacaktır. Sıkıştırma için en ideal tablolar, log işlemleri için kullanılan, ağırlıklı olarak insert gören, update ve delete ile pek işi olmayan karaktere sahiptir. Yazılım geliştirenler için hangi tablonun çok faal, hangisinin log amaçlı olduğunu bilmek kolay olsa da, bunu bilemeyebilirsiniz. Hangi tablonun sık update, hangisinin sık delete ya da hangisinin sık insert gördüğünü, dba_tab_modifications tablosundan çıkartmak mümkündür. Örneğin belirli bir schema altında Delete ve Update işleminin hiç yapılmadığı, insert konusunda kayda değer ilk beş tabloyu saptamak için aşağıdaki sorguyu kullanabilirsiniz: SQL> SELECT * FROM SYS.DBA_TAB_MODIFICATIONS WHERE UPDATES=0 AND DELETES=0 AND TABLE_OWNER='SCHEMA_ADI' AND ROWNUM <= 5 ORDER BY INSERTS DESC; Ya da tablo üzerindeki update ve delete lerin toplam insert işleminin %20 sini geçmediği ilk 5 tabloyu saptamak için şöyle bir ifade kullanılabilir: SQL> SELECT * FROM SYS.DBA_TAB_MODIFICATIONS WHERE INSERTS >= ( UPDATES + DELETES ) * 5 AND UPDATES!=0 AND DELETES!=0 AND TABLE_OWNER='SCHEMA_ADI' AND ROWNUM <= 5 ORDER BY INSERTS DESC; Bir tablonun %10 luk bir kısmı değiştiği takdirde, DBA_TAB_MODIFICATIONS tablosundaki TIMESTAMP sütunundaki değer değişecektir. DBA_TAB_MODIFICATIONS ta tablonuzun bulunabilmesi için, MONITORING seçeneğinin açık olması gerekir. 10G ile birlikte bu varsayılan (default) ayar hâlini almıştır. Daha eski bir sürüm kullanıyorsanız ve bazı tablolarınızda monitoring in kapalı olduğundan şüpheniz varsa, aşağıdaki sorguyla kontrol edebilirsiniz: SQL> SELECT * FROM DBA_TABLES WHERE OWNER='SCHEMA_ADI' AND MONITORING = 'NO'; Şayet tabloda monitoring kapalı hâldeyse, aşağıdaki gibi açabilirsiniz: 4

SQL> ALTER TABLE TABLO_ADI MONITORING; Ekstra bir not; temporary table larda monitoring kapalı gelir ve açamazsınız. Aksi de, pek mantıklı olmazdı. 5. Performans Oracle tarafından yayınlanan Table Compression in Oracle9i Relase2 dökümanına göre, Normal INSERT ifadelerinde, ölçülebilir bir fark ortaya çıkmamaktadır. Bunun nedeni, işlemin uncompressed şekilde gerçekleşmesidir. APPEND HINT vb. şekilde girilen ifadelerinse %50 ye varan oranda daha iyi olduğu durumlar çıkabilir. (Buna 7.bölümde tekrar değineceğiz.) DELETE işlemleri, sıkıştırılmış tablolarda %10 daha fazladır. Çünkü sıkıştırılmış hâlde tutulan veri, daha az yer kaplar; böyle log lanacak daha az bilgi olur. Sıkıştırılmış tablolardaki UPDATE işlemlerinde, %10-20 arası bir performans kaybı yaşanır. Bunun nedeni, normal tablolarda kullanılan bazı kompleks update yöntemlerinin, compress tablolara henüz uyarlanmamasıdır. (Bu inceleme 9iR2 için yapılmıştı; 10G için bir dökümanda rastlamadım, 10g de update performansı çok daha iyi olabilir.) Yine Oracle tarafından yayımlanan bir başka dökümanda ( Data Compression in Oracle ), benzer sonuçlara yer verilmiş. Sıkıştırılmış tablolarda, update ve delete konusunda bir iki noktanın daha altını çizmek gerekiyor. Bir data block unun içindeki satırı güncellemeye kalktığınızda, Oracle, ilgili block un başındaki symbol table i girilen kayıta göre güncellemek zorundadır. Örneğin daha önce 4 adet mavi, 3 adet sarı kalemin olduğu bir kutudan 1 maviyi çıkartıp, yerine 2 adet yeşil kalem koydunuz. Oracle ın burada yaptığı, bu kutunun içinde eskiden 4 mavi, 3 sarı varken; şimdi 3 mavi, 3 sarı ve 2 adet yeşil kalem olduğu bilgisini girmek gibi düşünülebilir. Delete işleminin daha hızlı olduğunu yukarıda yazmıştık. Ancak delete işleminin bir sıkıntısı bulunuyor. Đyi sıkıştırılmış bir tabloda, bir satırı delete edip, yeni bir insert yaparsanız, büyük bir ihtimalle aynı data block u kullanmayacaktır. Çünkü satır diye sildiğimiz şey, gerçekten de bir satır değildi; symbol table da bir değeri refere eden pointer gibi çok daha ufak boyuta sahip bir alandı. Dolayısıyla siz bu ufak alanı silip, yeni bir satır girmeye kalktığınızda, bu ufak alan yetersiz kalacak ve ister istemez tablonun işgal ettiği block sayısı artacaktır. Bir noktadan sonra, tablonun normalde kaplayacağı alandan çok daha büyük bir alanın işgali bile söz konusu olabilir. Bu nedenle, sık delete ve update işleminin yapıldığı tablolarda sıkıştırmak çok uygun bir seçenek değildir. 5

6. Var Olan Bir Tabloyu Sıkıştırmak Loglama işlemi için kullanılan, hiç update ve delete görmeyen, tam sıkıştırmaya uygun bir tablo bulduğumuzu varsayalım. Bu durumda, tablonun sıkıştırarak yedeğini alarak işe başlayabiliriz: /* HER IHTIMALE KARSI GECICI TABLO YARATILIR */ CREATE TABLE D_CCEBI.TABLO_YEDEGI_241108 TABLESPACE BACKUP_TABLESPACE COMPRESS NOLOGGING AS SELECT * FROM SCHEMA.TABLO; Dikkat ettiyseniz, tablonun yedeğini alırken, tablespace i BACKUP_TABLESPACE olarak belirttim. Normalde kullandığınız tablespace yerine, Backup işlemleri için bir tablespace yaratıp, yedeklerinizi bunun altınıza almanız daha faydalı olur. Çalışma ortamınızı genişletmemiş olursunuz. Đkinci dikkat edilecek konu ise, NOLOGGING mode belirtmemdi. Eğer nologging mode belirtirseniz, tablo kopyası daha kısa sürede oluşacaktır. Fakat... Bir çökme durumunda bu tablonun içindeki verileri, standby da ya da arşiv dosyalarında bulamazsınız. Bu riski göze alarak işleme devam edersek, orjinal tabloyu aşağıdaki gibi sıkıştırabiliriz: /* TABLO SIKISTIRILIR */ SQL> ALTER TABLE SCHEMA.TABLO MOVE COMPRESS; Bu işlemi de nologging ile yapmamız mümkündür: /* TABLO NOLOGGING MODE'DA SIKISTIRILIR */ SQL> ALTER TABLE SCHEMA.TABLO MOVE COMPRESS NOLOGGING; Đşleme başlamadan önce yedek alırken, NOLOGGING mode kullanmak uygundur. Fakat gerçek bir ortamda sıkıştırma yapacağınız tabloda NOLOGGING mode kullanmak pek akılcıl bir yöntem olmayabilir. Tabloyu sıkıştırarak ne kadar yer kazandığınızı görmek için aşağıdaki sorguyu işlem başında ve sonunda çalıştırabilirsiniz: SQL> SELECT SEGMENT_NAME, TABLESPACE_NAME, ROUND(BYTES / 1024 / 1024, 2) SIZE_MB FROM DBA_SEGMENTS WHERE OWNER='SCHEMA' AND SEGMENT_NAME = 'TABLO' AND SEGMENT_TYPE = 'TABLE' ORDER BY 3 DESC; 6

Tablo üzerinde index varsa, tablonun sıkıştırılması index leri kullanılamaz hâle getirebilir. Đşlem öncesi hangi index lerin etkileneceğine bakmak yararlı olacaktır. SQL> SELECT * FROM DBA_INDEXES WHERE OWNER='SCHEMA' AND TABLE_NAME='TABLO'; Đşlem sonrası kullanılamaz index leri aşağıdaki sorguyla kontrol edebilirsiniz: SQL> SELECT * FROM DBA_INDEXES WHERE STATUS='UNUSABLE'; Kullanılmaz index ler söz konusu ise aşağıdaki gibi rebuild etmeniz mümkündür: SQL> ALTER INDEX SCHEMA.INDEX_ADI REBUILD COMPRESS NOPARALLEL TABLESPACE DENEME_TABLESPACE STORAGE ( INITIAL 4M ); Index i rebuild ederken sıkıştırmanız şart değil; sadece bir opsiyon. Index i rebuild etmeniz de şart değil; o da bir başka seçenek. Dilerseniz drop eder ve tekrar yaratabilirsiniz. Compress sonrası tabloyla ilgili (mesela %20 örneklemeyle) istatistik toplamanız yararlı olacaktır: SQL> ANALYZE TABLE SCHEMA.TABLO ESTIMATE STATISTICS SAMPLE 20 PERCENT; Bütün bu işlemler sonucunda kullandığınız sorguların execution plan değişebilir. Sorguları işlem sonunda kontrol etmek bu yüzden önemli olacaktır. Sıkıştırılmış tablonun içeriğinin tamamen sıkıştırılmış olması gerekmez. Tablo içindeki verinin bir kısmı sıkıştırılmış, bir kısmı normal bir biçimde tutulabilir. Eğer normal yöntemlerle insert ifadeleri çalıştırılıyorsa; sıkıştırılmış tabloyu tekrar sıkıştırabilirsiniz. Aynı adımları takip etmeniz gerekmektedir. 7. Sıkıştırılmış ve Normal Tablo Farkının Uygulamalı Gösterilmesi Şimdi kapsamlı bir örnek yapalım. Önce normal bir tablo oluşturup, bunun boyutunu alalım: SQL> CREATE TABLE D_CCEBI.DENEME NOCOMPRESS AS SELECT * FROM DBA_OBJECTS; Table created. 7

NOCOMPRESS şeklinde belirtmemiz gerekmiyordu. Tablo yaratılırken, varsayılan değer tablonun sıkıştırılmamasıdır. Ancak yaptığımız iş daha açık gözüksün diye böyle yazmayı tercih ettim. Sıkıştırmadan yarattığımız tablonun boyutu, 6 MB oldu. Şimdi aynı tabloyu sıkıştırarak yaratalım: SQL> CREATE TABLE D_CCEBI.DENEME COMPRESS AS SELECT * FROM DBA_OBJECTS; Table created. Đfade hemen hemen aynı olmasına rağmen, tablonun boyutu 2 MB a (ilk tablonun %33 üne) indi. Şimdi örneğimizi biraz daha geliştirelim. Bu sefer compress olarak bir tablo yaratalım ve sonradan insert ifadeleri çalıştıralım. Đlk yöntemde insert ifadeleri bildiğimiz sıradan şekilde olsun, ikincisinde APPEND HINT ten yararlanalım. /* BOS SEKILDE TABLOYU COMPRESS OLARAK OLUSTURUYORUZ */ SQL> CREATE TABLE D_CCEBI.DENEME COMPRESS AS SELECT * FROM DBA_OBJECTS WHERE 1 = 2; Önce tabloya normal bir şekilde insert işlemi gerçekleştiriyoruz: SET TIMING ON BEGIN FOR i IN 1..50 LOOP INSERT INTO D_CCEBI.DENEME SELECT * FROM DBA_OBJECTS; COMMIT; END LOOP; END; PL/SQL procedure successfully completed. Elapsed: 00:00:54.46 Şimdi de tabloya APPEND hint ile değer girelim: SET TIMING ON BEGIN FOR i IN 1..50 LOOP INSERT /*+ APPEND */ INTO D_CCEBI.DENEME SELECT * FROM DBA_OBJECTS; COMMIT; END LOOP; END; PL/SQL procedure successfully completed. Elapsed: 00:00:47.12 8

Đşlem 47 saniye içinde tamamlandı ve tablo 96 MB yer işgal etti. Normal insert e göre zaman daha kısa sürdü. Boyut olarak ise 160MB kârdayız. Boyut konusunda olumlu bir iyileşme bekliyorduk ancak insert işlemini daha kısa sürede tamamlamasını incelenmemiz yerinde olacak. APPEND HINT ile yapılan INSERT ler sıkıştırma işlemine tabiidir. Veri önce sıkıştırılır, ardından diske yazılırlar. Bu da elbette bir maliyettir. 2 Ancak diske yazmak vb. I/O işlemleri daha büyük maliyetler getirmektedir. Örneğin normal bir insert işlemi, 100 birim boyutunda olsun ve her birimi diske yazmak 1 iş gücü gerektirsin; bu durumda insert ifadesi 100 birim maliyete sahiptir. Fakat sıkıştırma işlemi 100 birimi, 10 birime düşürüyorsa, bunun diske yazım maliyeti 10 birimdir. Sıkıştırma için de 20 birim maliyet belirlesek, bütün işlem 100 birim yerine sadece 30 birimde tamamlanır. Bu düşünsel benzetmeyi bir kenara bırakıp, gerçeklere dönersek; diske erişim maliyetli bir iş ve yazılacak veriyi küçültmek maliyeti (çalışma süresini, tüketilen kaynakları) azaltacaktır. Özellikle toplu işlerde bunun daha fazla yararı görülebilir. 2 Table Compression in Oracle9i Relase2 9