DBA Günlükleri #2 : In-Memory ve Klasik Tabloların Performans Karşılaştırılması
DBA Günlükleri yazı serisinin ikincisinde, birinci bölümde yapmış olduğumuz in-memory geçişinin etkisini ve performansını inceleyeceğiz. Bu nedenle ilk yazıya bakmadıysanız DBA Günlüleri #1 makalesini okuyabilirsiniz. İlk bölümde özet olarak, in-memory tabloların faydaları ve mevcut bir veritabanını in-memory tabloya geçirmek için gereksinimleri ve geçiş işlemi yapılmıştır.
Serinin ikinci yazısında ise performans karşılaştırmasını yapacağız. Bunun için WorlWideImporters örnek veritabanını kullandım.
Performans testini karşılaştırmak için, 2 farklı durum üzerinde çalıştım. Performans testi detayları ve test ortamı
- SQL Server Versiyonu : SQL Server 2017
- Test Akışı (INSERT) : Disk üzerine x tablosu oluşturulmuştur. Ardından bu tabloya 50.000 kayıt INSERT edilmiştir ve tamamlanma süresine bakılmıştır. Daha sonrasında aynı senaryo memory-optimized şekil oluşturulan tablo üzerinde uygulanmıştır.
- Test Akışı(UPDATE) : Disk üzerine bulunan x tablosunda 50k ve 100k’lık UPDATE işlemleri yapılmıştır. Daha sonrasında aynı senaryo memory-optimized şekil oluşturulan tablo üzerinde uygulanmıştır.
Disk-Based Tablo ve 50k Insert İşlemi Performans
Bu senaryo için kullanılan script’i bu link üzerinden kullanabilirsiniz.
Bu işlem kapsamında VehicleLocation isminde disk-based bir tablo oluşturulmuştur ve içerisine 50.000 kayıt insert edilmiştir.
Toplam Süre : 4490 ms
Memory-Based Tablo ve 50k Insert İşlemi Performans
Bu senaryo için kullanılan script’ide yine aşağıdaki linkten temin edebilirsiniz. Paste Ubuntu Kodu
Burada da aslında disk-based yerine üstteki senaryonun gerektirdiği şekilde in-memory tablo kullanılmıştır ve içerisine 50.000 kayıt insert edilmiştir.
Toplam Süre: 1263 ms
Görüleceği üzere, memory-based tablolar üzerinde yapılan yazma (insert) işlemleri disk-based tabloya göre yaklaşık 4 kat daha hızlıdır. Production ortamlarda yazma isteğinin yoğun olduğu bir ortamda yazma hızında dramatik iyileştirmeler yakalanabilir.
Disk-Based Tablo ve Memory-Based Tablo 50k Update İşlemi Performans Karşılaştırması
Insert operasyonlarından sonra update operasyonlarının da performansını karşılaştırdım. Burada görüleceği üzere, toplu update işlemlerinde memory-based tabloların disk-based tablolara göre neredeyse 2 kat hızlı olduğu görülmektedir. Burada 2 farklı test senaryosu uygulandı. Aslında 2 farklı ortam hazırlandı. Birinci ortamda hem disk hem de memory tabanlı tabloda 50k kayıt üzerinde toplu update işlemi yapıldı. İkinci senaryoda ise kayıt sayısı 100k olarak belirlendi ve tüm kayıtlara update işlemi uygulandı. 50k ve 100k kayıt sayısı için performans farkları aşağıda görülebilir.
50k Kayıt Performans Karşılaştırması
100k Kayıt Performans Karşılaştırması
Bu yazıda in-memory tablolar ile disk üzerindeki tablolar arasında INSERT ve UPDATE performans karşılaştırmasını yaptım. Test sonuçlarından görüleceği üzere, in-memory ortamlarda INSERT işlemleri 3–4 kat daha hızlı UPDATE işlemleri ise yaklaşık 2 kat daha hızlıdır.
Yeni bir proje oluştururken in-memory kısıtlamalarını ve gerekliliklerini yerine getirmek ve yazılımı uyarlamak çok daha kolaydır. Bu nedenle yeni projelerde, INSERT ve UPDATE yoğunluğuna göre in-memory tercih edilebilir. Ancak, daha önceden belirtirdiği gibi kısıtlamalar ve gereklililiklere dikkat edilmelidir.
Mevcut bir projede in-memory deneyimi yaşamak için biraz daha dikkatli olmak ve kısıtlamaların&gerekliliklerin eksiksiz bir biçimde yerine getirilmesi gerekmektedir. Buna ek olarak, yazılım tarafının da bu yeni yapıya uyum sağlaması gerekiyor. Optimistic lock uygunluğu ve retry mekanizması gibi özelliklerin yazılıma kazandırılması gerekiyor.
Bu serinin 3. yazısında, in-memory özelliğinin performans anlamında zirvesi olan natively compiled SP ile INSERT ve UPDATE işlemlerini inceleyeğim ve bu halinden daha da performanslı çalışmasını bekleyeceğim :) Buna ek olarak, in-memory sürecinin kısıtlamalarından bahsedeceğim. In-memory ile ilgili soru,görüş ve önerileriniz için iletişim bilgilerim aşağıdaki gibidir.
LinkedIn : https://www.linkedin.com/in/h%C3%BCseyin-demir-4020699b/
Mail : demirhuseyinn.94@gmail.com
Sevgiler,
Demir.