New_UPGRADE Tablosunda nIndex Çakışma Problemi ve Kesin Çözümü
Merhaba arkadaşlar,
Bu konuda Knight Online server kullananların sıkça yaşadığı, fakat çoğu zaman fark edilmeyen
New_UPGRADE tablosundaki nIndex çakışma problemini ve bunun
item basmama sorununa nasıl yol açtığını anlatacağım.
Problem Nedir?
New_UPGRADE tablosunda bulunan nIndex alanı, upgrade sistemi tarafından
benzersiz (unique) gibi kullanılır.
Ancak bazı database’lerde:
Örnek kontrol sorgusu:
Örnek sonuç:
Bu değer bir Unix Timestamp’tir (21 Ekim 2022).
Bu Çakışma Ne Gibi Sorunlara Yol Açar?
Kısacası:
Upgrade sistemi stabil çalışmaz.
Çözüm: nIndex Değerlerini Benzersiz Hale Getirmek
Aşağıdaki sorgu:
Merhaba arkadaşlar,
Bu konuda Knight Online server kullananların sıkça yaşadığı, fakat çoğu zaman fark edilmeyen
New_UPGRADE tablosundaki nIndex çakışma problemini ve bunun
item basmama sorununa nasıl yol açtığını anlatacağım.
New_UPGRADE tablosunda bulunan nIndex alanı, upgrade sistemi tarafından
benzersiz (unique) gibi kullanılır.
Ancak bazı database’lerde:
- Aynı nIndex değerine sahip birden fazla kayıt bulunur
- Bu genellikle Unix Timestamp (time()) ile nIndex üretildiğinde olur
- Aynı saniye içinde birden fazla insert atılırsa çakışma oluşur
Örnek kontrol sorgusu:
Kod:
SELECT MAX(nIndex) AS MaxIndex FROM New_UPGRADE;
Örnek sonuç:
Kod:
1666371085
Bu değer bir Unix Timestamp’tir (21 Ekim 2022).
Item upgrade basmaz
Scroll çalışmaz
Yanlış oran / yanlış sonuç
Client sorunsuzken server tarafında hata oluşur
Kısacası:
Upgrade sistemi stabil çalışmaz.
Aşağıdaki sorgu:
- Aynı nIndex’e sahip kayıtları tespit eder
- İlk kaydı olduğu g*]()
Çözüm ;
Kod:[*]WITH CTE AS ( SELECT nIndex, ABS(CHECKSUM(NEWID())) AS NewIndex, ROW_NUMBER() OVER (PARTITION BY nIndex ORDER BY (SELECT NULL)) AS rn FROM New_UPGRADE ) UPDATE CTE SET nIndex = NewIndex WHERE rn > 1; [*]