Soru MySQL ile eşzamanlı ekleme


İçinde bir sorun olduğunu biliyorum mysql eşzamanlı seçim ve ekleme ile. Ancak, benim sorum iki bağlantıyı açarsam mysql ve her ikisini de kullanarak verileri yüklemeye devam mysql Verileri eşzamanlı olarak alır veya başka bir tane yüklemeden önce birinin bitmesini bekler mi?

Güncelleştirme

Nasıl olduğunu bilmek isterim mysql Aynı tabloda veya aynı anda farklı tablolarda veri yüklemeye çalıştığımda (ayrı bağlantıları açarken) olduğu gibi her iki durumda da davranır.


22
2017-08-19 05:32


Menşei


Bu soru çok geniştir. Bazı kodlar gönderebilir ve koddaki belirli noktaları sorabilir misiniz? - dani herrera


Cevaplar:


Veritabanına tamamen yeni bir bağlantı oluşturacak ve her iki bağlantıya da ekleme yapacaksanız, veritabanının perspektifinden hala sıralı olacak. Belgelerinin Eşzamanlı ekler MySQL'in belge sayfasında şöyle yazıyor:

Birden çok INSERT ifadesi varsa, sıraya alınır ve   SELECT ifadeleri ile eşzamanlı olarak sırayla gerçekleştirildi.

İkide hangi düzenin üzerinde kontrol olmadığını düşünün. eşzamanlı ekler yer alacak. Bu eşzamanlılıktaki düzen, birçok farklı faktörün merhametidir. Düzeni sağlamak için, varsayılan olarak eşzamanlılıktan fedakarlık etmek zorunda kalacaksınız.


21
2017-08-29 16:52



öyleyse aynı veritabanı ancak farklı tablolar ise? - Kamrul Khan
@ user3360140: bu durumda bağlantılar tabloyu kilitlemek için yarışmayacak. Bu nedenle her ikisi de kilidi alacak ve her iki tabloya aynı anda ekleyebilecek. - displayName
müthiş. Çok teşekkürler! - Kamrul Khan
Cevabınızı güncellememe göre günceller misiniz? Ayrıca, "Eşzamanlı ekler hala concurrent_insert parametresine tabidir." ifadesinin 0 olarak ayarlanmadığından emin oldunuz; biraz daha açıklayabilir misiniz lütfen? Eşzamanlı seçim ve ekler için concurrent_insert'in etkinleştirilmesi gerektiğini biliyorum; ama çoklu paralel ekler nasıl etkiler (aynı tablo / farklı tablo)? - Kamrul Khan
@ user3360140: Güncelleme. Orada karışıklık için özür dilerim. Ekler her zaman ardışık olacaktır. concurrent_insert Param bu konuda hiçbir şeyi değiştirmez. Eşzamanlı SELECT ve INSERT. - displayName


Kilitlenme ve işlemler kilitlenme, ACID ve özellikle MVCC, hakkında sormak:

Kilitlenme Algılama ve Geri Alma

InnoDB otomatik olarak işlemin kilitlenmesini algılar ve geri alır   çıkmazı kırmak için işlem veya işlemler. InnoDB dener   Bir işlemin büyüklüğünü geri almak için küçük işlemleri seçin   eklenen, güncellenen veya silinen satırların sayısına göre belirlenir.   InnoDB bir işlemin tam bir geri dönüşünü gerçekleştirdiğinde, tüm kilitler   işlem tarafından belirlenen serbest bırakılır. Ancak, sadece tek bir SQL ise   bir hata, bazı kilitler sonucu ifadesi geri alınır   ifadesiyle belirlenen korunabilir. Bu olur çünkü InnoDB   satır kilitlerini daha sonra bilmeyecek şekilde bir biçimde depolar.   kilit hangi ifade ile belirlendi.

https://dev.mysql.com/doc/refman/5.6/en/innodb-deadlock-detection.html

Kilitleme

Bir işlemin verileri görmesini veya değiştirmesini koruma sistemi   Diğer işlemler tarafından sorgulanmakta veya değiştirilmektedir. Kilitleme   Stratejinin güvenilirliğini ve veri tabanının tutarlılığını dengelemesi gerekir   operasyonlara karşı (ACID felsefesinin ilkeleri)   iyi eşzamanlılık için gereken performans. Kilitlemenin ince ayarı   Strateji genellikle bir izolasyon seviyesi seçmeyi ve tüm   veritabanı işlemleriniz bu yalıtım için güvenli ve güvenilir   seviyesi.

http://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_locking

ASİT

