0%

Logo ERP Yavaşladıysa: SQL Server’da Kontrol Etmeniz Gereken 5 Ayar

Logo’da fatura kesmek, stok bakmak veya rapor almak birden yavaşladıysa ilk akla gelen çoğu zaman “sunucu yetmiyor, RAM alalım” olur. Sahada baktığımızda ise işin aslı sıkça başka çıkıyor: SQL Server kurulurken varsayılan ayarlarla bırakılmış. Bu ayarlar Logo gibi gün boyu yoğun çalışan bir programa göre değil, genel kullanım için gelmiş. İyi haber şu: çoğu zaman yeni donanım almadan, birkaç doğru ayarla fark edilir rahatlama sağlanabiliyor. Aşağıda en çok işe yarayan beş noktayı sade dille anlatıyoruz.

Önce “şu an ne yazıyor?” diye bakın

Göz kararı değer yazmayın. SQL Management Studio’da aşağıdaki sorguyu çalıştırıp mevcut durumu bir ekran görüntüsüyle saklayın; sonra değişiklik yapın:

SQL
SELECT name, value_in_use, description
FROM sys.configurations
WHERE name IN (
    N'max server memory (MB)',
    N'cost threshold for parallelism',
    N'max degree of parallelism',
    N'optimize for ad hoc workloads'
)
ORDER BY name;

-- Geçici çalışma alanı (TempDB) dosyaları
SELECT name, type_desc, size * 8 / 1024 AS size_mb,
       growth, is_percent_growth, physical_name
FROM tempdb.sys.database_files
ORDER BY type_desc, name;

Aşağıdaki rakamlar Logo kullanan birçok firmada iyi bir başlangıçtır. Sunucunuzun RAM’i ve işlemci sayısı farklıysa değerleri ona göre biraz oynatmak gerekir; emin değilseniz birlikte bakmak en güvenlisi.

Ne?Kurulumda çoğu zamanLogo için pratik hedef
SQL’in kullanacağı bellek üst sınırıSınırsız (neredeyse tüm RAM)Windows + Logo’ya 4–8 GB bırakıp kalanı SQL’e verin
Sorguların “çok çekirdeğe bölünme” eşiği5 (çok düşük)30–50
Tek seferlik sorguların belleği şişirmesiKapalıAçık (1)
Geçici alan (TempDB) dosyaları1 küçük dosyaBirkaç eşit dosya (en fazla 8), MB ile büyüme
Index (fihrist) bakımıHepsi sıfırdan / eski yöntemHafif dağınıksa düzenle, çok bozulmuşsa yeniden kur + istatistik

1. Bellek tavanı: SQL her şeyi yutmasın

SQL Server, kurulunca “elimdeki tüm belleği kullanırım” diye gelir. Aynı makinede Logo, Windows ve antivirüs de çalışıyorsa sonuç tanıdıktır: ekranlar kilitlenir, “RAM bitti” sanırsınız, aslında SQL diğerlerine nefes bırakmamıştır.

  • Neden önemli: Sınır yoksa Windows ve Logo servisleri sıkışır; sistem disk takasına düşer, genel yavaşlık başlar.
  • Ne yapmalısınız: İşletim sistemi ve Logo servisleri için en az 4–8 GB ayırın; kalanı SQL’e üst sınır olarak yazın. Örnek: 24 GB’lık sunucuda SQL’e 16 GB (16384 MB) vermek sık görülen dengeli bir seçimdir.
SQL
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 16384; -- örn. 16 GB
RECONFIGURE;

2. Küçük işler için tüm işlemciyi bölmeyin

SQL Server, bir işi “yeterince ağır” bulursa birden fazla işlemci çekirdeğine böler. Kurulumdaki eşik değeri çoğu Logo sunucusunda çok düşük kalır. Sonuç: fatura kaydı gibi ufak işler bile gereksiz yere parçalanır, çekirdekler birbirini bekler, işlemci meşgul görünür ama Logo hızlanmaz.

  • Neden önemli: Logo gün boyu yüzlerce küçük sorgu üretir. Eşik düşükse basit işlemler bile “ağır iş” muamelesi görür; sunucu boşuna yorulur.
  • Ne yapmalısınız: Eşiği 30–50 aralığına çekin. Küçük işlemler tek çekirdekte bitsin; gerçekten ağır raporlar birden fazla çekirdek kullansın.
SQL
EXEC sp_configure 'cost threshold for parallelism', 50;
RECONFIGURE;

3. Tek kullanımlık sorgular belleği şişirmesin

Logo’da filtre değiştirdikçe arka planda sürekli yeni, bir kerelik sorgular oluşur. Varsayılan ayarda SQL Server bunların çalışma planlarını da bellekte tutmaya çalışır. Zamanla “hafıza dolu ama işe yaramıyor” hali oluşur; sık kullanılan gerçek işlere yer kalmaz.

  • Neden önemli: Bir kez çalışıp bir daha gelmeyen sorgular RAM’i yer; sunucu gereksiz şişer.
  • Ne yapmalısınız: Aşağıdaki seçeneği açın. Böylece SQL, planı belleğe tam olarak almak için aynı sorgunun en az iki kez gelmesini bekler; tek seferlikler yer kaplamaz.
