Data Management (DMS) içindeki kilit gerektirmeyen veri değiştirme dili (DML), tabloları kilitlemeden veya veritabanı performansını düşürmeden büyük veri kümeleri üzerinde UPDATE, DELETE ve INSERT...SELECT deyimlerini çalıştırmanıza olanak tanır. DMS motoru hedef veriyi otomatik olarak toplu işlere böler ve deyimi toplu iş bazında yürütür; her toplu iş arasında birincil-ikincil çoğaltmayı korumak ve veritabanı yükünü azaltmak için kısa süreli duraklamalar uygular.
Arka Plan
İş verileriniz büyüdükçe, genellikle geçmiş verileri temizlemeniz veya bir tablonun büyük bölümlerini güncellemeniz gerekir. İki yaygın yaklaşım da önemli riskler taşır:
Veriyi ayırmak için komut dosyası yazma: Silme veya güncelleme işlemlerini sayfalara ayırmak için
LIMITyan tümcesini kullanmak sık yapılan bir hatadır. Bir dizin taraması olmadan kullanılanLIMITtüm tablo taramasına zorladığından tablo yine de kilitlenebilir. Bölümleme doğru şekilde uygulanmış olsa bile, yanlış ayarlanmış bir toplu iş aralığı birincil ve ikincil veritabanları arasında ciddi çoğaltma gecikmesine neden olabilir.Manuel DBA çıkarma: Büyük veri kümelerini manuel olarak bölmek zaman alıcıdır, hata yapmaya açıktır ve işlem başladıktan sonra ayarlanması zordur.
Yukarıdaki risklerin ötesinde, büyük tablolar üzerinde doğrudan işlem yapılırken iki ek başarısızlık durumu ortaya çıkabilir:
Çok sayıda satırı etkileyen tek bir SQL deyimi, günlük girdisi sayısının üst sınırı aşmasına neden olabilir ve bu durum deyimin tamamen başarısız olmasına yol açar.
Belirtilen dizinler kullanılmadan yürütülen bir SQL deyimi tablo kilitlemeye, veritabanı yükünün artmasına ve ciddi durumlarda iş kesintilerine neden olabilir.
Kilit gerektirmeyen DML, DMS içinde toplu iş bölmeyi ve hız sınırlamayı otomatikleştirerek her iki riski de ortadan kaldırır.
Nasıl Çalışır?
Kilit gerektirmeyen DML, tek bir SQL deyimini üç aşamada işler:
Veri bölme — DMS motoru deyimi analiz eder ve eşleşen satırları dizin aralıklarına göre birden fazla toplu işe böler; böylece tüm tablo taramasından kaçınılır.
Toplu iş yürütme — DMS deyimi seferde bir toplu iş üzerinde çalıştırır ve her toplu iş sırasında yalnızca kısa ömürlü satır düzeyinde kilitler tutar.
Arabellek aralığı — Her toplu iş tamamlandıktan sonra DMS, sonraki toplu işi başlatmadan önce kısa bir süre bekler. Bu aralık, ikincil veritabanının çoğaltmaya yetişmesini sağlar ve birincil-ikincil gecikmesini kabul edilebilir sınırlar içinde tutar.
Faydalar
Büyük veri değiştirme işlemleri sırasında işiniz etkilenmez.
Veritabanı performansı ve veritabanı depolaması üzerindeki etki azalır.
Büyük miktarda veri değişikliği durumunda bile yürütme verimliliği sağlanır.
Desteklenen Veritabanları
| Veritabanı motoru | Desteklenen örnekler |
|---|---|
| MySQL | ApsaraDB RDS for MySQL, PolarDB for MySQL, MyBase for MySQL, PolarDB for Xscale, üçüncü taraf MySQL veritabanları |
| PostgreSQL | ApsaraDB RDS for PostgreSQL, PolarDB for PostgreSQL, MyBase for PostgreSQL, üçüncü taraf PostgreSQL veritabanları |
| MariaDB | ApsaraDB for MariaDB, üçüncü taraf MariaDB veritabanları |
| OceanBase | MySQL modunda ApsaraDB for OceanBase |
| Oracle uyumlu | PolarDB for PostgreSQL (Oracle ile Uyumlu) |
Sınırlamalar
Yalnızca UPDATE, DELETE ve INSERT...SELECT deyimleri desteklenir.
UPDATE ve DELETE
| Kısıtlama | Ayrıntılar |
|---|---|
| Tablo kapsamı | Yalnızca tek tablo |
| WHERE yan tümcesi | Zorunludur. Tüm satırları güncellemek veya silmek için WHERE 1=1 kullanın |
| Alt sorgular | Desteklenmez |
| LIMIT yan tümcesi | Desteklenmez — manuel sayfalama için LIMIT kullanmak tüm tablo taramasına zorlar; bu da özelliğin önlemeyi amaçladığı tablo kilitlemeye neden olur |
INSERT...SELECT
| Kısıtlama | Ayrıntılar |
|---|---|
| SELECT kapsamı | Yalnızca tek tablo |
| WHERE yan tümcesi | SELECT yan tümcesinde zorunludur. Tüm satırları seçmek için WHERE 1=1 kullanın |
| İzin verilmeyen yan tümceler | SELECT yan tümcesinde LIMIT, ORDER BY ve GROUP BY desteklenmez |
Kullanım Senaryoları
Geçmiş verileri temizleme — Üretim tablosundaki okuma veya yazma işlemlerini engellemeden artık ihtiyaç duyulmayan satırları silin.
Tüm satırları güncelleme — Çoğaltma gecikmesine veya hizmet kesintisine neden olmadan bir sütun güncellemesini tüm tabloya uygulayın.