Hurriyet

partition etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
partition etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

13 Kasım 2013 Çarşamba

Oracle Veritabanı: Partitioning - Partition Kararı Neye Göre Verilir? - Partitionlama

Oracle Veritabanında partitionlara ayırma konusunda bir sürü aşama var.

Ne Zaman Partition Edilir?

-2 Gb'dan büyük tablolar

-Arşivleme amacı güden tablolar

-Tablo içerikleri farklı depolama araçlarında deponlanması gerektiğinde

Farklı Tablespace'lerde Partition'lamanın Avantajları: 

-Data corruption ihtimali azalır.

-Backup'lama ve Recovery her partition için ayrı yapılabilinir.

Partition Kararı Hangi Amaçla Verilir?

Partition tip'lerine ve üzerinde partition yapılacak sütun'lara karar vermek Partitioning sürecinin önemli bir parçasıdır.  Burada önemli olan yönetimi kolaylaştırmak ve performansı arttırmaktır. Özet olarak:

-Performans için

-Yönetim kolaylığı sağlaması için

-Data silmek için

-Data arşivlenmesini kolaylaştırmak için

-Backup'ın verimliliğini arttırmak için

partition'lama yapılabilinir.

  • Performans:
Performans partition yapılanmalarının ana amacıdır. Birden fazla partition'a ayırarak sürekli "full table scan" sorgularda büyük performans artışları sağlayabiliriz; çünkü artık bütün tabloyu aramasına gerek kalmayacaktır.
  • Yönetim Kolaylığı Sağlaması ve Data Silmek İçin:
Yönetim kolaylığı açısından partitionlar ile tablolar üzerinde yapılan index'ler, o index'lerin tekrar tekrar drop edilip, rebuild edilmesi daha hızlı halledilir. Gerektiğinde daha önceden anlattığımız gibi "select" sorgularımız daha hızlı halledilir.

Ayrıca tablolar partitioned hale getirilerek, partition'ların yönetimi, silinmesi, partition'ların eklenip çıkarılması daha kolay halledilir.


  • Data Arşivlenmesi:
Data arşivlenmesini yukarıda anlattığımız gibi historic data içeren bir tabloyu, partition'lara ayırıp bu partition'ları uygun arşiv tablespacelerine taşınması, gerektiğinde export edilip başka veritaban'larına gönderilmese veya başka depolama yerlerinde tutulması mümkündür.

  • Backup'ın Verimliliğini Arttırmak:
Backup'ın verimliliğini arttırmak, backup alabileceğimiz granülerliğe erişmek demektir. 


Oracle Veritabanı: Partitioning - Partition Tipleri - Index Partition'ları

Partition yapılmış olan tablolar üzerinde 2 tip index yaratılabilinir. İlki "Local", ikincisi "Global"'dır.

Local:
Yaratılacak olan index local tipte yaratılırsa, üzerinde yaratıldığı tablonun tipinde yaratılır. Örnek olarak aşağıdaki partitioned table örneğini incelersek, elimizde range partitioned bir tabloyu incelemiş oluruz.

 create table deneme2 (name varchar2(20),surname varchar2(30),age number)  
 partition by range(age)  
 (  
 partition a values less than (20) tablespace USERS,  
 partition b values less than (40) tablespace TSXXIS  
   
 )  
 ;  

Bu tablonun üzerinde yaratacağımız deneme1 adlı index'imiz range-partitioned index olur. Local yaratılan index, üzerinde yaratıldığı partition'da bulunur.

create index deneme1  
 on deneme2 (age)  
 local; 

Global:
Global index'te, index bütün partition'lara yayılır. Eğer aradığımız bilgi bütün partition'lara yayıldıysa ona göre bütün partition'larda bulunacak bir index yaratmalıyız.

 alter table deneme2  
 add constraint deneme2  
 primary key (age)  
 using index global;  









Oracle Veritabanı: Partitioning - Partition Tipleri - Partition'lar Nasıl Yaratılır?


Oracle Veritabanının partition yaratma, oluşturma özelliği  bize data segment'leri üzerinde bulunan tablo ve index gibi dataları daha kolay yönetme ve performans sağlama imkanı verir. Partition yaratmak için bir sürü opsiyon bulunur. Bunlar sırasıyla range, list, hash, range/list ve range/hash'tir. 

