İç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.
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.
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/
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.
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.