Microsoft hesabıyla oturum açın
Oturum açın veya hesap oluşturun.
Merhaba,
Farklı bir hesap seçin.
Birden çok hesabınız var
Oturum açmak istediğiniz hesabı seçin.

Özet

Bu makalede, Microsoft SQL Server'da tempdb veritabanını küçültmek için kullanabileceğiniz çeşitli yöntemler açıklanmaktadır. Bu makalede açıklanan yöntemleri kullanarak tempdb veritabanını küçültmeden önce lütfen aşağıdakiler hakkında bilgi sahibi olun:

  • tempdb veritabanının boyutu her yeniden başlatma işleminden sonra yapılandırılmış en son boyuta (başka bir deyişle varsayılan boyuta veya alter database kullanılarak ayarlanan en son boyuta) sıfırlanır. Dolayısıyla, farklı değerler kullanmanız veya hemen ara vermeniz gerekmiyorsa bu makalede yer alan prosedürlerin hiçbirini kullanmanız gerekmez. Boyutu küçültmek için bir sonraki SQL Server yeniden başlatma işlemini bekleyebilirsiniz. Daha büyük tempdb veritabanı boyutları SQL Server performansını olumsuz etkilemez.

  • SQL Server 2005 ve sonraki sürümlerde, tempdb veritabanına uygulanan küçültme işlemi bir kullanıcı veritabanındaki küçültme işleminden çok farklı değildir. Aradaki tek fark, SQL Server örneğinde yapılan her yeniden başlatma işleminden sonra tempdb veritabanının yapılandırılmış boyuta sıfırlanmasıdır.

  • tempdb veritabanındaki işlem devam ederken tempdb’de shrink yöntemini güvenli bir şekilde çalıştırabilirsiniz. Ancak engelleme ve kilitlenme gibi shrink yönteminin tamamlanmasını önleyen diğer hatalarla karşılaşabilirsiniz. Dolayısıyla, tempdb veritabanını küçültme işleminin başarılı olacağından emin olmak için bu işlemi sunucu tek kullanıcı modunda çalışırken veya tüm tempdb işlemleri durdurulduğunda yapmanızı öneriyoruz.

Tempdb bilgileri

tempdb veritabanı geçici bir çalışma alanıdır. SQL Server tempdb veritabanını birçok işlemi gerçekleştirmek için kullanır. Aşağıda bu işlemlerden bazıları belirtilmiştir:

  • Açıkça oluşturulmuş geçici tabloların saklanması

  • Sorgu işleme ve sıralama esnasında oluşturulan ara sonuçların bulunduğu iş tabloları

  • Gerçekleştirilmiş statik imleçler

  • Anlık görüntü yalıtım düzeyi veya kaydedilen okuma anlık görüntü yalıtım düzeyi kullanılıyorsa, sürüm kayıtlarının saklanması

SQL Server, tempdb işlem günlüğünde, veritabanının kurtarılması esnasında işlemlerin yeniden yapılması için değil yalnızca bir işleme geri dönebilmek için yeterli olacak bilgiyi kaydeder. Bu özellik, tempdb veritabanındaki INSERT deyimlerinin performansının artmasını sağlar. Ayrıca SQL Server yeniden başlatıldığında tempdb veritabanı da yeniden oluşturulduğu için, herhangi bir işlemi yeniden yapmak istediğinizde bilgileri kaydetmeniz gerekmez. Bu sayede ileri veya geri alınacak herhangi bir işlem olmaz. SQL Server başlatıldığında, model veritabanının bir kopyası kullanılarak tempdb yeniden oluşturulur ve yapılandırılmış en son boyutuna sıfırlanır. Yapılandırılmış boyut, MODIFY FILE seçeneğinin veya DBCC SHRINKFILE ya da DBCC SHRINKDATABASE deyimlerinin kullanıldığı ALTER DATABASE gibi bir dosya boyutu değiştirme işlemi ile ayarlanan ve açıkça belirtilen en son boyuttur.

