Dubluve.net » insert sorgu süresi http://www.dubluve.net Biz de yazılımcıyız Wed, 30 Jul 2014 22:06:10 +0000 tr-TR hourly 1 http://wordpress.org/?v=3.9.1 mysql insert delayed http://www.dubluve.net/2012/08/23/mysql-insert-delayed/ http://www.dubluve.net/2012/08/23/mysql-insert-delayed/#comments Thu, 23 Aug 2012 07:47:58 +0000 http://dubluve.net/?p=1749 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. Eğer varsa bu iki işlem birleştirilir. 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 :) Diğer türlü de bu sorgular process olarak tutulmaya devam edilir.

Bu parametreleri de mysqld ile değiştirebiliriz nasıl olduklarına buradan ve buradan bakabilirsiniz.

Sorgunun kullanımı ise INSERT INTO ile aynıdır, DELAYED bu iki kelime arasına gelir; INSERT DELAYED INTO

 

Daha detaylı bilgi için buraya göz atabilirsiniz.

]]>
http://www.dubluve.net/2012/08/23/mysql-insert-delayed/feed/ 4