Partition yapıldığında tablo veya index gibi object'leri birden fazla segmente ayırırken yapıyı aynı tutmaktadır. En fazla karşılaşılan partition'lara ayırma tercihi range partitioning'dir.

Range Partitioning Nedir?

Range Partitioning'de tablodaki belirli değerlere göre ayrışma yapılır. Her partition'a göre belirli bir ayrım yapılır. Bu partition belirli bir kolondaki değerlere göre yapılır. Örneğin bir tabloda bulunan veriler gruplanabilirse range partition için güzel bir örnek olur.

Örnek olarak aşağıdaki tabloyu ele alabiliriz.

 create table deneme2 (isim varchar2(20),soyisim varchar2(30),yas number)  
 partition by range(yas)  
 (  
 partition a values less than (20) tablespace USERS,  
 partition b values less than (40) tablespace USERS1  
   
 )  
 ;  
 select * from deneme2;  
   
 drop table deneme2 purge;  

Buradaki syntax'da ayrıca partition'lar tablespace'lere dağıtılmıştır. Tablespace'lere dağıtılmadan da yapılabilinir. Yani aşağıdaki gibi yapılabilinir:

 create table deneme2 (isim varchar2(20),soyisim varchar2(30),yas number)  
 partition by range(yas)  
 (  
 partition a values less than (20) ,  
 partition b values less than (40)   
   
 )  
 ; 

Buradaki örnekte yarattığımız tabloda 3 tane kolon bulunmaktadır. Bunlar isim,soyisim ve yas'tır. Bu kolonlardan seçtiğimiz yas kolonu içindeki değerlere göre ayrım yapmaktayız. Eğer kişinin yaşı 20'den küçükse tablonun partition'ını USERS tablespace'inde yarat, 40'dan küçükse USERS1 tablespace'inde yarat şeklinde ayırmaktayız.

Bu ayrımı yaptıktan sonra DBA_TABLES sorgulanırsa partitioned kolonu "Yes" olarak işaretlenmiştir.


  • Partitioned Olup Olmadığını Nasıl Bulabiliriz?

select * from dba_part_tables whwere table_name like '%tablo_adı%';


Aynı şekilde index'in partitioned olup olmadığını  aşağıdaki gibi bulabiliriz.

select * from dba_part_indexes whwere table_name like '%tablo_adı%';


  • Tabloların Partition'larını Nasıl Görebiliriz?

select * from dba_tab_partitions whwere table_name like '%tablo_adı%';

  •  Özel Olarak İstediğimiz Partition'dan Select Çekmek:
SQL> Select * from deneme2;  
SQL> Select * from deneme2 partition(a);  

  • Partition Eklemek:
SQL> Alter table deneme2 add partition c values less than(60);

  • Partition Çıkarmak:
 SQL> Alter table deneme2 drop partition c;  



List Partitioning Nedir?

List partitioning'de  belirli bir aralığa göre ayırmaktansa, sınırlı seçeneklerimiz bulunan bir sıralama yaparız. Yani  aşağıdaki örneğimize göre ismi "Ali" olanlar a partition'ında, "Veli" olanlar ise b partition'ında yerleştirilirler.

 create table deneme2 (name varchar2(20),surname varchar2(30),age number)  
 partition by list(name)  
 (  
 partition a values ('ALI'),  
 partition b values ('VELI')  
   
 )  
 ;  
 select * from deneme2;  
 drop table deneme2 purge;  

Hash Partitioning Nedir?

Eğer tablomuzdaki değerleri belirli bir kümeye sokamıyorsak ya da belirli aralıklara bölemiyorsak, hash partitioning yapmamız gerekebilir. Örneğin bir tablomuz var ve bu tablo sürekli büyümekte. Bu tablomuzunda sürekli artan bir primary key'i var. Bu tabloda belirli bir ayrım yapamayacağımız için bu artan primary key'e göre partition'lar yaratabilir ve yaratılan partition'ların hepsi eşit sayıda satır tutabilir. Böylece belirli koşullara göre bölemeyeceğimiz bir tabloyu hash partitioning ile belirli miktarlar tutacak şekilde ayırabiliriz.

 create table deneme2 (name varchar2(20),surname varchar2(30),age number)  
 partition by hash(age)  
 partitions 3  
 ;