WEB SİTESİ SAHİBİ OLMAK

1 Giriş yapın veya hesap oluşturun.
2 Siparişini gözden geçirin.
3 Tüm hizmetlerinizi satın alın.

Site kurmak için (0216) 472 65 64 nolu telefondan danışmanımızla hemen iletişime geçebilirsiniz. Teşekkür ederiz!

2 saate kadar web sitesi güncelleme ve email kurulum desteği 3.748 TL + KDV olarak güncellenmiştir.

ÇALIŞMA SAATLERİ

Pazartesi-Cuma 9:30 - 16:30
Cumartesi - 9:30 - 11:00
Sadece randevu ile pazar günleri!

SQL Server Express Yavaşlığı Şehir Efsanesi mi?

SQL Server Management Studio (SSMS) Veritabanı Listesi Neden Yavaş Açılır? Kesin Çözüm!

SQL Server veritabanı yöneticilerinin ve yazılım geliştiricilerin sıkça karşılaştığı en can sıkıcı sorunlardan biri, SQL Server Management Studio (SSMS) üzerinden veritabanı listesini genişletmeye çalışırken yaşanan aşırı yavaşlıktır.

Özellikle sunucunuzda sadece 50-80 adet veritabanı varken bile “Databases (Expanding...)” uyarısında dakikalarca beklemek, geliştirme ve yönetim süreçlerini adeta kilitler. Peki, bu donma ve yavaşlığın gerçek nedeni nedir?

Bu yazımızda, forumlarda ve makalelerde dolaşan şehir efsanelerini bir kenara bırakıyor; sorunun kök nedenini ve tek bir T-SQL sorgusuyla uygulanabilecek kesin çözümünü paylaşıyoruz.

Yaşanan Problem: Yüzlerce Veritabanı Olmamasına Rağmen SSMS Neden Kasar?

SQL Server kurulumunun ardından bir süre sorunsuz çalışan sisteminizde, SSMS üzerindeki Databases düğümüne tıkladığınızda sol panel 4-5 dakika boyunca donabilir.

Bu durumla karşılaşıldığında genellikle internetteki yönlendirmeler şu şekildedir:

  • "RAM arızalı veya yetersiz."

  • "Disk (HDD/SSD) bozuk veya I/O hızı düştü."

  • "SQL Server Express kullanıyorsunuz, Standard veya Enterprise sürüme geçmelisiniz."

  • "SQL Server kurulumu bozulmuş, Repair yapmalısınız."

Ancak sistem kaynaklarını (Resource Monitor) izlediğinizde diskin ve RAM'in normal çalıştığını görürsünüz. Dahası, master..sysdatabases tablosuna bir T-SQL sorgusu attığınızda listelemenin milisaniyeler içinde geldiğini, sadece SSMS arayüzündeki görsel ağaç (treeview) yapısının kilitlendiğini fark edersiniz.

Anlaşılacağı üzere bu durum ne RAM veya disk arızasıdır ne de SQL Server Express sürümünün bir kısıtlamasıdır. Sorun tamamen veritabanı yapılandırma ayarlarından kaynaklanmaktadır.

Sorunun Kök Nedeni: AUTO_CLOSE Özelliği

Management Studio (SSMS), sol taraftaki Databases listesini oluştururken arka planda veritabanlarının durumlarını ve metadata bilgilerini okumaya çalışır.

Eğer sunucunuzdaki bazı veritabanlarında AUTO_CLOSE seçeneği ON (Açık) olarak kalmışsa, SQL Server her bir veritabanının durumunu sorgularken ilgili veritabanını önce diskten belleğe yükleyip başlatmak zorunda kalır. Sorgu bittiğinde ise veritabanı tekrar kapanır.

Veritabanı listenizde AUTO_CLOSE ayarı açık birkaç veritabanı bile olsa, SSMS listenin tamamını derlerken her biri için tek tek başlatma süreci bekleyeceğinden devasa bir gecikme (latency) meydana gelir.

Kesin Çözüm: Tüm Veritabanlarında AUTO_CLOSE Ayarını Kapatmak

Bu sorunu tek tek veritabanı özelliklerine girerek düzeltmek yerine, aşağıdaki T-SQL scriptini kullanarak sunucunuzdaki tüm veritabanları için AUTO_CLOSE özelliğini kapatabilir, recovery modelini optimize edebilir ve bellek birikintilerini temizleyebilirsiniz.

Uygulanacak T-SQL Scripti:

Aşağıdaki sorguyu SSMS üzerinde master veritabanında çalıştırarak tüm veritabanlarınızda toplu düzenleme yapabilirsiniz:

SQL
 
USE MASTER
GO

DECLARE
    @isql VARCHAR(2000),
    @dbname VARCHAR(64)

-- Sistem veritabanları dışındaki tüm veritabanları taranır
DECLARE c1 CURSOR FOR 
    SELECT name FROM master..sysdatabases 
    WHERE name NOT IN ('master','model','msdb','tempdb')

OPEN c1
FETCH NEXT FROM c1 INTO @dbname

WHILE @@fetch_status <> -1
BEGIN
    -- 1. AUTO_CLOSE özelliğini kapatıyoruz (Aşırı yavaşlığı çözen temel adım)
    SELECT @isql = 'ALTER DATABASE [@dbname] SET AUTO_CLOSE OFF'
    SELECT @isql = REPLACE(@isql, '@dbname', @dbname)
    PRINT @isql
    EXEC(@isql)

    -- 2. Log şişmelerini önlemek için Recovery Model'i Simple yapıyoruz
    SELECT @isql = 'ALTER DATABASE [@dbname] SET RECOVERY SIMPLE'
    SELECT @isql = REPLACE(@isql, '@dbname', @dbname)
    PRINT @isql
    EXEC(@isql)

    -- 3. Değişiklikleri diske yazıp bellek takibini rahatlatıyoruz
    SELECT @isql = 'USE [@dbname] CHECKPOINT'
    SELECT @isql = REPLACE(@isql, '@dbname', @dbname)
    PRINT @isql
    EXEC(@isql)

    FETCH NEXT FROM c1 INTO @dbname
END

CLOSE c1
DEALLOCATE c1
GO

İpucu: Script çalıştıktan sonra SSMS arayüzünde Databases sekmesine sağ tıklayıp Refresh (F5) yapmanız yeterlidir. Veritabanı listenizin anında ve takılmadan açıldığını göreceksiniz.

Güçlü Veritabanı ve Sunucu Performansı Marenova ile Mümkün

Veritabanı yönetimi yalnızca doğru sorguları yazmakla değil, doğru sunucu yapılandırması ve optimize edilmiş hosting altyapılarıyla bir bütündür. SQL Server projelerinizde yüksek disk I/O hızlarına, düşük erişim sürelerine ve maksimum performansa ihtiyaç duyuyorsanız, donanımsal ve yazılımsal olarak optimize edilmiş sunucu çözümlerimizden yararlanabilirsiniz.

Kesintisiz, yüksek hızlı ve güvenli veritabanı & web hosting altyapıları için Marenova uzman kadrosuyla hemen tanışın!

TOP