Atomiklik, tutarlılık, izolasyon ve   dayanıklılık. Bu özellikler bir veritabanı sisteminde istenir.   ve hepsi bir işlem kavramına sıkı sıkıya bağlıdır.   InnoDB'nin işlem özellikleri ACID prensiplerine uygundur.   İşlemler, işlenebilecek veya işlenebilecek atomik iş birimleridir.   geri. Bir işlem veritabanında birden çok değişiklik yaptığında,   İşlem gerçekleştiğinde tüm değişiklikler başarılı olur veya   İşlem geri alındığında tüm değişiklikler geri alınır.   veritabanı her zaman tutarlı bir durumda kalır - her birinden sonra   taahhüt veya geri alma işlemleri devam ederken. İlgili ise   veriler birden çok tabloda güncelleniyor, sorgular ya hepsini görüyor   eski değerler veya tüm yeni değerler, eski ve yeni değerlerin bir karışımı değil.   İşlemler birbirlerinden korunuyor (izole)   devam etmekte; birbirlerini etkileyemezler veya birbirlerini göremezler   kaydedilmemiş veriler. Bu izolasyon kilitleme ile elde edilir   mekanizması. Tecrübeli kullanıcılar tecrit seviyesini ve ticaretini ayarlayabilir   artan performans ve eşzamanlılık lehine daha az koruma sağlamak,   İşlemlerin gerçekten müdahale etmediğinden emin olduklarında   birbirleriyle.

http://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_acid

MVCC

InnoDB bir multiversion eşzamanlılık kontrolü (MVCC) depolama motorudur   Bu, tek satırın birçok sürümünün aynı anda mevcut olabileceği anlamına gelir   zaman. Aslında, bu tür satır versiyonlarının büyük bir miktarı olabilir.   Seçmiş olduğunuz izolasyon moduna bağlı olarak InnoDB   tüm satır sürümlerini en eski aktif okuma görünümüne geri döndürün, ancak   en azından tüm sürümlerin geri   Şu anda çalışan SELECT sorgusunun başlangıcı

https://www.percona.com/blog/2014/12/17/innodbs-multi-versioning-handling-can-be-achilles-heel/


7
2017-08-19 05:56





MySQL, aynı tabloda paralel eklemeleri desteklemektedir.

Eşzamanlı okuma / yazma için yaklaşımlar kullandığınız depolama motoruna bağlıdır.

InnoDB'nin

MySQL, çoklu oturumlar ile eşzamanlı yazma erişimini desteklemek için InnoDB tabloları için satır düzeyinde kilitleme kullanır, böylece çok kullanıcılı, son derece eşzamanlı ve OLTP uygulamaları için uygundur.

MyISAM

MySQL, MyISAM, MEMORY ve MERGE tabloları için tablo düzeyinde kilitleme kullanır ve bu tabloları bir seferde tek bir oturumda güncellemeye izin vererek, bunları salt okunur, salt okunur veya tek kullanıcılı uygulamalar için daha uygun hale getirir

Ancak, yukarıda bahsedilen MyISAM tabloları davranışını değiştirebilir. concurrent_insert eşzamanlı yazma elde etmek için sistem değişkeni. Nazikçe bakın bağlantı detaylar için.

Bu nedenle, MySQL, InnoDB ve MyISAM depolama motoru için eşzamanlı eki destekliyor.


6
2017-09-03 18:28





Değişir.

İstemciye bağlıdır - bazı istemciler eşzamanlı erişime izin verir; Bazıları erişimi seri hale getirecek ve böylece beklenen kazancı kaybedecektir. Hatta PHP vs Java vs ... veya Apache vs ... veya Windows vs belirttiniz bile ... Birçok kombinasyon sadece herhangi bir paralellik sağlamaz.

Farklı tablolar varsa, buffer_pool, vb üzerinde I / O, CPU, Muteksler için sadece genel çekişme vardır. Makul miktarda paralellik mümkündür.

Aynı tablo ise, dizinlere ve erişim modellerine bağlıdır. Bazı durumlarda, dişler birbirini engelleyecektir. Bazı durumlarda "kilitlenme" bile yapar ve işlemlerden birini geri alır. Kilitlenme sadece sizi yavaşlatmakla kalmaz, aynı zamanda ekleri tekrar denemenizi sağlar.

Çok sayıda satırın yüksek hızda alımını istiyorsanız, bkz. bloğum. Teknikler ortaya koyar ve çoğaltma, Motor seçimi, çoklu iş parçacığı gibi sonuçların önemini belirtir.

Aynı tablolara birden fazla iş parçacığı yerleştirme - Bu, sizin için sağladığınız değerlere çok bağlıdır. PRIMARY veya UNIQUE anahtarlar. Diğer işlemlerin aynı işlemde olup olmadığına bağlıdır. Ne kadar G / Ç'nin dahil olduğuna bağlı. Tek satırlı ekler mi, yoksa toplu iş mi yaptığınıza göre değişir. O bağlıdır ... (Belirsiz olduğum için üzgünüm, ama sorunuz çok spesifik değil.)

Eğer iki veya üç tasarımla ilgili detayları sunmak isterseniz, özellikleri tartışabiliriz.


3
2017-08-31 15:15