Ekinlikler
31 Mar 23 - 2 Nis 23
En büyük SQL, Fabric ve Power BI öğrenme etkinliği. 31 Mart – 2 Nisan. 400 ABD doları tasarruf etmek için FABINSIDER kodunu kullanın.
Bugün kaydolunBu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Geçerli olan veritabanındaki belirtilen veri veya günlük dosyası boyutunu küçültür. Dosyayı boşaltan ve veritabanının kaldırılmasına izin veren bir dosyadan aynı dosya grubundaki diğer dosyalara veri taşımak için bu dosyayı kullanabilirsiniz. Bir dosyayı oluşturma sırasında boyutunun altına küçülterek en düşük dosya boyutunu yeni değere sıfırlayabilirsiniz. DBCC SHRINKFILE'i yalnızca gerektiğinde kullanın.
Not
Küçültme işlemleri normal bir bakım işlemi olarak kabul edilmemelidir. Düzenli, yinelenen iş işlemleri nedeniyle büyüyen veri ve günlük dosyaları için küçültme işlemleri gerekmez.
Transact-SQL söz dizimi kuralları
DBCC SHRINKFILE
(
{ file_name | file_id }
{ [ , EMPTYFILE ]
| [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
}
)
[ WITH
{
[ WAIT_AT_LOW_PRIORITY
[ (
<wait_at_low_priority_option_list>
)]
]
[ , NO_INFOMSGS]
}
]
< wait_at_low_priority_option_list > ::=
<wait_at_low_priority_option>
| <wait_at_low_priority_option_list> , <wait_at_low_priority_option>
< wait_at_low_priority_option > ::=
ABORT_AFTER_WAIT = { SELF | BLOCKERS }
Küçültülecek dosyanın mantıksal adı.
Küçültülecek dosyanın kimlik numarası. Bir dosya kimliği almak için FILE_IDEX sistem işlevini kullanın veya geçerli veritabanındaki sys.database_files katalog görünümünü sorgulayın.
Dosyanın yeni megabayt boyutunu temsil eden bir tamsayı. Belirtilmezse veya 0 ise, DBCC SHRINKFILE
dosya oluşturma boyutuna düşer.
DBCC SHRINKFILE <target_size>
kullanarak boş bir dosyanın varsayılan boyutunu küçültebilirsiniz. Örneğin, 5 MB'lık bir dosya oluşturur ve sonra dosya boşken dosyayı 3 MB'a küçültürseniz, varsayılan dosya boyutu 3 MB olarak ayarlanır. Bu yalnızca hiç veri içermeyen boş dosyalar için geçerlidir.
Bu seçenek FILESTREAM dosya grubu kapsayıcıları için desteklenmez.
DBCC SHRINKFILE
, belirtilirse, dosyayı hedef boyutkadar daraltmaya çalışır. Boşaltılacak dosyanın alanındaki kullanılan sayfalar, dosyanın tutulan alanlarındaki boş alana taşınır. Örneğin, 10 MB veri dosyasıyla, DBCC SHRINKFILE
8
içeren bir işlemi, dosyanın son 2 MB içindeki tüm kullanılan sayfaları dosyanın ilk 8 MB'lık ayrılmamış sayfalarına taşır.
DBCC SHRINKFILE
, gerekli depolanan veri boyutunu geçen bir dosyayı küçültmez. Örneğin, 10 MB'lık bir veri dosyasının 7 MB'ı kullanılırsa, 6 DBCC SHRINKFILE
içeren bir deyimi dosyayı 6 MB'a değil yalnızca 7 MB'a küçültür.
Belirtilen dosyadaki tüm verileri aynı dosya grubundakidiğer dosyalara geçirir. Başka bir deyişle, EMPTYFILE
belirtilen bir dosyadaki verileri aynı dosya grubundaki diğer dosyalara geçirir.
EMPTYFILE
, bu dosya salt okunur olmasa da dosyaya yeni veri eklenmemesini sağlar. Dosyayı kaldırmak için ALTER DATABASE deyimini kullanabilirsiniz. Dosya boyutunu değiştirmek için ALTER DATABASE deyimini kullanırsanız, salt okunur bayrağı sıfırlanır ve veriler eklenebilir.
FILESTREAM dosya grubu kapsayıcıları için, FILESTREAM Çöp Toplayıcısı çalıştırılıp, ALTER DATABASE
tarafından başka bir kapsayıcıya kopyalanan tüm gereksiz dosya grubu kapsayıcı dosyalarını sildikten sonra, dosyayı kaldırmak için EMPTYFILE
kullanamazsınız. Daha fazla bilgi için bkz. sp_filestream_force_garbage_collection. FILESTREAM kapsayıcısını kaldırma hakkında bilgi için ALTER DATABASE Dosya ve Dosya Grubu Seçenekleri (Transact-SQL) ilgili bölüme bakın
EMPTYFILE
, Azure SQL Veritabanı veya Azure SQL Veritabanı Hiper Ölçek'te desteklenmez.
target_percentbelirterek veya belirtmeden, ayrılmış sayfaları bir veri dosyasının sonundan dosyanın önündeki ayrılmamış sayfalara taşır. Dosyanın sonundaki boş alan işletim sistemine döndürülmüyor ve dosyanın fiziksel boyutu değişmez. Bu nedenle, NOTRUNCATE
belirtilirse dosya küçülmeyecek gibi görünür.
NOTRUNCATE
yalnızca veri dosyaları için geçerlidir. Günlük dosyaları etkilenmez.
Bu seçenek FILESTREAM dosya grubu kapsayıcıları için desteklenmez.
Dosyanın sonundaki tüm boş alanı işletim sistemine bırakır, ancak dosya içinde herhangi bir sayfa hareketi gerçekleştirmez. Veri dosyası yalnızca son ayrılan ölçüde küçültüldü.
target_size, TRUNCATEONLY
ile belirtilirse yoksayılır.
TRUNCATEONLY
seçeneği günlükteki bilgileri taşımaz, ancak etkin olmayan VDF'leri günlük dosyasının sonundan kaldırır. Bu seçenek FILESTREAM dosya grubu kapsayıcıları için desteklenmez.
Tüm bilgilendirme iletilerini gizler.
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği
Düşük öncelikli bekleme özelliği kilit çekişmesini azaltır. Daha fazla bilgi için bkz. DBCC SHRINKDATABASEile ilgili eşzamanlılık sorunlarını anlama.
Bu özellik, çevrimiçi dizin işlemleri ile bazı farklılıklarlaWAIT_AT_LOW_PRIORITY özelliğine benzer.
için geçerlidir: SQL Server (SQL Server 2022 (16.x) ve üzeri) ve Azure SQL Veritabanı.
Bir küçültme komutu WAIT_AT_LOW_PRIORITY modunda yürütülürken, şema kararlılığı (Sch-S) kilitleri gerektiren yeni sorgular, küçültme işlemi beklemeyi durdurup yürütülmeye başlayana kadar bekleyen küçültme işlemi tarafından engellenmez. Küçültme işlemi, şema değiştirme kilidi (Sch-M) kilidi elde edebildiğinde yürütülür. WAIT_AT_LOW_PRIORITY modunda yeni bir küçültme işlemi, uzun süre çalışan bir sorgu nedeniyle kilit alamadığı durumda, bu küçültme işlemi varsayılan olarak 1 dakika sonra sonunda zaman aşımına uğrar ve sessizce sonlanır.
WAIT_AT_LOW_PRIORITY modunda yeni bir küçültme işlemi, uzun süre çalışan bir sorgu nedeniyle kilit alamazsa, küçültme işlemi varsayılan olarak 1 dakika sonra zaman aşımına uğrayacak ve sessizce sonlanacaktır. Bu durum, küçültme işlemi Sch-M kilidi alamazsa, Sch-S kilitleri tutan eşzamanlı sorgu veya sorgular nedeniyle oluşur. Zaman aşımı oluştuğunda, hata 49516 SQL Server hata günlüğünegönderilir, örneğin: Msg 49516, Level 16, State 1, Line 134 Shrink timeout waiting to acquire schema modify lock in WLP mode to process IAM pageID 1:2865 on database ID 5
. Küçültme işlemini WAIT_AT_LOW_PRIORITY
modunda yeniden deneyin.
için geçerlidir: SQL Server (SQL Server 2022 (16.x) ve üzeri) ve Azure SQL Veritabanı.
KENDİ
Hiçbir işlem yapmadan yürütülmekte olan dosya küçültme işleminden çıkın.
BLOKERLER
İşlemin devam edebilmesi için dosya küçültme işlemini engelleyen tüm kullanıcı işlemlerini sonlandırma. ENGELLEYICILER seçeneği, oturum açma işleminin HERHANGİ Bİr BAĞLANTIYI DEĞIŞTIRME iznine sahip olmasını gerektirir.
Aşağıdaki tabloda sonuç kümesi sütunları açıklanmaktadır.
Sütun adı | Açıklama |
---|---|
DbId |
Veritabanı Altyapısı'nın küçültmeye çalıştığı dosyanın veritabanı kimlik numarası. |
FileId |
Veritabanı Altyapısı'nın küçültmeye çalıştığı dosyanın dosya tanımlama numarası. |
CurrentSize |
Dosyanın şu anda kapsamakta olduğu 8 KB sayfa sayısı. |
MinimumSize |
Dosyanın kaplayabileceği en az 8 KB'lık sayfa sayısı. Bu sayı, bir dosyanın en küçük boyutuna veya başlangıçta oluşturulan boyutuna karşılık gelir. |
UsedPages |
Dosya tarafından şu anda kullanılan 8 KB'lık sayfa sayısı. |
EstimatedPages |
Veritabanı Altyapısı'nın dosyanın küçültülebileceğini tahmin edebileceği 8 KB sayfa sayısı. |
DBCC SHRINKFILE
geçerli veritabanının dosyaları için geçerlidir. Geçerli veritabanını değiştirme hakkında daha fazla bilgi için bkz. USE (Transact-SQL).
herhangi bir noktada DBCC SHRINKFILE
işlemleri durdurabilirsiniz ve tamamlanan tüm çalışmalar korunur.
EMPTYFILE
parametresini kullanır ve işlemi iptal ederseniz, ek verilerin eklenmesini önlemek için dosya işaretlenmez.
bir DBCC SHRINKFILE
işlemi başarısız olduğunda bir hata oluşur.
Diğer kullanıcılar, dosya küçültme sırasında veritabanında çalışabilir; veritabanının tek kullanıcılı modda olması gerekmez. Sistem veritabanlarını küçültmek için SQL Server örneğini tek kullanıcılı modda çalıştırmanız gerekmez.
WAIT_AT_LOW_PRIORITY ile belirtildiğinde, küçültme işleminin Sch-M kilit isteği, komutu yürütürken düşük öncelikli olarak 1 dakika bekler. İşlem süre boyunca engellenirse, belirtilen ABORT_AFTER_WAIT eylemi yürütülür.
Şunlar için geçerlidir: SQL Server, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Azure Synapse Analytics özel SQL havuzu
DBCC SHRINKDATABASE
ve DBCC SHRINKFILE
etkilenmez.Veritabanını küçültme ve küçültme dosyası komutları, özellikle dizinleri yeniden oluşturma gibi etkin bakımlarda veya meşgul OLTP ortamlarında eşzamanlılık sorunlarına yol açabilir. Uygulamanız veritabanı tablolarında sorgu yürüttüğünde, sorgular işlemlerini tamamlayana kadar bu sorgular bir şema kararlılık kilidi (Sch-S) alır ve korur. Normal kullanım sırasında alan kazanma girişiminde bulunurken, dizin ayırma eşlemesi (IAM) sayfalarını taşırken veya silerken şu anda şema değiştirme kilidi (Sch-M) gerektiren veritabanı daraltma ve küçültme işlemleri, kullanıcı sorguları için gereken Sch-S kilitlerini engeller. Sonuç olarak, uzun süre çalışan sorgular, sorgular tamamlanana kadar küçültme işlemini engeller. Başka bir deyişle, Sch-S kilidi gerektiren tüm yeni sorgular, bekleyen küçültme işleminin arkasında kuyruğa alınır ve engellenir, bu da eşzamanlılık sorununu daha da kötüleştirir. Bu, uygulama sorgusu performansını önemli ölçüde etkileyebilir ve ayrıca veritabanı dosyalarını küçültmek için gerekli bakımı tamamlarken zorluklara neden olur. SQL Server 2022'de (16.x) kullanıma sunulan düşük öncelikli küçültme bekleme özelliği, WAIT_AT_LOW_PRIORITY
modunda şema değiştirme kilidi alarak bu sorunu ele alır. Daha fazla bilgi için bkz. WAIT_AT_LOW_PRIORITYküçültme işlemleri.
Sch-S ve Sch-M kilitleri hakkında daha fazla bilgi için İşlem kilitleme ve satır sürüm oluşturma kılavuzu 'e bakın.
Günlük dosyaları için Veritabanı Altyapısı, günlüğün hedef boyutunun tamamını hesaplamak için target_size kullanır. Bu nedenle target_size, küçültme işleminden sonra günlüğün boş alanıdır. Ardından tüm günlüğün hedef boyutu her günlük dosyasının hedef boyutuna çevrilir.
DBCC SHRINKFILE
her fiziksel günlük dosyasını hedef boyutuna hemen küçültmeye çalışır. Ancak, mantıksal günlüğün bir bölümü sanal günlüklerde hedef boyutun ötesinde yer alırsa, Veritabanı Altyapısı mümkün olduğunca fazla alan boşaltıp bilgilendiren bir ileti gönderir. Mesaj, mantıksal günlüğün dosyanın sonundaki sanal günlüklerin dışına taşınması için gereken eylemleri açıklar. Eylemler gerçekleştirildikten sonra, kalan alanı boşaltmak için DBCC SHRINKFILE
kullanılabilir.
Günlük dosyası yalnızca sanal günlük dosyası sınırına küçültülebileceğinden, günlük dosyasını sanal günlük dosyasının boyutundan daha küçük bir boyuta küçültmek, kullanılmasa bile mümkün olmayabilir. Veritabanı Altyapısı, günlük dosyaları oluşturulduğunda veya genişletildiğinde sanal dosya günlüğü boyutunu dinamik olarak seçer.
Bir dosyayı küçültmeyi planlarken aşağıdaki bilgileri göz önünde bulundurun:
Küçültme işlemi, tabloyu kısaltma veya tabloyu silme işlemi gibi büyük miktarda kullanılmayan alan oluşturan bir işlemden sonra en etkilidir.
Çoğu veritabanı, normal günlük işlemler için kullanılabilir boş alan gerektirir. Bir veritabanı dosyasını tekrar tekrar küçültür ve veritabanı boyutunun yeniden büyüdüğünü fark ederseniz, bu normal işlemler için boş alanın gerekli olduğunu gösterir. Bu gibi durumlarda veritabanı dosyasının sürekli daraltılması boşa harcanan bir işlemdir. Veritabanı dosyasını büyütmek için gereken otomatik büyütme olayları performansı engeller.
Küçültme işlemi, veritabanındaki dizinlerin parçalanma durumunu korumaz ve genellikle parçalanmayı bir dereceye kadar artırır. Bu parçalanma, veritabanını tekrar tekrar küçültmemek için başka bir nedendir.
Aynı veritabanındaki birden çok dosyayı eşzamanlı olarak değil sıralı olarak daraltın. Sistem tablolarındaki ihtilaf engel oluşturabilir ve gecikmelere yol açabilir.
Bu bölümde, DBCC SHRINKFILE
komutu çalıştırılırken oluşabilecek sorunları tanılama ve düzeltme işlemleri açıklanmaktadır.
Hata içermeyen küçültme işleminden sonra dosya boyutu değişmezse, dosyada yeterli boş alan olduğunu doğrulamak için aşağıdakileri deneyin:
SELECT name
, size / 128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT) / 128.0 AS AvailableSpaceInMB
FROM sys.database_files;
Yeterli boş alan yoksa küçültme işlemi dosya boyutunu daha fazla küçültemez.
Genellikle küçülmemiş gibi görünen günlük dosyasıdır; genellikle normal işlem günlüğü yedeklemesi tarafından kesilmemiş bir günlük dosyasının sonucu olur. Günlüğün kesilmesi için işlem günlüğünü yedekleyin ve DBCC SHRINKFILE
işlemini yeniden çalıştırın. Anında kurtarma gerekmiyorsa, sade veritabanı kurtarma modelinigöz önünde bulundurun.
satır sürüm tabanlı bir yalıtım düzeyi altında çalışan bir işlem, küçültme operasyonlarını engelleyebilir. Örneğin, satır sürümleme tabanlı bir yalıtım düzeyinde çalışan büyük bir silme işlemi sırasında bir DBCC SHRINKDATABASE
işlemi çalıştırıldığında, küçültme işlemi, silme işlemi tamamlanmadan önce bekler. Bu engelleme gerçekleştiğinde, DBCC SHRINKFILE
ve DBCC SHRINKDATABASE
işlemleri SQL Server hata günlüğüne bir bilgi iletisi (SHRINKDATABASE
için 5202 ve SHRINKFILE
için 5203) yazdırır. Bu ileti ilk saatte beş dakikada bir ve ardından saatte bir günlüğe kaydedilir. Mesela:
DBCC SHRINKFILE for file ID 1 is waiting for the snapshot
transaction with timestamp 15 and other snapshot transactions linked to
timestamp 15 or with timestamps older than 109 to finish.
Bu ileti, zaman damgaları 109'dan eski olan anlık görüntü işlemlerinin (küçültme işleminin tamamlandığı son işlem) küçültme işlemini engellediği anlamına gelir. Ayrıca, transaction_sequence_num
dinamik yönetim görünümündeki first_snapshot_sequence_num
veya sütunlarının 15 değerini içerdiğini gösterir.
transaction_sequence_num
veya first_snapshot_sequence_num
görünüm sütunu, küçültme işleminin son tamamlanan işleminden (109) daha küçük bir sayı içeriyorsa, küçültme işlemi bu işlemlerin bitmesini bekler.
Sorunu çözmek için aşağıdaki görevlerden birini yapabilirsiniz:
sysadmin sabit sunucu rolüne veya db_owner sabit veritabanı rolüne üyelik gerektirir.
Aşağıdaki örnek, DataFile1
kullanıcı veritabanındaki UserDB
adlı veri dosyasının boyutunu 7 MB'a küçültür.
USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
Aşağıdaki örnek, AdventureWorks2022
veritabanındaki günlük dosyasını 1 MB'a küçültür.
DBCC SHRINKFILE
komutunun dosyayı küçültmesine izin vermek için, önce veritabanı kurtarma modeli SIMPLE olarak ayarlanarak dosya kesilir.
USE AdventureWorks2022;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE AdventureWorks2022
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (AdventureWorks2022_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE AdventureWorks2022
SET RECOVERY FULL;
GO
Aşağıdaki örnek, AdventureWorks2022
veritabanındaki birincil veri dosyasını keser. veri dosyasının sys.database_files
elde etmek için file_id
katalog görünümü sorgulanır.
USE AdventureWorks2022;
GO
SELECT file_id, name
FROM sys.database_files;
GO
DBCC SHRINKFILE (1, TRUNCATEONLY);
Aşağıdaki örnekte, veritabanından kaldırılabilmesi için dosyanın boşaltılması gösterilmektedir. Bu örneğin amaçları doğrultusunda, önce bir veri dosyası oluşturulur ve veriler içerir.
USE AdventureWorks2022;
GO
-- Create a data file and assume it contains data.
ALTER DATABASE AdventureWorks2022
ADD FILE (
NAME = Test1data,
FILENAME = 'C:\t1data.ndf',
SIZE = 5MB
);
GO
-- Empty the data file.
DBCC SHRINKFILE (Test1data, EMPTYFILE);
GO
-- Remove the data file from the database.
ALTER DATABASE AdventureWorks2022
REMOVE FILE Test1data;
GO
Aşağıdaki örnek, geçerli kullanıcı veritabanındaki bir veri dosyasının boyutunu 1 MB'a küçültmeye çalışır.
sys.database_files
katalog görünümü, veri dosyasının file_id
elde etmek için sorgulanır, bu örnekte file_id
5. Bir dakika içinde kilit alınamazsa küçültme işlemi durdurulür.
USE AdventureWorks2022;
GO
SELECT file_id, name
FROM sys.database_files;
GO
DBCC SHRINKFILE (5, 1) WITH WAIT_AT_LOW_PRIORITY (ABORT_AFTER_WAIT = SELF);
Ekinlikler
31 Mar 23 - 2 Nis 23
En büyük SQL, Fabric ve Power BI öğrenme etkinliği. 31 Mart – 2 Nisan. 400 ABD doları tasarruf etmek için FABINSIDER kodunu kullanın.
Bugün kaydolun