Mysql Table Partition (RANGE Partition Ürnekleri)

Mysql Table Partition 2,

şimdi örneklerle table partitionu anlamaya başlayalım.

RANGE Partition: Aşağıdaki örnekte personel isimli tablomuz
id,adi,soyadi,isBasiTarih,isSonuTarih,isKodu kolonlarına sahiptir.
Bu tablomuzda yapmak istediğimiz isKoduna göre
5 den küÇük isKodlarına sahip olan satırlar p0 parÇasına,
5 ile 10 arası isKodlarına sahip olan satırlar p1 parÇasına,
10 ie 15 arası isKodlarına sahip olan satırlar p2 parÇasına,
15 ile 20 arası isKodlarına sahip olan satırlar p3 parÇasına atılmasıdır.

CREATE TABLE personel (
id INT NOT NULL,
adi VARCHAR(30),
soyadi VARCHAR(30),
isBasiTarih DATE NOT NULL DEFAULT ‘1970-01-01’,
isSonuTarih DATE NOT NULL DEFAULT ‘9999-12-31’,
isKodu INT NOT NULL
)
PARTITION BY RANGE (isKodu) (
PARTITION p0 VALUES LESS THAN (5),
PARTITION p1 VALUES LESS THAN (10),
PARTITION p2 VALUES LESS THAN (15),
PARTITION p3 VALUES LESS THAN (20)
);

Bu tabloyu yarattıkdan sonra /var/lib/mysql/(db ismi) altına baktığımızda,

personel#P#p0.MYD
personel#P#p0.MYI
personel#P#p1.MYD
personel#P#p1.MYI
personel#P#p2.MYD
personel#P#p2.MYI
personel#P#p3.MYD
personel#P#p3.MYI

8 farklı fiziksel dosya görürüz. .MYD ler asıl dataların tutulduğu dosyalar,
.MYI dosyaları ise indexlerin tutulduğu dosyalar olarak karşımıza Çıkar.
Son kısımda PARTITION p3 VALUES LESS THAN (20) yerine,
PARTITION p3 VALUES LESS THAN MAXVALUE demiş olsaydık
isKodu 20 den büyük olanlar p3 parÇasında toplanmaya başlanacaktı.
şimdi tabloya insertler yapıldıkÇa Mysql otomatik olarak işKodu kolonundaki
değere göre gelen datayı otomatik olarak gitmesi gereken partitiona gönderir.
Range Partition da select yaparken where condititon kullanmakta fayda vardır.

Select * from personel where isKodu>=10 and isKodu<=15;

şeklinde bir sql Çalıştırdığımızda Mysql 4 partition iÇinden arama yapmayacak,
verdiğimiz koşul hangi partition iÇindeyse (p2) gidip o partitionda arama
yapıp sonucu oldukÇa hızlı bir şekilde getirecektir.

Kendi local sistemimde de range partition kullanmaktayım.Ve oldukÇa yüksek performans
almaktayım. Benim range partition tablomda 1.700.000.000 (Bir milyar yedi yüz milyon) satır
data mevcut. Bu tablomu tarih kolonuna göre haftalık periyodlarda 2 yıllık range partition tablo yaptım.
Toplamda 104 partition’a sahip.Ve data büyüklüğü 270 GB ,inanabiliyormusunuz
tek tablonun büyüklüğü 270 gb ve gayet performanslı sorgular Çıkartabiliyorum.
Günlük ortalama 3- 3.5 milyon satır data insert yapılıyor bu tabloya. 1.5 yıl oldu henüz patlamadı:)

Neyse konuyu fazla dağıtmadan devam edelim. Atıyorum yukarıdaki partition tabloyu oluşturdunuz
ve kullanmaya başladınız ama ileride ihtiyaÇ doğdu yeni partitionlar eklemek gerekti tabloya bu durumda
add partition yapabilirsiniz.

alter table personel
add partition (PARTITION p4 VALUES LESS THAN(25));

şeklinde tablonuza yeni partitionlar ekleyebilirsiniz.

Eğer RANGE partitionlarla ilgili yeni örnekler isterseniz makalenin yorum kısmında
belirtirsiniz. Bende elimden geldiğince örnekleri Çoğaltırım.

Bir sonraki makalelerde görüşmek dileğiyle,

Tayfur BÖLER
Database Administrator

Mysql Table Partition

Mysql Table Partition,

Büyük bir tabloyu herhangi bir kolondaki değerlere göre parÇalara bölmeye table partition denir.
Table parititon da datalar fiziksel olarak farklı dosyalarda tutulur.Hatta farklı disklerde tutma
sanşımız da vardır.Bu özelliği Mysql 5.1 versiyonu ile kazanmıştır.

SHOW VARIABLES LIKE ‘%partition%’;

Komut satırını kullanarak da kullandığınız Mysql sürümünün partitioning özelliğine
sahip olup olmadığı anlarsınız. Partition özelliği, hem Myisam table enginede
hem de innodb table enginede kullanılabilir.

Table Partitionun 4 Çeşit yapısı mevcuttur.

RANGE Partitioning
LIST Partitioning
HASH Partitioning
KEY Partitioning


RANGE Partitioning:
Aralığa göre bölümleme de diyebiliriz. En yaygın kullanılan modeldir.
Bir kolondaki değere göre belli aralıklarla parÇalara ayırma.

LIST Partitioning: Range partitiona benzemekle beraber en büyük farkı belli bir kolondaki
değerleri net olarak seÇerek parÇalara ayırma. Ürnek verecek olursak,
sehirler diye bir tablomuz olduğunu düşünün ve bu tabloda plaka kodu diye bir
kolonumuzun olduğunu varsayalım.

PARTITION BY LIST(plaka_kodu) (
-> PARTITION p0 VALUES IN (34),
-> PARTITION p1 VALUES IN (44,23,35),
.
.
.
-> );

Burada 34(istanbul) plaka kodu olanları p0 diye bir bölümün iÇine, 44,23,35(malatya,elazığ,izmit)
plaka kodu olanları ise p1 bölümünün iÇine atmış olduk.

HASH Partitioning:
Btree yerine, hash mantığına göre dataların tutulduğu partitioning yöntemidir.
Ve bir kolondaki değere matematiksel fonksiyon uygulandıktan sonra dönen tamsayı değerine göre
dataları hashing mantığında indexleyen ve parÇalara bölen yapıdır.

KEY Partitioning:
Hash partitioninge benzer ve hash algoritmasını kullanılır. Tabloda key olarak
tanımladığımız kolonlar iÇin uygulanır.(primary key,uniq key…)

şimdiye kadar Mysql table partition ile ilgili bir fikir edinmiş olduk.
Bir sonraki yayınlayacağım Mysql Table Partition 2 adlı makalede de bol bol örneklerle
konuyu anlamış olacağız.

Bir sonraki makaleler de görüşmek dileğiyle,

Tayfur BÖLER
Database Administrator