trende
trende

SQL Server Veritabanı Dosyaları Nasıl Küçültülür

07.06.2021
450
Sorun

Çok sayıda kayıt depolayan bir tabloya sahip bir SQL Server veritabanınız var. Bazen, artık eski verileri saklamanız gerekmediğinden bazı verileri tabloya dökmek istersiniz. Örneğin, yalnızca son beş yılın kayıtlarını tutmanız gerekir, ancak veritabanınız son yirmi yılın kayıtlarını tutmaktadır. Beş yıldan eski olan her şey atılmalıdır.

Ancak, toplam 20 GB olan eski kayıtları attığınızda, sabit diskteki dosya boyutunun değişmediğini fark ettiniz. Diyelim ki tablo için dosya boyutu 60GB oldu ve 20GB eski kayıtları kaldırdınız. Dosya boyutunun 40 GB’a düşmesini bekliyorsunuz, ancak bunun yerine 60 GB’da kalıyor.

Çözüm

Bir veritabanı oluşturduğunuzda, başlangıçta mdf ve ldf dosyaları için bir temel boyut belirlersiniz veya SQL Server tarafından belirlenen varsayılan değerlere güvenirsiniz. Her iki durumda da, bu yalnızca minimum bir başlangıç ​​noktasıdır ve tabloya/tablolara daha fazla veri eklenmesiyle dosya boyutu büyüyecektir.

Veritabanından büyük miktarda veri sildikten sonra, mdf ve ldf dosya boyutlarının verileri silmeden öncekiyle aynı kaldığını fark edersiniz. Bunun nedeni, SQL Server’ın bu maksimum dosya boyutunu ayrılmış alan olarak tutmasıdır. Bu ayrılmış alanı kesinlikle yeniden kazanmanız gerekiyorsa, geri almak için SHRINKFILE ve SHRINKDATABASE kullanabilirsiniz. İsteğe bağlı olarak, veritabanı içinde kayıt miktarı yeniden arttığında SQL Server’ın ayrılmış alanı kullanmasına izin verebilirsiniz.

Önlemler

Verileri sildikten sonra veritabanının ayrılmış alanını küçültmek istiyorsanız ve ayrılmış alanın daha sonra veriler yeniden eklendikçe artırılması gerekiyorsa, bu prosedür fiziksel disk parçalanmasına neden olabilir ve performansı etkileyebilir. Daha sonra bir disk birleştirme çalıştırdığınızdan emin olun.

Bilinmesi gerekenler

Şu anda yedeklenmekte olan bir veritabanını küçültemezsiniz veya şu anda küçültme sürecinde olan bir veritabanını yedekleyemezsiniz. Veritabanının minimum veya orijinal boyutundan daha küçük bir boyuta küçültülemez. Örneğin, başlangıç ​​boyutu 8 MB olan bir veritabanı oluşturulduysa ancak 4 GB’a büyütüldüyse, veritabanını küçültebileceğiniz en küçük boyut, orijinal boyut olan 8 MB’dir. Shrink işlevini kullanmak için “sysadmin” sabit sunucu rolüne veya “db_owner” veritabanı rolü iznine sahip olmanız gerekir. “Salt okunur” izinlere sahip bir kullanıcı “SHRINKFILE” veya “SHRINKDATABASE” işlevlerini kullanamaz.

Dikkat!

Her şeyden önce, bu deneyi bir üretim sunucusunda denemeyin. Yeni bir test sunucusu ortamı oluşturmanız gerekse bile, bu tür eğitim/testler için her zaman bir test sunucusu kullanın.

Veritabanlarının Boyutunu Alın
Veri eklemeye başlamadan önce, veritabanı için “mdf” ve “ldf” dosyalarının dosya boyutuna bakmalı ve belgelemeliyiz. Bu bize karşılaştırma için bir temel sağlayacaktır. Bunu başarmanın birkaç yolu var, size kolaylık sağlamak için iki tanesini listeledim.

Seçenek 1 – T-SQL’i Kullanma
“MikroDB_V16_FIRMA” dosyasının ilk veya geçerli boyutunu öğrenmek için bu basit komut dosyasını çalıştırın.

USE MikroDB_V16_FIRMA;
GO

EXEC sp_spaceused;
Veritabanının oluşturulması sırasında minimum dosya boyutu ayarlarınıza bağlı olarak sonuçlar görünecektir.

Seçenek 2 – Windows Dosya Yöneticisini (GUI) Kullanma
“mdf” ve “ldf” dosyalarının bulunduğu klasöre gidin ve bir ekran görüntüsü alın. Varsayılan olarak bu, SQL Server’ın veri dosyalarınızı depoladığı klasör yolu olacaktır. Özel yapılandırmanıza ve SQL Server sürümünüze bağlı olarak.

