SQL Guid vs Sequential GUID – Performans Karşılaştırması

SQL Guid vs Sequential GUID – Performans Karşılaştırması

4 Ocak 2019 0 Yazar: Mustafa BÜKÜLMEZ
Toplam Görüntülenme : 174
Yaklaşık okuma süresi : 3 DK
SQL Tarih Convert İşlemleri
SQL Sıralı GUID Vermek - SQL NEWSEQUENTIALID
SQL Guid vs Sequential GUID – Performans Karşılaştırması
5 (100%) 1 Oy

SQL Guid vs Sequential GUID – Performans Karşılaştırması, yazım sql eğitim setime devam ediyorum. Bu yazımda bir çok tartışmaya konu olmuş olan Guid ile Sıralı Guid arasındaki performans farklarını görelim.

SQL Guid vs Sequential GUID – Performans Karşılaştırması

Tipik bir desen Guid’i tablolar için PK olarak kullanmaktır, ancak diğer tartışmalarda da belirtildiği gibi bazı performans sorunları vardır.

Şimdi tipik Guid dizisi aşağıdaki gibidir.

Advertisements

f3818d69-2552-40b7-a403-01a6db4552f7
7ce31615-fafb-42c4-b317-40d21a6a3c60
94732fc7-768e-4cf2-9107-f0953f6795a5

Bu şekilde ilerleyen Guid dizisinin verdiği performans sorunları,

  • Geniş değer dağılımları
  • Neredeyse rastgele olanlar
  • Dizin kullanımı çok, çok, çok kötü
  • Bir sürü yaprak hareket ediyor
  • Neredeyse her PK’nin en azından kümelenmemiş bir dizinde olması gerekir
  • Sorun hem Oracle hem de SQL Server’da oluyor

Bu sorunlara istinaden yapılacak olası çözüm sıralı Guid üretmektir. Aşağıda sıralı olarak üretilmiş Guid dizisi görebilirsiniz.

cc6466f7-1066-11dd-acb6-005056c00008
cc6466f8-1066-11dd-acb6-005056c00008
cc6466f9-1066-11dd-acb6-005056c00008

Bu sıralı Guid verilmesi işlemini SQL üzerinden ayarlayabilmek için yapılması gereken işlemleri bu yazımda detaylıca anlatmıştım.

C# üzerinde de şu kodları kullanarak sıralı Guid oluşturabilirsiniz.

[DllImport("rpcrt4.dll", SetLastError = true)]
static extern int UuidCreateSequential(out Guid guid);

public static Guid SequentialGuid()
{
    const int RPC_S_OK = 0;
    Guid g;
    if (UuidCreateSequential(out g) != RPC_S_OK)
        return Guid.NewGuid();
    else
        return g;
}

Sıralı Guid ‘in yararları

  • Daha iyi endeks kullanımı
  • Kümelenmiş anahtarların kullanımına izin ver (NLB senaryolarında doğrulanacak)
  • Daha az disk kullanımı
  • Minimum maliyetle performansın% 20-25’i arttı

Gerçek hayat ölçümü: Senaryo:

  • SQL Server’da UniqueIdentifier türleri olarak saklanan kılavuz
  • Oracle’da CHAR (36) olarak saklanan rehber
  • Tek bir işlemde bir araya getirilen çok sayıda ekleme işlemi
  • Tabloya bağlı olarak 1 ila 100s arası uç
  • Bazı tablolar> 10 milyon satır
İlgili İçerik  SQL Server Nedir? SQL Nedir? T-SQL Nedir?

 

Laboratuar Testi – SQL Server 

VS2008 testi, 10 eşzamanlı kullanıcı, düşünme süresi yok, yaprak tablo için
standart olarak 600 eklerle kıyaslama işlemi

Standart Kılavuz
Ort. İşlem süresi: 10,5 sn
Ort. İkinci istek: 54.6
Ort. Resp. Zaman: 0.26 

Sıralı Kılavuz
Ort. İşlem süresi: 4.6 sn
Ort. İkinci istek: 87.1
Ort. Resp. Süre: 0.12 

Oracle’daki sonuçlar (üzgünüz, test için kullanılan farklı araç) 1.327.613 Guid PK

Standard Guid , 0.02 sn. her uç için geçen süre, 2.861 sn. CPU zamanı, toplam 31.049 sn.

Sıralı Kılavuz , 0,00 sn. her bir kesici uç için geçen süre, 1.142 sn. CPU zamanı, toplam 3.667 sn.

DB dosyası sıralı okuma bekleme süresi 6,4 milyon bekleme olayından 62,415 saniye, 1,2 milyon bekleme olayına 11.063 sn.

 

Alınan performans çıktıları yukarıda gördüğünüz gibidir. Kullanmak yada kullanmamak elbette sizin bileceğiniz bir iştir.


Tartışmalarda gördüğüm kadarı ile sıralı Guid hoş görünse de normal Guid kullanılmasını tavsiye eden kişi sayısı azımsanmayacak kadar yüksek.

SQL Guid vs Sequential GUID – Performans Karşılaştırması yazımda buraya kadar arkadaşlar.

Microsoft SQL Server & T-SQL Eğitim Seti ders listesi için tıklayınız.

Bu dersimde, SQL Eğitim setimdeki 54. derstir. 🙂

Sağlıcakla ve Takipte Kalın. 😉

SQL Tarih Convert İşlemleri
SQL Sıralı GUID Vermek - SQL NEWSEQUENTIALID