MySQL, InnoDB Hakkında

InnoDB

Web programlamayla uğraşan programcılar, daha çok küçük ölçekte program yazdıkarından dolayı MyISAM kullanırlar. Verinin arttığı projelerde performans kaygıları oluşmaya başladığında MyISAM depolamada update işlemlerinde oluşan veri yapısınındaki düzensizliklerden sorun yaşayan geliştiricilerin daha çok tercih ettiği depolama motoru diye tanımlayabiliriz.

Transaction yapı içeren MySQL tablo yapılarından biri olan InnoDB, MyISAM gibi text formatında fiziksel bir yerde kullanılmaz. Ibdata adında bir dosya içerisinde tutulan dosyaları kopyala yapıştır yaparak kopyalayamayız.

InnoDB kullanan bir tablo üzerinde kayıt yaparken belli bir sırayla işlem yapılacağından, kuyrukta bekleyen işlemlerin azami bir şekilde yapılabilmesi için tablo kilitlenir (lock olur). Onun içn toplu insert işlemlerinde VALUES (1),(2),(3)  gibi kullanım yapmamız son derece önemli olur. Aksi takdirde yoğun trafik içeren web sayfalarnda ayrı tabloda yapılan insert işlemi sırasında select yapan kullanıcı tablonun kilitlenmesinden (lock olması) dolayı hatalarla karşılaşması yüksek olasılıktadır.

Özellikle birden çok işlemin aynı anda yapıldığı durumlarda, transaction başlatmak suretiyle, arada oluşabilecek bir hata sonucunda commit‘i görmeyen işlemde, yapacağımız try catch‘de rollback çalıştırarak, yapılan işlemi geri alabiliriz.

InnoDB yapısı içeren deneme adında bir tablo yaptıktan sonra transaction başlatıyoruz. Daha sonra tablomuza veri girişi yapıp, select işlemi yaparak, girmiş olduğumuz veriyi listeliyoruz. Daha sonra vazgeçtiğimizi belirtmek adına rollback komutunu çağırıyoruz. Bu durumda yapmış olduğumuz veri silinecektir. Sonunda select yaptığımızda tabloda veri olmadığını göreceksiniz.

Burada önemli olan ayrıntı; Transaction işlemi yaptığımızda, aslında tabloya fiziksel kayıt yapılır ama rollback çalıştırdığımız için yapılan işlem geri alınır. Başka bir örneğe bakalım;

İlk olarak ilk örneğimizdeki deneme tablomuza auto_increment alanı oluşturuyoruz. Daha sonra transaction başlatıp insert yaptıktan sonra rollback komutu çağırarak işlemimizi geri alıyoruz. Daha sonra transaction başlatmadan direk insert işlemi yapıp select yaptığımızda ikinci insert yani no alanına girdiğimiz 43 değerini görüyoruz. Bu ayrıma tekrar tekrar bakıp dikakt etmenizde büyük fayda olduğunu belirtmek isterim.

InnoDB tabloları tamamen InnoDB motoru tarafından tutulduğundan işletim sisteminden bağımsız bir şekilde çalışmaktadır. Bu nedenle özellikle update kullanılan  tabloların yapıları MyISAM yerine InnoDB veya BerkeleyDB olarak tanımlanması gerekmektedir. Aksi takdirde MyISAM tablo yapısının bozulacağından düzenli aralıklarla OPTIMIZA yapmamız gerekir.

Leave a Reply

Your email address will not be published. Required fields are marked *