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.
boyutunu tempdbdeğ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ı zaman içinde beklenmedik şekilde 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 veritabanının tempdb bir kopyasını kullanarak yeniden oluşturulur model ve son yapılandırılan boyutuna sıfırlanırtempdb. Yapılandırılan boyut, ALTER DATABASE seçeneğiyle veya MODIFY FILE, DBCC SHRINKFILE ya da DBCC SHRINKDATABASE ifadeleriyle bir dosya boyutunu değiştirme işlemi kullanarak ayarladığınız son açık boyuttur. Bu nedenle, farklı değerler kullanmanız gerekmediği veya büyük tempdb bir veritabanını hemen çözümlemek istemediğiniz 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. Küçültme işleminin tempdb başarılı olduğundan emin olmak için, sunucu tek kullanıcı modundayken veya tüm tempdb etkinlikleri durdurduğunuzda bu işlemi gerçekleştirin.
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 varsayılan tempdb mantıksal dosyalarda tempdev ve templogüzerinde çalışır. öğesine tempdbdaha fazla dosya eklerseniz, 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. Ekstra dosyaları tempdb'den kaldırmak için REMOVE FILE seçeneğiyle ALTER DATABASE komutunu kullanın.
Bu yöntem SQL Server'ı yeniden başlatmanızı gerektirir.
Not
Sqlcmd, SQL Server Management Studio (SSMS) veya Visual Studio Code için MSSQL uzantısı gibi tanıdık herhangi bir SQL Server istemci aracını kullanarak sql Server örneğine bağlanabilirsiniz.
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. istediğiniz boyutu
<target_size_in_MB>yerine koyun: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 istemi penceresinde
Ctrl+Ctuşuna basın, SQL Server'ı bir hizmet olarak yeniden başlatın ve ardındantempdb.mdfvetemplog.ldfdosyalarının boyutunu denetleyin.
DBCC SHRINKDATABASE komutunu kullanma
DBCC SHRINKDATABASE parametresini target_percent alır. Bu parametre, veritabanı daraltıldıktan sonra veritabanı dosyasında bırakmak istediğiniz boş alan yüzdesini ayarlar. kullanıyorsanız DBCC SHRINKDATABASESQL Server'ı yeniden başlatmanız gerekebilir.
Saklı yordamı kullanarak
sp_spaceusedtarafındantempdbiçin şu anda kullanılan alanı denetleyin. Ardından parametresi olarakDBCC SHRINKDATABASEkullanılacak 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 komutunu çalıştırmanız
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 = yüzde 25'e bölün ve bu değer sizintarget_percentolur. İş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.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 komutu tempdb üzerinde kullanıldığında sınırlamalar vardır. Veri ve günlük dosyalarının hedef boyutunu, veritabanı oluşturulurken belirtilen boyuttan küçük olacak şekilde ayarlayamazsınız. Ayrıca, bir dosya boyutu değiştirme işlemi olarak ALTER DATABASE ve MODIFY FILE seçeneklerini kullanarak açıkça belirlemiş olduğunuz son boyuttan daha küçük bir boyut ayarlayamazsınız. Başka bir sınırlama, target_percentage parametresinin hesaplanması ve bu hesaplamanın kullanılan mevcut alana olan bağımlılığıdır.
DBCC SHRINKFILE komutunu kullanma
DBCC SHRINKFILE Tek tek tempdb dosyaları küçültmek için 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 parametresini target_size alır. Bu parametre, veritabanı dosyası için istenen son boyutu ayarlar.
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, Visual Studio Code veya sqlcmd ile SQL Server'a bağlanın. Ardından 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
Bunun bir avantajı DBCC SHRINKFILE , dosyanın boyutunu özgün boyutundan daha küçük bir boyuta indirgeyebilmektir. Veri veya günlük dosyalarından herhangi birinde DBCC SHRINKFILE çalıştırabilirsiniz. Veritabanını model veritabanının boyutundan küçük yapamazsınız.
Küçültme işlemlerini çalıştırdığınızda hata 8909
Eğer tempdb kullanımdaysa ve DBCC SHRINKDATABASE veya DBCC SHRINKFILE komutlarını kullanarak küçültmeye çalışırsanız, aşağıdaki çıkışa benzer iletiler alabilirsiniz. Tam ileti, kullandığınız SQL Server sürümüne bağlıdır:
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 KÜÇÜLTME VERITABANI (Transact-SQL)
- DBCC KÜÇÜLTME DOSYASI (Transact-SQL)
- Veritabanından Veri veya Günlük Dosyalarını Silme
- Dosyayı küçültme