Varsayılan olarak, tempdb veritabanı gerektiğinde otomatik olarak büyüyecek şekilde yapılandırılmıştır. Dolayısıyla, bu veritabanı beklenmedik şekilde zamanla istenen boyutu aşabilir. SQL Server’ın yeniden başlatılması tempdb veritabanının boyutunu yapılandırılmış en son boyuta gelecek şekilde sıfırlamak için yeterlidir.

SQL Server 2005 ve sonraki sürümlerde, tempdb veritabanının boyutunu değiştirmek için aşağıdaki yöntemlerden herhangi birini kullanabilirsiniz.

Yöntem

Yeniden başlatma gerekiyor mu?

Daha fazla bilgi

ALTER DATABASE

Evet

Varsayılan tempdb dosyalarının (tempdev ve templog) boyutunu tam olarak kontrol etmenizi sağlar.

DBCC SHRINKDATABASE

Hayır

Veritabanı düzeyinde çalışır.

DBCC SHRINKFILE

Hayır

Dosyaları ayrı ayrı küçültmenizi sağlar.

SQL Server Management Studio

Hayır

Bu, temel olarak veritabanı dosyalarını GUI aracılığıyla küçültmenin bir yoludur.


Not SQL Server 2005’te bulunan SQL Server Management Studio, küçültme işleminden sonra tempdb dosyalarının doğru boyutunu göstermez. "Currently allocated space" değeri her zaman sys.master_files DMV’den alınır ve bu değer tempdb veritabanı için bir küçültme işlemi yapıldıktan sonra güncelleştirilmez. Küçültme işleminden sonra tempdb dosyalarının doğru boyutunu bulmak için SQL Server Management Studio’da aşağıdaki deyimi yürütün:

use tempdb
go






select (size*8) as FileSizeKB from sys.database_files

Burada ilk üç yöntem açıklanmaktadır.

Not SQL Server 2000 yüklemeleri için SQL Server Management Studio yerine Query Analyzer'ı kullanmanız gerekir. Ayrıca DBCC komutları nedeniyle veritabanını tek kullanıcı moduna ayarlamanız gerekir.

tempdb veritabanını yapılandırılan boyuttan daha küçük bir boyuta getirmek için aşağıda belirtilen üç yöntemi kullanabilirsiniz.

Yöntem 1: Transact-SQL komutlarını kullanma
Not Bu yöntemi kullanırken SQL Server’ı yeniden başlatmanız gerekir.

  1. SQL Server'ı durdurun.

  2. Bir komut isteminde örneği en az yapılandırma modunda başlatın. Bunu yapmak için şu adımları izleyin:

    1. Bir komut isteminde aşağıdaki klasöre gidin:

    2. Örnek, adlandırılmış bir SQL Server örneği ise aşağıdaki komutu çalıştırın:

      sqlservr.exe -s InstanceName -c -f Örnek, varsayılan SQL Server örneği ise aşağıdaki komutu çalıştırın:

      sqlservr -c -f Not -c ve -f parametreleri SQL Server’ın en az yapılandırma modunda başlatılmasını sağlar. Bu modda tempdb boyutu veri dosyası için 1 MB günlük dosyası için ise 0,5 MB’tır.

  3. Query Analyzer'ı kullanarak SQL Server’a bağlanın ve ardından aşağıda belirtilen Transact-SQL komutlarını çalıştırın:

       ALTER DATABASE tempdb MODIFY FILE
       (NAME = 'tempdev', SIZE = target_size_in_MB) 
       --Desired target size for the data file
    
       ALTER DATABASE tempdb MODIFY FILE
       (NAME = 'templog', SIZE = target_size_in_MB)
       --Desired target size for the log file
    
  4. SQL Server'ı durdurun. Bunu yapmak için Komut İstemi penceresinde Ctrl+C’ye basın, SQL Server’ı hizmet olarak yeniden başlatın ve ardından Tempdb.mdf ile Templog.ldf dosyalarının boyutunu doğrulayın.

