Bu makalede veritabanını başka bir disk yolunda büyütme konusunu ele almış olacağız. Bazen veritabanımız tek disk yolu üzerinde büyüyerek ihtiyaçlarımız tam performanslı bir şekilde cevap veremeye bilir. Bunun birden fazla sebebi olabilir.
Bu sebeplerden öncelikli olan veritabanımız sadece primary filegroup üzerinde büyümüş ve maksimum filegroup seviyesi 16 TB dayanmış olabilir. Bu da veritabınımızda disk alanında beklemelere sebebiyet verebilir. Sorgumuzun disk üzerinde uzun süre beklemesi PAGEIOLATCH_SH hatası almamıza genellikle sebebiyet verir. Bunun için veritabanımızı farklı bir filegroup ve disk üzerinde büyütebiliriz.
İkinci seçenek ise ilgili filegroup altında bulunan diskimizde yer kalmayabilir. Bu şekilde veritabanımızın üzerinde koşmuş olduğu disk boyutu online bir şekilde artırılabilir.
Yukarıdaki sebebiyetlerden ötürü veritabanımızda disk yolunun değişmesi ve farklı bir filegroup üzerinde büyümesi sağlanır.
Şu bilgiyide vermek gerekirse;
SQL Server’da bir NDF dosyasının(secondary data file) maksimum boyutu, kullanılan SQL Server sürümüne ve kullanılan dosya sistemine bağlıdır:
SQL Server’ın desteklediği maksimum veritabanı boyutu, kullanılan sürüme göre değişir. Örneğin: SQL Server Standard Edition’da Maksimum veritabanı boyutu 524 PB’dir (Petabyte). SQL Server Enterprise Edition’da Teorik olarak sınırsızdır, ancak donanım ve dosya sistemi kısıtlamaları vardır.
SQL Server dosyaları, Windows dosya sistemi üzerinde depolanır. Kullanılan dosya sistemine göre dosya boyutu sınırlamaları olabilir: NTFS(en yaygın kullanılan dosya sistemi): Tek bir dosya için(MDF)maksimum boyut 16 TB’tır. ReFS (Resilient File System) Tek bir dosya için 35 PB’a kadar destekler. Her NDF dosyası içinde bu sınırlar geçerlidir. Ancak, bir veritabanında birden fazla NDF dosyası ekleyebilir ve bu sayede toplam veritabanı boyutunu artırabilirsiniz.
Yukarıdaki bilgiden sonra şimdi uygulamalı bir şekilde veritabanımızı başka bir disk üzerinde büyütmekte.
Veritabanımızın üzerine sağ tıklanıp properties ekranından yeni bir filegroup ve data file ekliyoruz.

İlgili filegroup eklendikten sonra data file kısmına gelip yeni oluşturacağımız .ndf data file ve oluşturduğumuz filegroup’u seçiyoruz. Path kısmında veritabanımızın büyüyeceği yeni disk yolunu seçmiş oluyoruz.

Bu yapıdan sonra oluşturmuş olduğumuz filegroup ve data file’ın Autogrowth/ Maxsize bölümünde gerekli konfigürasyon yapıyoruz.

Yukarıdaki adımlardan sonra artık yeni filegroup ve data file oluşmuş durumda artık mevcut olan veritabanı veya tablolarımız bu yeni tanımlamış olduğumuz disk üzerinde büyüme işlemini yapmış olacaktır.
Son olarak veritabanımızın yeni data file üzerinde büyümesini sağlamak için veritabanının üzerindeki Files sekmesine gelinir. Primary filegroupdaki Autogrowth / Maxsize bölümüne tıklanır. Gelen ekranda Enable Autogrowth’taki tik’i kaldırıyoruz. Bu şekilde veritabanımız artık yeni filegroup ve data file üzerinde büyümüş olacaktır.

Bu işlemlerden sonra veritabanımız artık yeni File üzerinde büyümüş olacaktır.

Şimdi bir tablo oluşturalım create scriptini aldığımızda hangi filegroup üzerinde oluştuğunu görelim.
Not: Yukarıdaki geçişi yaptıktan sonra Default filegroup kısmında yeni filegroup’un seçilmesi lazım yoksa tablo veya her ne oluşturursak Primary file group veya default filegroup’unuz neyse onun üzerinde oluşmuş olacaktır.

Bu ayarı yaptıktan sonra bir tablo oluşturalım. Bu tablo default FG2024 filegroup’u seçtiğim için otomatik olarak ilgili filegroup altında oluşmuş olacaktır. Veritabanı altında oluşturmuş olduğum tablo’ya sağ tıklayıp Properties>Storage kısmında default file group üzerinde oluştuğunu görmüş oluyoruz.

Aşağıdaki komut ile hangi tablonun hangi file group üzerinde olduğunu bulabiliriz.
SELECT distinct o.[name], o.[type], f.[name] FROM sys.indexes i
INNER JOIN sys.filegroups f
ON i.data_space_id = f.data_space_id
INNER JOIN sys.all_objects o
ON i.[object_id] = o.[object_id]
AND o.type = 'U' -- User Created Tables
GO

Hangi tablonun hangi file group üzerinde olduğunu bulan bir başka komut aşağıda görülmektedir.
SELECT
s.name AS SchemaName,
o.name AS TableName,
i.name AS IndexName,
i.type_desc AS IndexType,
fg.name AS FilegroupName
FROM
sys.indexes i
INNER JOIN
sys.objects o ON i.object_id = o.object_id
INNER JOIN
sys.schemas s ON o.schema_id = s.schema_id
INNER JOIN
sys.data_spaces ds ON i.data_space_id = ds.data_space_id
LEFT JOIN
sys.filegroups fg ON ds.data_space_id = fg.data_space_id
WHERE
o.type = 'U' -- Yalnızca user tabloları
ORDER BY
fg.name, s.name, o.name, i.name;
Not: Farklı file Group üzerinde olan verilerimize select ,insert,update yaptığımızda verilerimiz AutoGrowth değerimiz None olsa bile gelecektir.
Yukarıdaki resimde de görüldüğü gibi yeni oluşturmuş olduğumuz tablonun yeni filegroup üzerinde büyüdüğünü görmüş oluyoruz. Şu aklınıza gelmiş olabilir. Yukarıdaki resimde de görüldüğü gibi verilerimiz başka bir file group ve disk yolu üzerinde olmuş oldu benim ne yapmam lazım. Burada ise Data Shrink olayı karşımıza çıkmakta ilgili makaleyi sayfanın arama kısmından veya belirtilen link’ten ulaşabiliriz. Bir sonraki makalede görüşmek üzere..
“Yeryüzünde birbirine komşu kara parçaları, üzüm bağları, ekinler, bir kökten birkaç gövde hâlinde çatallı çıkan hurma ağaçları ve bir kökten tek sürgü halinde çatalsız çıkan hurma ağaçları vardır. Bunların hepsi aynı suyla sulanmaktadır. Buna rağmen canlılara sağladıkları ürünler bakımından, ayrıca tat, gıda ve kalite açısından biz onları farklı farklı yapıyor ve bazısını bazısına tercih edilir kılıyoruz. Elbette bunlarda aklını kullanan kimseler için dersler ve ibretler vardır.” Rad-4