23 Ağustos 2012 Perşembe

mysql insert delayed

insert delayed komutu, bir tablo üzerinde aynı anda fazla işlem yaptığımız zaman işimize yarayabilir. Yaptığı işlem, gelen insert sorgularını bir process olarak tutmak, ve en uygun olan zamanda tabloya insert etmek. İlk olarak, insert delayed nedir ne değildir ondan bahsedelim. insert delayed çalıştığı zaman, geriye sorgunun çalıştığına dair yanıt döndürür ama veriler eklenmek üzere bekletilir. insert delayed komutu, insert komutundan daha yavaş çalışmaktadır. Sebebi, insert kullandığımız zaman direk tabloya etki etmemiz, insert delayed kullandığımızda ise bir süre bekletilmemizdir. O yüzden insert delayed komutunu sadece gerçekten ihtiyacımız varsa kullanmalıyız. Birden fazla insert işleminde, insert delayed kullanıldığı zaman, bunlar tek bir işlem olarak tutulur ve birlikte insert edilir. Yani bir sürü insert sorgusunun çalışmasındansa sadece 1 kere insert işlemi yapılır. insert delayed ile insert etmek istediğimiz verileri, veriler tabloya insert edilmeden önce select komutu kullandığımızda göremeyiz. lock tables komutu kullanıldıktan sonra insert delayed komutu kullanıldığında hataya yol açar, sebebi ise, kilitlenmiş tabloya bir işlem yaptıramayışımız. Yani biz tabloyu kilitlersek, ona bir işlem ekleyemeyiz. insert delayed, tablo için ayrı bir processtir. insert delayed komutu, yalnızca MyISAM, MEMORY ve ARCHIVE tablolarda çalışır. insert .... select ve insert .... on duplicate key gibi sorgularda delayed iş görmez, yok sayılır. Sebebi ise, insert delayed sorgusunun hemen yanıt verip ama işlemi process olarak tutması. Insert işlemi gerçekleşmeden last_inserd_id() kullanırsak hataya yol açar. mysql'de show status komutunu çalıştırdığımızda aşağıda verdiğim parametreler insert delayed işlemi ile ilgilidir, gerekli durumlarda takip edilebilir.
Delayed_insert_threads : gelen INSERT DELAYED sayısı
Delayed_writes : INSERT DELAYED ile yazılmış satır sayısı
Not_flushed_delayed_rows : Yazılmak için bekletilen satır sayısı
Peki insert delayed komutu verileri tabloya ne zaman ekler? Bu noktada önemli olan parametrelerden 2 tanesi delayed_insert_timeout ve delayed_insert_limit. insert delayed komutu çalıştırıldığı zaman, ilk olarak daha önceden bekletilen işlem olup olmadığına bakılır. Ardından da bu iki parametreye bakılır. Eğer delayed_insert_limit sayısına ulaşılmışsa, veya delayed_insert_timeout vakti gelmişse, veriler veritabanına insert edilir :) Bu parametreleri de mysqld ile değiştirebiliriz nasıl olduklarına buradan ve buradan bakabilirsiniz. Daha detaylı bilgi için buraya göz atabilirsiniz. Devamı için : mysql insert delayed

Hiç yorum yok:

Yorum Gönder

Yorumunuzu esirgemeyiniz..