Bu yöntemin getirdiği bir sınırlama, yalnızca varsayılan tempdb mantıksal dosyaları tempdev ve templog üzerinde çalışmasıdır. tempdb veritabanına daha fazla dosya eklenirse, SQL Server’ı bir hizmet olarak yeniden başlattıktan sonra dosyaları küçültebilirsiniz. Başlatma sırasında tüm tempdb dosyaları yeniden oluşturulur. Ancak boş olan bu dosyaları kaldırabilirsiniz. tempdb veritabanındaki ek dosyaları kaldırmak için REMOVE FILE seçeneği ile ALTER DATABASE komutunu kullanın.

Yöntem 2: DBCC SHRINKDATABASE komutunu kullanma
tempdb veritabanını küçültmek için DBCC SHRINKDATABASE komutunu kullanın. DBCC SHRINKDATABASE, target_percent parametresini alır. Bu, veritabanı küçüldükten sonra veritabanı dosyasında kalan istenen boş alan yüzdesidir. DBCC SHRINKDATABASE komutunu kullanırsanız, SQL Server’ı yeniden başlatmanız gerekebilir.

  1. sp_spaceused saklı yordamını kullanarak tempdb veritabanında o anda kullanılan alanı belirleyin. Ardından DBCC SHRINKDATABASE komutunun bir parametresi olarak kullanım için kalan boş alan yüzdesini hesaplayın. Bu hesaplama istenen veritabanı boyutuna göre yapılır.

    Not Bazı durumlarda, kullanılan alanı yeniden hesaplamak ve güncel bir rapor almak için sp_spaceused @updateusage=true saklı yordamını yürütmeniz gerekebilir. sp_spaceused saklı yordamı hakkında daha fazla bilgi edinmek için SQL Server Çevrimiçi Kitapları’na bakın.


    Aşağıdaki örneği inceleyin:

    tempdb veritabanında iki dosya bulunduğunu varsayın: 100 MB boyutundaki birincil veri dosyası (Tempdb.mdf) ve 30 MB boyutundaki günlük dosyası (Tempdb.ldf). sp_spaceused saklı yordamının, birincil veri dosyasında 60 MB veri bulunduğunu bildirdiğini varsayın. Ayrıca birincil veri dosyasını 80 MB olarak küçültmek istediğinizi varsayın. Küçültme işleminden sonra kalacak istenen boş alan yüzdesini hesaplayın: 80 MB - 60 MB = 20 MB. Şimdi 20 MB’ı 80 MB’a bölün = yüzde 25, işte bu target_percent değerinizdir. İşlem günlüğü dosyası da bu şekilde küçültülür, yani veritabanı küçültüldükten sonra yüzde 25’lik veya 20 MB’lık boş alan kalır.

  2. Query Analyzer'ı kullanarak SQL Server’a bağlanın ve ardından aşağıda belirtilen Transact-SQL komutlarını çalıştırın:

       dbcc shrinkdatabase (tempdb, 'target percent') 
       -- This command shrinks the tempdb database
    

tempdb veritabanında DBCC SHRINKDATABASE komutunun kullanılmasına yönelik sınırlamalar getirilmiştir. Veri ve günlük dosyalarının hedef boyutu, veritabanı oluşturulurken belirlenen boyuttan veya MODIFY FILE seçeneğini ya da komutu kullanan ALTER DATABASE gibi bir dosya boyutu değiştirme işlemiyle açıkça ayarlanmış en son boyuttan daha küçük olamaz. BCC SHRINKDATABASE komutunun getirdiği bir sınırlama da, target_percentage parametresinin ve o an kullanılan alana bağımlılığının hesaplanmasıdır.