SQL
EXEC sp_configure 'optimize for ad hoc workloads', 1;
RECONFIGURE;

4. Geçici çalışma alanı (TempDB) dar gelmesin

Logo rapor alırken, sıralama yaparken veya geçici listeler üretirken SQL’in “tezgâh”ı TempDB’dir. Kurulumda çoğu zaman tek ve çok küçük bir dosya bırakılır. Dosya sürekli büyümeye çalışır; disk meşgul olur, raporlar takılır. İşlemci çekirdeği çok, dosya tek ise de aynı tezgâhta kuyruk oluşur.

  1. Birden fazla veri dosyası kullanın; pratikte en fazla 8 yeter.
  2. Tüm dosyaların başlangıç boyutu aynı olsun (ör. 512 MB veya 1 GB).
  3. Büyümeyi yüzde ile değil sabit MB ile yapın (ör. 64 veya 128 MB).
  4. Mümkünse TempDB’yi sistem diskiyle paylaştırmayın; ayrı, hızlı bir diske koyun.

Dosyaları Management Studio’dan ekledikten sonra boyutları eşitleyin (isimler sunucuya göre değişebilir):

SQL
ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'tempdev', SIZE = 512MB, FILEGROWTH = 64MB);
ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'temp2',   SIZE = 512MB, FILEGROWTH = 64MB);
ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'temp3',   SIZE = 512MB, FILEGROWTH = 64MB);
ALTER DATABASE [tempdb] MODIFY FILE (NAME = N'temp4',   SIZE = 512MB, FILEGROWTH = 64MB);
-- Eklediğiniz her veri dosyası için aynı SIZE / FILEGROWTH

5. Index bakımı: her gece her şeyi sıfırlamayın

Index’leri bir kitabın fihristi gibi düşünün. Zamanla dağılır; arama yavaşlar. Eski alışkanlık “her gece tüm fihristi baştan yaz” idi. Bu yöntem tabloları kilitler, Logo’yu mesai içinde durdurabilir ve aslında az bozulmuş index’leri de gereksiz yere yeniden kurar.

  • Az dağılmış (%5–30): Düzenleme (REORGANIZE) — genelde daha yumuşak, gündüz riski düşük.
  • Çok bozulmuş (%30 üzeri): Yeniden kurma (REBUILD) — mümkünse akşam / hafta sonu.
  • İstatistikleri unutmayın: Index’ten sonra EXEC sp_updatestats çalıştırın. “Bakım yaptık hâlâ yavaş” şikâyetinin önemli kısmı güncel olmayan istatistikten gelir.

Hangi tabloda ne kadar dağınıklık var görmek için (veritabanı adını kendinizinkiyle değiştirin):

SQL
USE [LogoDB]; -- kendi veritabanı adınız
GO
SELECT
    OBJECT_SCHEMA_NAME(ips.object_id) AS schema_name,
    OBJECT_NAME(ips.object_id) AS table_name,
    i.name AS index_name,
    ips.avg_fragmentation_in_percent,
    ips.page_count
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, N'LIMITED') AS ips
INNER JOIN sys.indexes AS i
    ON ips.object_id = i.object_id AND ips.index_id = i.index_id
WHERE ips.database_id = DB_ID()
  AND ips.page_count > 1000
  AND ips.avg_fragmentation_in_percent > 5
  AND i.name IS NOT NULL
ORDER BY ips.avg_fragmentation_in_percent DESC;

Listeye göre karar verin; çok küçük index’leri abartılı yeniden kurmayın. Bu işi elle her gece yapmak yerine zamanlanmış bir bakım işi kurmak daha güvenlidir — kurulumunu sizin için de yapabiliriz.

Kısaca

  • Bellek tavanı: SQL’e üst sınır koyun; Windows ve Logo’ya yer bırakın.
  • Paralellik eşiği 30–50: Küçük işler için tüm işlemciyi bölmeyin.
  • Tek seferlik sorgular: Belleği şişirmemeleri için ilgili seçeneği açın.
  • TempDB: Birkaç eşit dosya, sabit MB büyüme, mümkünse ayrı disk.
  • Index: Dağınıklığa göre düzenle veya yeniden kur; istatistiği unutmayın.

Yeni sunucu almadan önce bu beş noktaya bakmak; Logo’nun açılışını, kayıt hızını ve rapor sürelerini birçok firmada belirgin şekilde iyileştirir. Kendi sunucunuzda hangi değerlerin doğru olduğunu birlikte netleştirmek isterseniz yazının sonundaki formdan bize ulaşmanız yeterli.