- #1
Konu Sahibi
: serkankacan
[REHBER & ANALİZ] vSRO Toplam Mob Sayısına Göre Kaç GameServer Açılmalı?
Tab_RefNest Üzerinden Aktif Canavar Sayısını Hesaplama ve GameServer RAM / Çökme (Crash) Sınır Analizi
Tab_RefNest Üzerinden Aktif Canavar Sayısını Hesaplama ve GameServer RAM / Çökme (Crash) Sınır Analizi
Merhaba değerli forum sakinleri,
Silkroad Online sunucularında en sık yaşanan beklenmedik **GameServer çökmelerinin (Crash), harita laglarının ve bellek yetersizliği (Out of Memory)** hatalarının temel kaynağı; tek bir GameServer penceresine kaldırabileceğinden çok daha fazla canavar (mob spawn) yüklenmesidir.
Orijinal 32-bit vSRO mimarisinde tek bir GameServer penceresi için ideal ve kararlı aktif canavar sayısı **35.000 - 40.000** bandıdır. Bu sınır aşıldığında GameServer'ın RAM kullanımı tavan yapar ve harita geçişlerinde patlamalar yaşanır.
Aşağıda paylaşılan optimize SQL sorgusu; veritabanınızdaki tüm aktif mob yuvalarını tarayarak sunucunuzun güvenle çalışabilmesi için **en az kaç adet GameServer** açmanız gerektiğini tek seferde hesaplar.
Teknik Bilgilendirme (GameServer Kapasite Skalası)' Alıntı:
- 0 - 40.000 Mob: 1 GameServer (Küçük/Orta haritalı 80-90 Cap sunucular için yeterli)
- 40.001 - 80.000 Mob: En az 2 GameServer (Jangan-Donwhang-Hotan-Alex bölünmeli)
- 80.001 - 120.000 Mob: En az 3 GameServer
- 120.001 - 160.000 Mob: En az 4 GameServer
- 160.001+ Mob: 5 veya daha fazla GameServer (Bölgeler ShardManager INI üzerinden ayrılmalıdır)
Hatasız & Hızlı GameServer Hesaplama SQL Kodu
SRO_VT_SHARD veritabanını seçip aşağıdaki sadeleştirilmiş ve yüksek performanslı sorguyu çalıştırın:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- AKTİF MOB SAYISINA GÖRE ÖNERİLEN GAMESERVER SAYISI HESAPLAMA
-- ===================================================================
SELECT
TotalMobCount AS [Toplam Aktif Canavar Sayisi],
CASE
WHEN TotalMobCount = 0 THEN 0
WHEN TotalMobCount <= 40000 THEN 1
WHEN TotalMobCount <= 80000 THEN 2
WHEN TotalMobCount <= 120000 THEN 3
WHEN TotalMobCount <= 160000 THEN 4
WHEN TotalMobCount <= 200000 THEN 5
ELSE CEILING(CAST(TotalMobCount AS FLOAT) / 40000.0)
END AS [Açılması Gereken Minimum GameServer Sayisi],
CAST(ROUND((TotalMobCount / 40000.0), 1) AS DECIMAL(4,1)) AS [Ortalama GS Yükü Katsayısı]
FROM (
SELECT
ISNULL(SUM(N.dwMaxTotalCount), 0) AS TotalMobCount
FROM dbo.Tab_RefNest N WITH (NOLOCK)
INNER JOIN dbo.Tab_RefTactics T WITH (NOLOCK) ON N.dwTacticsID = T.dwTacticsID
INNER JOIN dbo._RefObjCommon ROC WITH (NOLOCK) ON T.dwObjID = ROC.ID
INNER JOIN dbo._RefRegion R WITH (NOLOCK) ON N.nRegionDBID = R.wRegionID
WHERE ROC.Service = 1
AND N.dwMaxTotalCount > 0
AND ROC.Rarity IN (0, 6) -- Normal ve Şampiyon canavarlar
AND ROC.CodeName128 LIKE 'MOB_%'
AND ROC.CodeName128 NOT LIKE 'MOB_GOD_%' -- Event/God mobları hariç
AND R.ContinentName NOT LIKE 'GOD_TOGUI'
) AS CoreData
Neden Bu Optimize Versiyon Kullanılmalı?
- Hafif JOIN Yapısı: Gereksiz olan `Tab_RefHive` ve `_RefObjChar` tabloları kaldırıldı; yüzbinlerce satırlık yuva taraması milisaniyeler içinde tamamlanır.
- Dinamik Üst Sınır: Canavar sayısı 200.000'i geçtiğinde sabit "6" demek yerine matematiksel formülle (
CEILING) gerçekte kaç GS açılması gerektiğini hesaplar. - Crash Koruması: Sorgu sonucunda çıkan GS sayısına göre bölgelerinizi (
Farm, Jangan, Hotan, Alex, FGW) farklı GameServer pencerelerine paylaştırarak RAM taşması (Memory Leak) kaynaklı kapanmaları sıfıra indirebilirsiniz.
Nasıl Uygulanır?
- SQL Server Management Studio (SSMS) programını açın.
- Üst panelden New Query penceresi açıp kodu yapıştırın.
- F5 tuşuna basarak çalıştırın.
- Alt panelde çıkan Toplam Aktif Canavar Sayısı ve Açılması Gereken Minimum GameServer Sayısı verilerini not edin.
- Sonuca göre ShardManager.ini veya Server yapılandırmanızdan GameServer adetlerinizi ve harita paylaşımlarınızı optimize edin.
Sorularınızı ve harita paylaştırma ayarları hakkındaki detayları konu altından iletebilirsiniz. Herkese lag'sız ve çökmesiz sunucular dileriz!