Yöntem 3: DBCC SHRINKFILE komutunu kullanma
Ayrı ayrı tempdb dosyalarını küçültmek için DBCC SHRINKFILE komutunu kullanın. DBCC SHRINKFILE komutu, DBCC SHRINKDATABASE komutuna göre daha fazla esneklik sunar, bunun nedeni bu komutun aynı veritabanında bulunan diğer dosyaları etkilemeden tek bir veritabanı dosyasında kullanılabilmesidir. DBCC SHRINKFILE, target size parametresini alır. Bu, veritabanı dosyası için istenen son boyuttur.

  1. Birincil veri dosyası (tempdb.mdf), günlük dosyası (templog.ldf) ve tempdb veritabanına eklenen ilave dosyalar için istenen boyutu belirleyin. Dosyalarda kullanılan alanın en fazla istenen hedef boyut kadar olduğundan emin olun.

  2. Query Analyzer'ı kullanarak SQL Server’a bağlanın ve küçültmek istediğiniz belirli veritabanı dosyaları için aşağıda belirtilen Transact-SQL komutlarını çalıştırın:

       use tempdb
       go
    
       dbcc shrinkfile (tempdev, 'target size in MB')
       go
       -- this command shrinks the primary data file
    
       dbcc shrinkfile (templog, 'target size in MB')
       go
       -- this command shrinks the log file, examine the last paragraph.
    

DBCC SHRINKFILE komutunun bir avantajı da bir dosyanın boyutunu orijinal boyutundan daha küçük bir hale getirebilmesidir. Herhangi bir veri veya günlük dosyasında DBCC SHRINKFILE komutunu kullanabilirsiniz. DBCC SHRINKFILE komutunun getirdiği bir sınırlama, veritabanının boyutunu model veritabanının boyutundan daha küçük hale getirememenizdir.

Küçültme işlemi yapıldığında alınan 2501 ve 8909 numaralı hatalar

tempdb veritabanı kullanılıyorsa ve DBCC SHRINKDATABASE veya DBCC SHRINKFILE komutunu kullanarak veritabanını küçültmeye çalışırsanız, kullandığınız SQL Server sürümüne bağlı olarak aşağıdakine benzer iletiler alabilirsiniz:

SQL Server 2005 ve sonraki sürümler

Server: Msg 8909, Level 16, State 1, Line 1 Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page ID (6:8040) contains an incorrect page ID in its page header. The PageId in the page header = (0:0).


SQL Server 2000

Server: Msg 2501, Level 16, State 1, Line 1 Could not find table named '1525580473'. Check sysobjects.

Server: Msg 8909, Level 16, State 1, Line 0 Table Corrupt: Object ID 1, index ID 0, page ID %S_PGID. The PageId in the page header = %S_PGID.

Notlar

  • Bu hatalar, tempdb veritabanının gerçekten bozuk olduğunu göstermez. Ancak 8909 numaralı hata gibi fiziksel veri bozulması hatalarının, aralarında G/Ç alt sistem sorunlarının da bulunduğu diğer nedenlerden kaynaklanabileceğini de unutmayın. Dolayısıyla hata, küçültme işlemi dışında meydana gelirse daha fazla inceleme yapmanız gerekir.

  • SQL Server 2005 ve sonraki sürümlerde, uygulama veya küçültme işlemini yürüten kullanıcı 8909 iletisini alsa da, küçültme işlemi yapılabilir.

  • SQL Server 2000 ve önceki sürümlerde ise bu hatalar küçültme işleminin başarısız olmasına neden olur. Dolayısıyla tempdb veritabanını küçültmek için tempdb veritabanını yeniden oluşturmak üzere SQL Server’ı yeniden başlatmanız gerekir.

Başvurular

Veritabanını Küçültme

Daha fazla yardıma mı ihtiyacınız var?

Yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Microsoft Insider 'a katılın

Bu bilgi yararlı oldu mu?

Dil kalitesinden ne kadar memnunsunuz?
Deneyiminizi ne etkiledi?

Geri bildiriminiz için teşekkürler!

×