Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Yönetilen Örneği
Bu makalede, SQL Server'da tempdb veritabanını küçültmek için kullanabileceğiniz çeşitli yöntemler ele alınmaktadır.
tempdbboyutunu değiştirmek için aşağıdaki yöntemlerden herhangi birini kullanabilirsiniz. İlk üç seçenek bu makalede açıklanmıştır. SQL Server Management Studio'yu (SSMS) kullanmak istiyorsanız, Veritabanını daraltiçindeki yönergeleri izleyin.
| Yöntem | Yeniden başlatma gerekiyor mu? | Daha fazla bilgi |
|---|---|---|
ALTER DATABASE |
Evet | Varsayılan tempdb dosyalarının (tempdev ve templog) boyutu üzerinde tam denetim sağlar. |
DBCC SHRINKDATABASE |
Hayır | Veritabanı düzeyinde çalışır. |
DBCC SHRINKFILE |
Hayır | Tek tek dosyaları küçültmenizi sağlar. |
| SQL Server Management Studio | Hayır | Grafik kullanıcı arabirimi aracılığıyla veritabanı dosyalarını küçültün. |
Açıklamalar
Varsayılan olarak, tempdb veritabanı gerektiğinde otomatik olarak büyüyecek şekilde yapılandırılır. Bu nedenle, bu veritabanı beklenmedik bir şekilde zaman içinde istenen boyuttan daha büyük bir boyuta büyüyebilir. Daha büyük tempdb veritabanı boyutları SQL Server'ın performansını olumsuz etkilemez.
SQL Server başlatıldığında, tempdbmodel veritabanının bir kopyası kullanılarak yeniden oluşturulur ve tempdb son yapılandırılan boyutuna sıfırlanır. Yapılandırılan boyut, ALTER DATABASE seçeneğini veya MODIFY FILE ya da DBCC SHRINKFILE deyimlerini kullanan DBCC SHRINKDATABASE gibi bir dosya boyutu değiştirme işlemi kullanılarak ayarlanan son açık boyutdur. Bu nedenle, farklı değerler kullanmanız veya büyük bir tempdb veritabanına anında çözüm almanız gerekmediği sürece, boyutun azalması için SQL Server hizmetinin bir sonraki yeniden başlatılmasını bekleyebilirsiniz.
tempdb etkinliği devam ederken tempdb'ı küçültebilirsiniz. Ancak, engelleme, kilitlenmeler vb. gibi küçültmenin tamamlanmasını engelleyebilecek başka hatalarla karşılaşabilirsiniz. Bu nedenle, bir küçültme işleminin tempdb başarılı olduğundan emin olmak için, sunucu tek kullanıcı modundayken veya tüm tempdb etkinliği durdurduğunuzda bunu yapmanızı öneririz.
SQL Server, bir işlemi geri almak için tempdb işlem günlüğüne yalnızca yeterli bilgiyi kaydeder, ancak veritabanı kurtarma sırasında işlemleri yinelemez. Bu özellik, INSERTiçindeki tempdb deyimlerinin performansını artırır. Ayrıca, SQL Server'ı her yeniden başlattığınızda tempdb yeniden oluşturulduğundan, herhangi bir işlemi yeniden gerçekleştirmek için bilgileri kaydetmenize gerek yoktur. Bu nedenle, ileri taşımak veya geri almak için hiçbir işlem yapılmamıştır.
tempdbyönetimi ve izlenmesi hakkında daha fazla bilgi için bkz. Kapasite planlama ve tempdb kullanımı izleme.
ALTER DATABASE komutunu kullanma
Not
Bu komut yalnızca tempdb ve tempdevvarsayılan templog mantıksal dosyaları üzerinde çalışır.
tempdbdaha fazla dosya eklenirse, SQL Server'ı hizmet olarak yeniden başlattıktan sonra bunları küçültebilirsiniz. Tüm tempdb dosyaları başlatma sırasında yeniden oluşturulur. Ancak, bu dosyalar boş ve kaldırılabilir.
tempdb'daki ek dosyaları kaldırmak için ALTER DATABASE seçeneğiyle REMOVE FILE komutunu kullanın.
Bu yöntem SQL Server'ı yeniden başlatmanızı gerektirir.
SQL Server'ın durdurulması.
Komut isteminde örneği en düşük yapılandırma modunda başlatın. Bunu yapmak için şu adımları izleyin:
Komut isteminde SQL Server'ın yüklü olduğu klasöre geçin (aşağıdaki örnekte
<VersionNumber>ve<InstanceName>değiştirin):cd C:\Program Files\Microsoft SQL Server\MSSQL<VersionNumber>.<InstanceName>\MSSQL\BinnÖrnek SQL Server'ın adlandırılmış bir örneğiyse aşağıdaki komutu çalıştırın (aşağıdaki örnekteki
<InstanceName>değiştirin):sqlservr.exe -s <InstanceName> -c -f -mSQLCMDÖrnek SQL Server'ın varsayılan örneğiyse aşağıdaki komutu çalıştırın:
sqlservr -c -f -mSQLCMDNot
-cve-fparametreleri, SQL Server'ın veri dosyası içintempdbboyutu 1 MB ve günlük dosyası için 0,5 MB olan en düşük yapılandırma modunda başlamasına neden olur.-mSQLCMDparametresi, sqlcmd dışındaki tüm uygulamaların tek kullanıcılı bağlantıyı devralmasını engeller.
sqlcmdile SQL Server'a bağlanın ve ardından aşağıdaki Transact-SQL komutlarını çalıştırın.
<target_size_in_MB>istediğiniz boyutla değiştirin:ALTER DATABASE tempdb MODIFY FILE (NAME = 'tempdev', SIZE = <target_size_in_MB>); ALTER DATABASE tempdb MODIFY FILE (NAME = 'templog', SIZE = <target_size_in_MB>);SQL Server'ın durdurulması. Bunu yapmak için komut isteminde
Ctrl+Ctuşuna basın, SQL Server'ı bir hizmet olarak yeniden başlatın vetempdb.mdfvetemplog.ldfdosyalarının boyutunu doğrulayın.
DBCC SHRINKDATABASE komutunu kullanma
DBCC SHRINKDATABASE
target_percentparametresini alır. Bu, veritabanı küçültüldikten sonra veritabanı dosyasında istenen boş alan yüzdesidir.
DBCC SHRINKDATABASEkullanıyorsanız SQL Server'ı yeniden başlatmanız gerekebilir.
tempdbsaklı yordamını kullanaraksp_spaceused'da şu anda kullanılan alanı belirleyin. Ardından,DBCC SHRINKDATABASEparametresi olarak kullanılmak üzere kalan boş alan yüzdesini hesaplayın. Bu hesaplama, istenen veritabanı boyutunu temel alır.Not
Bazı durumlarda, kullanılan alanı yeniden hesaplamak ve güncelleştirilmiş bir rapor almak için yürütmeniz
sp_spaceused @updateusage = truegerekebilir. Daha fazla bilgi için bkz. sp_spaceused.Aşağıdaki örneği göz önünde bulundurun:
tempdbiki dosyası olduğunu varsayalım: 1.024 MB olan birincil veri dosyası (tempdb.mdf) ve 360 MB olan günlük dosyası (tempdb.ldf).sp_spaceusedbirincil veri dosyasının 600 MB veri içerdiğini bildirdiğini varsayalım. Ayrıca, birincil veri dosyasını 800 MB'a küçültmek istediğinizi varsayalım. Küçültmeden sonra kalan istenen boş alan yüzdesini hesaplayın: 800 MB - 600 MB = 200 MB. Şimdi, 200 MB'ı 800 MB'ye bölün = yüzde 25 ve bu sizintarget_percent. İşlem günlüğü dosyası buna göre küçülür ve veritabanı küçültükten sonra yüzde 25 veya 200 MB boş alan bırakır.SSMS, Azure Data Studio veya sqlcmdile SQL Server'a bağlanın ve aşağıdaki Transact-SQL komutunu çalıştırın.
<target_percent>değerini istenen yüzdeyle değiştirin:DBCC SHRINKDATABASE (tempdb, '<target_percent>');
DBCC SHRINKDATABASEüzerinde tempdb komutuyla ilgili sınırlamalar vardır. Veri ve günlük dosyalarının hedef boyutu, veritabanı oluşturulduğunda belirtilen boyuttan küçük veya ALTER DATABASE seçeneğini kullanan MODIFY FILE gibi dosya boyutu değiştirme işlemi kullanılarak açıkça ayarlanan son boyuttan küçük olamaz.
DBCC SHRINKDATABASE'nin bir diğer sınırlaması, target_percentage parametresinin hesaplanması ve kullanımda olan geçerli alana bağımlılığıdır.
DBCC SHRINKFILE komutunu kullanma
tek tek DBCC SHRINKFILE dosyalarını küçültmek için tempdb komutunu kullanın.
DBCC SHRINKFILE, aynı veritabanına ait diğer dosyaları etkilemeden tek bir veritabanı dosyasında kullanabileceğiniz için DBCC SHRINKDATABASE daha fazla esneklik sağlar.
DBCC SHRINKFILE
target_size parametresini alır. Bu, veritabanı dosyası için istenen son boyutdur.
birincil veri dosyası (
tempdb.mdf), günlük dosyası (templog.ldf) vetempdbeklenen ek dosyalar için istenen boyutu belirleyin. Dosyalarda kullanılan alanın istenen hedef boyutuna eşit veya daha küçük olduğundan emin olun.SSMS, Azure Data Studio veya sqlcmdile SQL Server'a bağlanın ve küçültmek istediğiniz belirli veritabanı dosyaları için aşağıdaki Transact-SQL komutlarını çalıştırın.
<target_size_in_MB>istediğiniz boyutla değiştirin:USE tempdb; GO -- This command shrinks the primary data file DBCC SHRINKFILE (tempdev, '<target_size_in_MB>'); GO -- This command shrinks the log file, examine the last paragraph. DBCC SHRINKFILE (templog, '<target_size_in_MB>'); GO
DBCC SHRINKFILE bir avantajı, dosyanın boyutunu özgün boyutundan daha küçük bir boyuta indirgeyebilmektir. Veri veya günlük dosyalarından herhangi birine DBCC SHRINKFILE ekleyebilirsiniz. Veritabanını model veritabanının boyutundan küçük yapamazsınız.
Küçültme işlemlerini çalıştırdığınızda hata 8909
tempdb kullanılıyorsa ve DBCC SHRINKDATABASE veya DBCC SHRINKFILE komutlarını kullanarak küçültmeye çalışırsanız, kullandığınız SQL Server sürümüne bağlı olarak aşağıdakine benzer iletiler alabilirsiniz:
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).
Bu hata, tempdb'de gerçek bir bozulma olduğunu göstermez. Ancak, fiziksel veri bozulması hatalarının 8909 hatası gibi başka nedenleri olabilir ve bu nedenler G/Ç alt sistemi sorunlarını içerebilir. Bu nedenle, hata küçültme işlemleri dışında oluşursa, daha fazla araştırmanız gerekir.
Uygulamaya veya küçültme işlemini yürüten kullanıcıya bir 8909 iletisi döndürülse de, küçültme işlemleri başarısız olmaz.
İlgili içerik
- SQL Server'de otomatik büyütme ve otomatik küçültme ayarlarıyla ilgili dikkat edilmesi gerekenler
- Veritabanı dosyaları ve dosya grupları
- sys.databases (Transact-SQL)
- sys.database_files (Transact-SQL)
- Veritabanını küçültme
- DBCC SHRINKDATABASE (Transact-SQL)
- DBCC SHRINKFILE (Transact-SQL)
- Veritabanından Veri veya Günlük Dosyalarını Silme
- Dosyayı küçültme