SQL Server standart olarak : C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER1\MSSQL\DATA\

Veya, oluşturma sırasında dosyaları farklı bir sürücüye koyarsanız, onları koyduğunuz sürücüye/klasöre gitmeniz yeterlidir.

Şimdi, tabloyu 2001 ile 2021 arasında değişen rastgele tarihlere sahip bir kaç milyon satır veriyle dolduralım. On milyon kullanıyorum, bu nedenle referansınız için bariz bir dosya boyutu farkı olacak. Bu ek parçaya başlamadan önce yeterli kullanılabilir sürücü alanınız olduğundan emin olun. Ayrıca, bilgisayarınızın performansına bağlı olarak bu işlem yaklaşık 20 ila 25 dakika sürebilir.

Milyonlarca kayıt oluşturduğumuzu ve veritabanı boyutunun 4 GB olduğunu görebiliriz. LOG dosya boyutunu katları şeklinde çok daha büyük olacaktır.

SQL Server Veritabanını Küçültme

SQL Server, veritabanını ve dosya boyutunu küçültmek için birkaç yol sunar. Birçok şey gibi, bu da kişisel tercihlere bağlı olacaktır. Bazı insanlar işleri yapmak için GUI yolunu tercih ederken, diğerleri daha fazla uygulamalı olmak ve “terminal modunda” çalışmak isteyecektir.

Seçenek 1 – SQL Server Management Studio’da GUI arayüzünü kullanma
Veritabanlarınızın listelendiği sol bölmede, “MikroDB_V16_FIRMA” üzerine sağ tıklayın ve “Tasks” seçeneğinden “Shrink” ve ardından “Files” seçeneğini seçin.

Sonraki iletişim kutusunda, mdf dosyasını küçültmek için Dosya türünün “Veri” olarak ayarlandığından emin olun. İletişim kutusunun alt kısmında seçenekleri ile üç radyo düğmeleri göreceksiniz “Release unused space” kullanılmayan alanı seçili olacaktır. Diğer seçenek “Reorganize pages before releasing unused space” kullanılmayan alanı bırakmadan önce yeniden organize edilecektir. Son olarak “Empty file by mibration the data to other files in the same filegroup” Sayfaları veya aynı dosya grubu ile diğer dosyalara veri taşımaya tarafından boş dosya. Hangisini seçeceinizden emin değilseniz, varsayılan “Kullanılmayan alanı bırak” seçeneğini seçili bırakın.

Seçenek 2 – Dosya boyutunu küçültmek için T-SQL kullanma
Optimal olarak, en iyi seçenek (bence) T-SQL komutlarını kullanmaktır.

USE MikroDB_V16_FIRMA;
GO
— mdf dosyasını küçült
DBCC SHRINKFILE ( N’MikroDB_V16_FIRMA’ , 0 );
GO
— log.ldf dosyasını küçültün
DBCC SHRINKFILE ( N’MikroDB_V16_FIRMA_log’ , 0 );
GO

Çıkan sonuçlar tam olarak beklediğiniz gibi olmayabilir, ancak yakın oldukları sürece, veritabanı “küçültme” işlemini başarıyla tamamladığınızı bilirsiniz. Siz bu işlevleri gerçekleştirirken, bilgisayarınızın bir veya daha fazla veri tabanına veri ekleyebileceğini ve bu nedenle numaralarınızın kesin olmayacağını unutmayın.

Özet

Yazının başında da bahsedildiği gibi bu işlem disk parçalanmasına neden olacaktır. Bu nedenle, seçeneklerinizi gerçekten tartmanız ve bunun sizin ve donanımınız için doğru olup olmadığını belirlemeniz gerekir. Sürücünüzde yer açmak için veritabanını küçültmek, umutsuz bir durumda uygun bir çözüm olabilir, ancak bu, herhangi bir yinelenen program koymanızı tavsiye edeceğim bir şey değil. Veritabanınızın düzenli olarak bu maksimum boyuta (veya daha fazlasına) yeniden büyüyeceğini biliyorsanız, o zaman en iyi seçeneğiniz ayrılmış alanı olduğu gibi bırakmak olacaktır.

Gerçekten biraz sürücü alanı boşaltmanız gerekiyorsa, veri türleriniz için CHAR yerine VARCHAR kullanın. Yaptığımız testten önceki bu basit değişiklik, 3GB depolama alanı farkı yaratıyor. Bu nedenle, veritabanınızı ve tablolarınızı oluşturmadan önce dikkatlice planlamalısınız.

Bu makaledeki gibi durumlarda, veri boyutunuzu azaltmak yerine sürücü boyutunuzu artırmak her zaman daha iyi bir çözümdür.

Whatsapp
OrfeSoft Yazılım
OrfeSoft Yazılım
Merhaba,
Size nasıl yardımcı olabilirim?