St.AnGeR
Document Visor..
5.1. Veritabanı Dosyalarını Yönetme
5.2. Transaction Log Nasıl Çalışır
5.3. Bir Veritabanı Yaratma
5.4. Veritabanı Seçeneklerini Ayarlama
5.5. Veritabanlarını Değiştirme
5.6. Veri ve Log Dosyalarının Büyümelerini Yönetme
5.7. Otomatik Dosya Büyümesinin Kullanımı
5.8. Bir Transaction Log'u Genişletme
5.9. Bir Veritabanı veya Dosyayı Genişletme
5.10. Bir Veritabanını Kaldırma (Dropping)
5.11. Çoklu Diskler Üzerindeki Veritabanlarını Yönetme
5.12. SQL Server ile RAID kullanma
5.13. Geçerli FileGroup'u Boyutlandırma
5.14. Model Veritabanının ve Sistem Tablolarının Boyutunu Belirleme
5.15. Tablolardaki Veri Miktarını Hesaplama
5.16. Tavsiye edilen uygulamalar
Veritabanlarına Giriş
Bir veritabanı yaratılırken, veri depo yapısı kurulur. Bu yapı bir veri dosyası içerir. Bu veri dosyasında ise veritabanı nesneleri, ve bir transaction log dosyası bulunur. Bir veritabanı yaratmadan önce SQL Server’ın veriyi nasıl yerleştirdiğini bilmek gerekir.
Veritabanı Dosyalarını Yönetme
Bir veritabanı yaratırken anlaşılması önemli olan şey, vertabanını yerleştirmek için gerekli olan disk alanının hesaplanması ve belirlenmesidir. Veri yerleştirme ile ilgili adımlar:
I. Bütün veritabanları, birincil veri dosyalarına (.mdf) ve bir ya da daha fazla transaction log dosyalarına (.ldf) sahiptir. Bir veritabanı ayrıca ikincil veri (.ndf) dosyalarına sahiptir.
II. Bir veritabanı yaratıldığı zaman, sistem tablolarını içeren, model veritabanının bir kopyası veritabanına kopyalanır. Bir veritabanının minimum boyutu model veritabanı boyutundan daha büyük veya boyutuna eşit olmalı.
III. Veri, Pages olarak adladırılan 8kb’lik disk bloklarının içine yerleştirilir. Bu, bir veritabanı megabyte başına 128 sayfa depolar anlamına gelir.
IV. Rowlar sayfaları span etmezler. Böylece tek bir row’daki maximum veri miktarı 8092 byte’tır.
V. Tablolar ve indexler extentler içine yerleştirilirler. Bir alan 8 sayfa veya 64kb’tır. Böylelikle bir
veritabanı megabyte başına 16 alana (extent) sahiptir. Küçük tablolar, diğer veritabanı nesneleriyle alanları paylaşırlar.
VI. Transaction log dosyaları, başarısız sistem olaylarında, veritabanını iyileştirmek için gerekli bütün bilgileri tutarlar. Transaction log’un boyutu veri dosyalarının %25’idir.
Transaction Log Nasıl Çalışır
Transaction Log, veri değişikliklerini (INSERT, UPDATE, DELETE gibi) kaydeder. Logging process aşağıdaki gibidir:
(a) Veri değişikliği uygulama tarafından gönderilir.
(b) Bir değişiklik çalıştırıldığı zaman, sahte veri sayfaları diskten memory’ye (buffer cache olarak adlandırılır) yüklenir.
(c) Herbir veri değiştirme statement’I log içine kaydedilir. Veritabanında değişiklik yapılmadan önce, değişkilik log içine kaydedilir ve diske yazılır. Bu tip log write-ahead log olarak adlandırılır.
(d) Veri sayfaları buffer cache içinde bulunduğunda ve log sayfaları, transaction log dosyaları içindeki disk üzerinde tutulduğunda, checkpoint process, tüm tamamlanmış işlemleri, disk üzerindeki veritabanına yazar.
Sistem başarısız olursa, otomatik geri alım işlemi, bütün tamamlanmış transactionları ileri göndermek için ve tamamlanmamış transactionları geri döndürmek için transaction logu kullanır. Log’daki Transaction marker’lar, otomatik geri alım işlemi sırasında kullanılır ve transaction’ların başlangıç ve bitiş noktalarını belirler. Bir checkpoint oluşursa, veri dosyaları diske yazılır.
Önemli: Eğer harddiskin bir disk-caching kontrolörü varsa, onu gözardı et. Bir veritabanı için disk kontrolcüsü tasarlanmadıkça, SQL Server veri güvenliği zarar görebilir.
Veritabanlarıyla Çalışma
Bir Veritabanı Yaratma
Databse Creation Wizard, SQL Server Enterprise Manager veya CREATE DATABASE kullanılarak bir veritabanı yaratılabilir. Bir veritabanı yaratma işlemi, o veritabanı için ayrıca bir transaction log yaratır. SQL Server’da bulunan herbir veritabanı ile ilgili bilgiler, master veritabanındaki sysdatabases tablosu içinde tutulur. Böylece Transact-SQL kullanıldığı zaman, bir veritabanı yaratmak için master veritabanı kullanılmalı.
Bir veritabanı yaratma, bir veritabanı ismi belirleme ve veritabanı dosyalarının yerini ve boyutunu belirtme işlemidir. Yeni bir veritabanı, model veritabanının bir kopyası olarak yaratılır. Model veritabanındaki ayarlar ve seçenekler yeni veritabanı içine kopyalanır.
Önemli: Bir veritabanı yaratıldığında, değiştirildiğinde veya kaldırıldığında master veritabanının yedeği alınmalı.
Bir veritabanı yaratırken, aşağıdaki seçenekler ayarlanabilir.
Primary
Bu seçenek, primary filegroup’daki dosyaları belirtir. Primary filegroup, veritabanı sistem tablolarının tümünü içerir. Ayrıca kullanıcı filegrup’lara verilmeyen tüm nesneleri içerir. Bir veritabanının sadece bir tane birincil dosyası vardır. Eğer PRIMARY anahtar kelimesi belirtilmemişse, statemnet’taki ilk dosya birincil dosya olur.
Dosya Adı
Bu seçenek dosya için, işletim sisteminin dosya adını veya path’ini belirler. Os_file_name’deki path, SQL Server’ın kurulduğu server üzerinde bir klasör belirler.
Boyut
Bu seçenek dosyanın boyutunu belirler. Boyutlar megabyte veya kilobyte olarak belirtilebilir. Veri dosyaları için minimum değer 1MB’tır, geçerli değer 3 Mb’tır ve log dosyalar için 1 Mb’tır.
MaxSize
Bu seçenek, genişleyen dosyanın maximum boyutunu belirler. Boyutlar megabyte veya kilobyte olarak belirtilebilir. Eğer herhangi bir boyut belirlenmemişse, dosya disk dolana kadar genişler.
Dosya Artışı
Bu seçenek, dosya artışını belirler. FILEGROWTH ayarı, MAXSIZE ayarını aşamaz. Sıfır değeri artış olmadığını gösterir. Boyutlar megabyte veya kilobyte veya % olarak belirtilebilir. FILEGROWTH belirlenmemişse, geçerli değer 10 percent’tir. Minimum değer 64 KB’dir.
Örnek: Aşağıdaki örnek 10 MB birincil veri dosyası ve 3 MB log dosyası ile library isimli bir veritabanı yaratır.
CREATE DATABASE library
ON
PRIMARY (NAME =library_data,)
FILENAME=’c:\msSQL7\data\library.mdf’,
SIZE=10MB,
MAXSIZE=15MB,
FILEGROWTH=20%)
LOG ON
(NAME=library_log,
FILENAME=’c:\ msSQL7\data\library.ldf’,
SIZE=3MB,
MAXSIZE=5MB,
FILEGROWTH=1MB)
Veritabanı Seçeneklerini Ayarlama
Bir veritabanı yarattıktan sonra veritabanı seçenekleri değiştirilebilir. Veritabanı seçenklerinin çoğu SQL Server Enterprise Manager tarafından ayarlanabilir. Veritabanı seçenekleri tümü ise sp_dboption stored procedure’ı tarafından ayarlanabilir.
Sık Kullanılan Seçenekler
Veritabanı Seçeneği
Tanım
Dbo use only
Sadece dbo veritabanı kullanımını sınırlar.
Read only
Bir veritabanını sadece okumak için tanımlar.
Select into/bulkcopy
Bir veritabanına log olmayan işlemleri kabul etmeye izin verir.
Single user
Belirli bir zamanda bir kullanıcının veritabanına erişimini sınırlar.
Trunc. Log on chkpt.
Checkpoint işlemi meydana geldiği zaman, transaction log’u kısaltır (Onaylanmış işlemleri silme). Production veritabanında kullanılmaz.
No chkpt. On recovery
Veritabanına bir checkpoint kaydı eklenip eklenmeyeceğini belirler.
Autoshrink
Veritabanı boyutunun otomatik olarak küçülüp küçülmediğini belirler.
Veritabanı Seçeneklerini İzleme
Aşağıdaki tablo, veritabanı seçenekleri ve veritabanları hakkındaki bilgileri gösteren sistem stored procedure’ları gösterir.
Sistem Stored Procedure
Tanım
Sp_dboption
Bütün uygun seçenekleri listeler.
Sp_helpdb
Server üzerindeki bütün veritabanlarını raporlar. Veritabanı ismini, boyutunu, sahibini, ID’sini, yaratılış tarihini ve seçeneklerini sağlar.
Sp_helpdb database_name
Sadece belirtilmiş veritabanını raporlar. Veritabanı ismini, boyutunu, sahibini, ID’sini, yaratılış tarihini ve seçenekleri sağlar. Ayrıca veri ve log için dosyaları listeler.
Sp_spaceused [objname]
Bir veritabanının, transaction log’un veya veritabanı nesnesinin kullandığı depo alanı gösterir.
Veritabanlarını Değiştirme
Veritabanı genişler ya da değişirse, veritabanı boyutu otomatik olarak genişletilebilir veya küçültülebilir. Bir veritabanı uzun zaman kullanılmazsa, bağlı olduğu dosyalarla birlikte kaldırılır.
Veri ve Log Dosyalarının Büyümelerini Yönetme
ALTER DATABASE library
MODIFY FILE (NAME= ‘library_log’,
SIZE = 10MB)
GO
ALTER DATABASE library
ADD FILE
(NAME=library_data2,
FILENAME = ‘c:\mssql7\data\library2.ndf’,
SIZE=10MB,
MAXSIZE=20MB)
GO
Veri dosyaları büyüdüğü zaman, veri veya log dosyalarının boyutları büyütülebilir. Veritabanı büyümeleri, SQL Server Enterprise Manager veya ALTER DATABASE ifadesi kullanılarak yönetilebilir. ALTER DATABASE ifadesini kullanabilmek için Master veritabanında olmak gerekir.
Veritabanı boyutu aşağıdakiler tarafından kontrol edilebilir.
Ø Otomatik olarak genişlemesi için veri tabanı ve log dosyalarını konfigüre ederek
Ø Veritabanı ve log dosyalarının max boyutunu el ile arttırarak
Ø İkincil veritabanı ve log dosyaları eklenerek
Otomatik Dosya Büyümesinin Kullanımı
Otomatik büyüme seçeneği, SQL Server Enterprise Manager veya ALTER DATABASE ifadesi kullanılarak ayarlanabilir. Otomatik dosya genişlemesi, artan veritabanı boyutu ile ilgili olan administrative task’ları azaltır. Başlangıç boyutu, max boyut ve herbir dosya için artış belirlenebilir. Max boyut belirlenmemişse, bir dosya diskteki uygun alan boyunca genişleyebilir.
Veritabanı Dosyalarını Genişletme
Varolan bir dosyanın otomatik olarak genişlemesi konfigüre edilememişse, boyutu yine de arttırılabilir.Büyüme artışı için, 0 değeri otomatik olarak büyütülemeyeceğini gösterir.
İkincil Veritabanı Dosyaları Ekleme
Veritabanı dosyasının boyutunu genişletmek için, ikincil veritabanı dosyaları yaratılabilir. RAID sistemlerinin disk-striping özellikleri kullanılmadığında, veri dosyalarını, farklı fiziksel diskler üzerine yerleştirmek için, ikincil veritabanı dosyaları kullanılır.
Aşağıdaki örnek geçerli log boyutunu artırır ve library veritabanına ikincil veri dosyası ekler.
ALTER DATABASE library
MODIFY FILE (NAME=’library_log’,
SIZE=10MB)
GO
ALTER DATABASE library
ADD FILE (NAME=’library_data2’,
FILENAME=’c:\msSQL7\data\library2.ndf’,
SIZE=10MB,
MAXSIZE=20MB)
GO
Bir Transaction Log’u Genişletme
Bir veritabanı genişlerse veya veri değiştirme aktivitesi artarsa, transaction logu genişletmeye ihtiyaç duyulabilir.
Log Denetimi
Log düzenli olarak denetlenirse, genişlemesi de kontrol altına alınabilir.
Uyarı: Eğer transaction log’un yeterli alanı yoksa, SQL Server transactionları kaydetmez ve veritabanında değişiklik yapmamıza izin vermez.
Transaction log, SQL Server Enterprise Manager ile elle denetlenebilir veya WinNT Performans Monitor kullanılabilir. Aşağıdaki tablodaki SQL Server Performans Monitor’daki, SQL Server Log nesneleri kullanılarak veritabanının transaction logları denetlenebilir.
SQL Server Log Yönetim Nesnesi
Görünümler
Log Bytes Per Flush
Buffer büyütüldüğü zaman, log bufferındaki, byte sayısını gösterir.
Log Flushes
Log artışlarının sayısını gösterir.
Log Flush Wait Time
Milisaniye olarak toplam bekleme zamanını gösterir.
Log Flush Waits
Log artışları üzerinde bekleyen onayların sayısını gösterir.
Gerekli Olduğu Zaman Log’u Genişletme
SQL Server Enterprise Manager veya ALTER DATABASE ifadesi kullanılarak transaction log genişletilebilir.
Extensive Log Aktivitelerine Neden Olan Durumlar
Extensive Log aktivitelerine neden olan durumlar, aşağıdakileri içerir.
· İndexlere sahip olan bir tabloya yüklenmiş bilgiyi içerir. İndexleri olmayan tablolar yüklenirken sadece extent allocationlar log edilir.
· Tek bir işlemle, bir çok değişiklik (INSERT, UPDATE, DELETE) yapan işlemleri içerir.
· WRITETEXT veya UPDATETEXT ve WITH LOG ifadeleri kullanılarak text veya image data eklemelerini ve değişikliklerini içerir. Transaction log alanını korumak için text ve image değişiklikleri log edilmez.
Bir Veritabanı veya Dosyayı Genişletme
Çok alan parçalandığı zaman veya alan ihtiyacı azaldığı zaman, veritabanının tamamı veya belirli veri dosyaları küçültülebilir.
Tüm Veritabanını Küçültme
Database Consistency Checker (DBCC) ifadesi olan SHRINK DATABASE çalıştırılarak veya SQL Server Enterprise Manager kullanılarak küçültülebilir. Bu, veri dosyalarının boyutlarını küçültebilir ama log dosyalarının boyutlarını küçültemez.
Örnek: Aşağıdaki örnek library veritabanının boyutunu 25 percent küçültür.
DBCC SHRINKDATABASE (library, 25)
Veritabanındaki bir Veri Dosyasını Küçültme
DBCC ifadesi olan SHRINKFILE ile küçültülebilir.
Örnek: Aşağıdaki örnek library veri dosyasının boyutunu 10 MB küçültür.
DBCC SHRINKFILE (library,10)
Bir Veritabanını Otomatik Olarak Küçültme
Kullanılmayan alanı ottomatik olarak geri almak için bir veritabanı seçeneği ayarlanabilir.
Bir veritabanı veya veri dosyası küçültülürken aşağıdaki adımlar göz önüne alınmalı.
· Resulting Database, model veritabanının veya içindeki verinin veya veri dosyasının boyutundan
daha geniş olmalı.
· Bir veritabanı veya veri dosyası küçültülmeden önce, veritabanı yedeklenmeli.
· İşletim sistemine alan sağlamak için TRUNCATE seçeneği kullanılır
· Tüm verileri, aynı filegrup’ta bulunan bir dosyadan diğerine taşımak için EMPTYFILE seçeneği kullanılır. SQL Server, verinin, EMPTYFILE seçeneği kullanılan dosya üzerine yerleştirilmesine izin vermeyecektir. ALTER DATABASE ifadesi kullanılarak boşaltılmış dosya silinebilir.
Bir Veritabanını Kaldırma (Dropping)
Bir veritabanına uzun zaman ihtiyaç duyulmadığında kaldırılır. Bir veritabanını kaldırma, veritabanı tarafından kullanılan veri dosyalarını ve veritabanını siler.
Bir Veritabanını Kaldırmak için Kullanılan İki Method
SQL Server Enterprise Manager kullanılarak veya DROP DATABASE ifadesi çalıştırılarak bir veritabanı kaldırılabilir.
Örnek: Aşağıdaki örnek ifade kullanılarak birden fazla veritabanı kaldırılabilir.
DROP DATABASE library, northwind, pubs
Bir veritabanı kaldırıldığı zaman aşağıdaki adımlar göz önüne alınmalı.
v SQL Server Enterprise Manager kullanılarak bir zaman anında sadece bir veritabanı kaldırılabilir.
v Transact-SQL kullanılarak, bir kerede farklı veritabanları kaldırılabilir.
v Bir veritabanını kaldırdıktan sonra, her login ID master veritabanını kullanır.
Note: Bir veritabanını kaldırdıktan sonra, master veritabanı yedeklenmeli.
Belirli Durumlarda Bir Veritabanı Kaldırılamaz
Ø Herhangi bir kullanıcı tarafından yazmak veya okumak için açılan bir veritabanı kaldırılamaz.
Ø Kopyalamayla elde edilen bir veritabanı kaldırılamaz.
Ø Backup’tan açılan bir veritabanı kaldırılamaz.
SQL Server msdb sistem veritabanını kaldırmaya izin verse bile, aşağıdakiler kullanılırsa kaldırmaya izin vermez.
q SQL Server Agent (SQL Server Aracısı)
q Replication (Kopyalama)
q SQL Server Web Sihirbazı
q Yedekleme History
q Data Transformation Services
Çoklu Diskler Üzerindeki Veritabanlarını Yönetme
Eğer veritabanı, çoklu diskler kullanırsa, hata toleranslarını arttırmak, daha iyi performans elde etmek, ve veritabanı büyümesine daha kolay yer sağlamak için RAID kullanılabilir. Ayrıca filegrup olarak adlandırılan dosya grupları, farklı disklere veritabanı ve log dosyalarını kaydetmek için kullanılabilir. File gruplar, administrative task’ları basitleştirir, ve kritik dosyaların yedekleme zamanını düşürür.
WinNT Server Hata Toleransını Giderme
RAID seviyeleri tarafından gruplandırılan hata toleransı, sistem başarısızlığa uğradığında veri kaybı olmadan, işletim sisteminin çalışmaya devam etmesini sağlar. 0, 1 ve 5, SQL Server ile en çok kullanılan RAID seviyeleridir.
Disk Yolunmalarını (Striping) Kullanma
Disk Striping, çoklu disklerin içinden veri yazar:
ü Disk striping tabanlı WinNT Server, RAID 0 seviyesini yerine getirir. Bu en yüksek RAID seviyesidir.
ü Eğer bir disk bozulursa, stripe set’teki hiç bir veriye erişilemez.
Disk Mirroring’i Kullanma
Disk mirroring, farklı disk üzerinde tamamiyle gereksiz bölünme kopyası tutarak media’nın başarısızlıklarına karşı korur.
¨ Disk mirroring tabanlı WinNT Server, bir yedekleme formudur ve RAID 1 seviyesini yerine getirir.
¨ Disk mirroring tabanlı WinNT Server çok disk alanı ister.
¨ Veri açma zamanı minimize edilebilir.
Disk Striping’I With Parity Kullanımı
Ø Disk striping with parity tabanlı WinNT Server RAID 5 seviyesini yerine getirir.
Ø Disk mirroring’e eşit olan hata tolerans koruması elde edilebilir ama az sayıda disk alanı kullanır.
Ø Sistem başarısızlığında, striped set’in disklerinde kalan kayıp veri yeniden oluşturulabilir.striped setteki disklerden birine ulaşılamadığında, disk striping with parity performans avantajını kaybeder; çünkü geri alım işlemi uzun sürer.
Ø Disk striping with parity, disk mirroring’ten daha fazla RAM ister
SQL Server ile RAID Kullanma
Veri kaybı engellenerek, hata toleransını ve Performansını geliştirmek için RAID kullanılabilir. Seçilen en iyi performans, az hata toleransına neden olur. Tersi düşünülürse; en büyük hata toleransı en düşük performansa neden olur.
Örneğin; RAID 0 ile çoklu diskler üzerindeki veritabanı biçimlendirildiği zaman ve RAID 1 ile başka disk üzerindeki transaction log yansıtıldığında iyi I/O performansı sağlanabilir.
Filegruplar Yaratma
Eğer donanım düzeni çoklu disk sürücüleri içerirse, veritabanı dosyaları filegruplar içine gruplanarak özel diskler üzerine belirli dosyalar ve nesneler yerleştirilebilir. File gruplar, dosya yığınlarıdır. SQL Server, default olarak bir filegrup içerir ve ihtiyaca göre yenileri eklenebilir.
Filegruplarla, belirli bir dosya üzerine belirli nesneler yerleştirilebilir. Veritabanının tamamını yedeklemek veya açmak yerine filegruplar veya dosyalar yedeklenebilir veya açılabilir (Restoring) .
FileGruplar Kullanılırken Dikkat Edilmesi Gerekenler
Filegrupları kullanma, gelişmiş veritabanı tasarım tekniğidir. Belirli filegruplar üzerine tabloları, indexleri en iyi şekilde yerleştirmek için veritabanı yapısını, veriyi, işlemleri ve sorguları çok iyi anlamak gerekir. Bir çok durumda, RAID sistemlerinin striping yeteneklerini kullanma, filegrupları yönetme ve tanımlama administrative sıkıntıyı eklemeden filegrupları kullanmayı onaylayan performans faydalarını sağlar.
Not: Log dosyaları bir filegrup parçası değildir. Log alanı, veri alanından ayrı olarak yönetilir.
FileGrupların Tipleri
İki tip filegrup aşağıda tanımlanmıştır.
Geçerli filegrup, başka bir filegrubun parçası olmayan diğer dosyaları ve birincil veri dosyasını içerir.
Kullanıcı tanımlı filegruplar, ALTER DATABASE ifadesindeki FILEGROUP anahtar kelimesinin kullanımıyla belirlenen filegruplardır.
Geçerli FileGroup’u Boyutlandırmak
Filegrubu boyutlandırma çok önemlidir. Geçerli filegrup bütün tabloları ve sistem tablolarını tutabilecek genişlikte olmalı. Eğer geçerli filegrup’un yeterli alanı yoksa, sistem tablolarına yeni bilgi eklenemez. Eğer kullanıcı tanımlı filegrup’un yeterli alanı yoksa, file gruba ayrılmış kullanıcı dosyaları etkilenir. Filegrup sadece, otomatik büyüme seçeneği işaretlenmemişse dolar. Boş alan elde etmek için otomatik büyüme seçeneği işaretlenmeli.
Örnek: Aşağıdaki örnek library veritabanında kullanıcı tanımlı bir filegrup yaratır ve kullanıcı tanımlı filegruba ikincil bir veri dosyası ekler.
ALTER DATABASE library
CREATE FILEGROUP loanhistorygroup
GO
ALTER DATABASE library
ADD FILE
(NAME = ‘year1’
FILENAME = ‘d:\msSQL7\data\loanhist1.ndf’,
SIZE = 5MB),
TO FILEGROUP loanhistorygroup
GO
FileGrup Bilgilerini İnceleme
Aşağıdaki sistem stored procedure’lar, filegruplar hakkında bilgi gösterir.
Sistem Stored Procedure
Tanım
Sp_helpfile[filename]
Geçerli veritabanı ile bağlanan dosyaların özelliklerini ve fiziksel isimlerini geri döndürür. Bu server’a bağlanan veya server’dan ayrılan dosya isimlerini belirlemek için kullanılır.
Sp_helpfilegroup[filegroup_name]
Geçerli veritabanı ile birleşen filegrupların özelliklerini ve isimlerini geri döndürür.
Kapasite Planlaması
Sistem yöneticisinin başlıca fonksiyonlarından biri bir veritabanı için alan ve depo ihtiyacını ayırmak, yönetmek ve denetlemektir.
Model Veritabanının ve Sistem Tablolarının Boyutunu Belirleme
Veritabanı tasarlandığı zaman, mantıksal yapısı kurulmalı. Yapı, fiziksel disk alanını dolduran dosyalar ve nesnelerdir. Bunlar, transaction log’u, tabloları ve indexleri içerir.
Bir veritabanı yaratılırken, SQL Server sistem tablolarını içeren model veritabanının bir kopyasını içerir. Yaratılan nesneler, bir yada daha fazla sistem tablosuna eklenecek yeni bir row oluşturur.
Veritabanı Boyutunu Hesaplamak için Gerekli Olan Faktörler
Veritabanını dolduracak alan miktarını hesaplamak için, aşağıdaki adımları göz önüne almak gerekir.
q Model veritabanının ve sistem tablolarının boyutu
q Tablolardaki veri miktarı
q İndex sayısı ve boyutu, anahtar alanın boyutu, row’ların sayısı.
q Transaction log’un boyutu, her bir transaction’ın boyutu
q Sistem tablolarının boyutu
Tablolardaki Veri Miktarını Hesaplama
Model veritabanına alan miktarı ayrıldıktan sonra, tablolardaki veri miktarı hesaplanır.
Bu hesaplama, toplam rowların sayısının, row boyutunun, toplam sayfa sayısının belirlenmesiyle yapılabilir.
Bir Tablodaki Sayfaların Sayısını Hesaplama
Tabloların sahip olabileceği rowların sayısı bilinirse, gerekli olan sayfaların sayısı hesaplanabilir.
Bunun için aşağıdaki methodlar kullanılabilir:
¨ Herbir kolonun içerdiği byte sayısını toplanarak bir satırdaki byte sayısı hesaplanır.
¨ Herbir veri sayfasının içerdiği satırların sayısını belirleme. Bunu yapmak için 8092’yi bir satırdaki byte sayısına böl.
¨ Tablodaki rowların sayısını herbir veri sayfasının içerdiği rowların sayısına böl. Sonuç tabloya yerleştirilecek sayfaların sayısına eşit olur.
Note: Bir row, bir sayfadan daha geniş olamaz.
Performans Etmenleri
Veritabanından iyi bir performans sağlamak için aşağıdaki önerileri incelemek gerekir.
Performans ve Hata Toleransını Geliştirmek için RAID’I Kullan
RAID, ya veriye hızlı ulaşmak için ya da verinin güvenliğini arttırmak için kullanılabilir. İstenen hata tolerans seviyesini korurken, performans elde etmek için RAID seviyesini kullan. Performans arttırımını basitleştirmek içiRAID disk striping seçilir.
Disk Sürücüsü İçeriğini Elemek (Disk Drive Contention)
Veritabanı dosyalarını ve transaction log dosyalarını farklı fiziksel diskler üzerine yerleştir. Böylece Transaciton log’a tesadüfi yazılanlar INSERT, UPDATE, DELETE işlemleriyle yarışmaz (çakışmaz). Ayrıca disk sürücüsü içeriğini elemek için filegruplar kullanılabilir.
Filegruplar Kullanılarak Yedeklemeleri Basitleştirmek
Farklı diskler üzerine veritabanı nesneleri yerleştirmek için filegruplar kullanılır. Sürekli değişen dosyalar grubu varsa, bu tablolar ve nesneler sık sık yedeklenebilir.
Tavsiye Edilen Uygulamalar
Aşağıdaki tavsiyeler veritabanı yönetiminde yardımcı olur.
& Veritabanı ve transaction logu farklı fiziksel diskler üzerine yerleştirme. Bu durum, media’nın başarısızlıklarına karşı korur.
& Veritabanı server’ları için donanım write-caching mekanizması tasarlanmadıkça, disk kontrolörleri üzerindeki write caching etkisiz hale getirilir.
& Bir veritabanı yaratıldığında yada değiştirildiğinde master veritabanı yedeklenmeli. Düzenli olarak veritabanı dosyalarının yedeklerinin alınması güzel bir düşüncedir.
& Transaction log için yeterli alanın olmasından emin olmak. Yeterli alan yoksa, veritabanına erişilemez ve veritabanı değiştirilemez. Yeterli alan yokluğundan kurtulmak için aşağıdaki hareketler takip edilmeli.
& Artışa yer sağlamak için yeterli alan ayırma
& Kullanılan toplam alanı sık sık denetleme
& Disk alanının otomatik olarak artması için otomatik artış seçeneğini kullan.
Transaction log alanı, toplam transaction log boyutunun yüzde 25’in altına düşerse, bu durumu uyaran bir alert (ikaz) ayarlama.
5.2. Transaction Log Nasıl Çalışır
5.3. Bir Veritabanı Yaratma
5.4. Veritabanı Seçeneklerini Ayarlama
5.5. Veritabanlarını Değiştirme
5.6. Veri ve Log Dosyalarının Büyümelerini Yönetme
5.7. Otomatik Dosya Büyümesinin Kullanımı
5.8. Bir Transaction Log'u Genişletme
5.9. Bir Veritabanı veya Dosyayı Genişletme
5.10. Bir Veritabanını Kaldırma (Dropping)
5.11. Çoklu Diskler Üzerindeki Veritabanlarını Yönetme
5.12. SQL Server ile RAID kullanma
5.13. Geçerli FileGroup'u Boyutlandırma
5.14. Model Veritabanının ve Sistem Tablolarının Boyutunu Belirleme
5.15. Tablolardaki Veri Miktarını Hesaplama
5.16. Tavsiye edilen uygulamalar
Veritabanlarına Giriş
Bir veritabanı yaratılırken, veri depo yapısı kurulur. Bu yapı bir veri dosyası içerir. Bu veri dosyasında ise veritabanı nesneleri, ve bir transaction log dosyası bulunur. Bir veritabanı yaratmadan önce SQL Server’ın veriyi nasıl yerleştirdiğini bilmek gerekir.
Veritabanı Dosyalarını Yönetme
Bir veritabanı yaratırken anlaşılması önemli olan şey, vertabanını yerleştirmek için gerekli olan disk alanının hesaplanması ve belirlenmesidir. Veri yerleştirme ile ilgili adımlar:
I. Bütün veritabanları, birincil veri dosyalarına (.mdf) ve bir ya da daha fazla transaction log dosyalarına (.ldf) sahiptir. Bir veritabanı ayrıca ikincil veri (.ndf) dosyalarına sahiptir.
II. Bir veritabanı yaratıldığı zaman, sistem tablolarını içeren, model veritabanının bir kopyası veritabanına kopyalanır. Bir veritabanının minimum boyutu model veritabanı boyutundan daha büyük veya boyutuna eşit olmalı.
III. Veri, Pages olarak adladırılan 8kb’lik disk bloklarının içine yerleştirilir. Bu, bir veritabanı megabyte başına 128 sayfa depolar anlamına gelir.
IV. Rowlar sayfaları span etmezler. Böylece tek bir row’daki maximum veri miktarı 8092 byte’tır.
V. Tablolar ve indexler extentler içine yerleştirilirler. Bir alan 8 sayfa veya 64kb’tır. Böylelikle bir
veritabanı megabyte başına 16 alana (extent) sahiptir. Küçük tablolar, diğer veritabanı nesneleriyle alanları paylaşırlar.
VI. Transaction log dosyaları, başarısız sistem olaylarında, veritabanını iyileştirmek için gerekli bütün bilgileri tutarlar. Transaction log’un boyutu veri dosyalarının %25’idir.
Transaction Log Nasıl Çalışır
Transaction Log, veri değişikliklerini (INSERT, UPDATE, DELETE gibi) kaydeder. Logging process aşağıdaki gibidir:
(a) Veri değişikliği uygulama tarafından gönderilir.
(b) Bir değişiklik çalıştırıldığı zaman, sahte veri sayfaları diskten memory’ye (buffer cache olarak adlandırılır) yüklenir.
(c) Herbir veri değiştirme statement’I log içine kaydedilir. Veritabanında değişiklik yapılmadan önce, değişkilik log içine kaydedilir ve diske yazılır. Bu tip log write-ahead log olarak adlandırılır.
(d) Veri sayfaları buffer cache içinde bulunduğunda ve log sayfaları, transaction log dosyaları içindeki disk üzerinde tutulduğunda, checkpoint process, tüm tamamlanmış işlemleri, disk üzerindeki veritabanına yazar.
Sistem başarısız olursa, otomatik geri alım işlemi, bütün tamamlanmış transactionları ileri göndermek için ve tamamlanmamış transactionları geri döndürmek için transaction logu kullanır. Log’daki Transaction marker’lar, otomatik geri alım işlemi sırasında kullanılır ve transaction’ların başlangıç ve bitiş noktalarını belirler. Bir checkpoint oluşursa, veri dosyaları diske yazılır.
Önemli: Eğer harddiskin bir disk-caching kontrolörü varsa, onu gözardı et. Bir veritabanı için disk kontrolcüsü tasarlanmadıkça, SQL Server veri güvenliği zarar görebilir.
Veritabanlarıyla Çalışma
Bir Veritabanı Yaratma
Databse Creation Wizard, SQL Server Enterprise Manager veya CREATE DATABASE kullanılarak bir veritabanı yaratılabilir. Bir veritabanı yaratma işlemi, o veritabanı için ayrıca bir transaction log yaratır. SQL Server’da bulunan herbir veritabanı ile ilgili bilgiler, master veritabanındaki sysdatabases tablosu içinde tutulur. Böylece Transact-SQL kullanıldığı zaman, bir veritabanı yaratmak için master veritabanı kullanılmalı.
Bir veritabanı yaratma, bir veritabanı ismi belirleme ve veritabanı dosyalarının yerini ve boyutunu belirtme işlemidir. Yeni bir veritabanı, model veritabanının bir kopyası olarak yaratılır. Model veritabanındaki ayarlar ve seçenekler yeni veritabanı içine kopyalanır.
Önemli: Bir veritabanı yaratıldığında, değiştirildiğinde veya kaldırıldığında master veritabanının yedeği alınmalı.
Bir veritabanı yaratırken, aşağıdaki seçenekler ayarlanabilir.
Primary
Bu seçenek, primary filegroup’daki dosyaları belirtir. Primary filegroup, veritabanı sistem tablolarının tümünü içerir. Ayrıca kullanıcı filegrup’lara verilmeyen tüm nesneleri içerir. Bir veritabanının sadece bir tane birincil dosyası vardır. Eğer PRIMARY anahtar kelimesi belirtilmemişse, statemnet’taki ilk dosya birincil dosya olur.
Dosya Adı
Bu seçenek dosya için, işletim sisteminin dosya adını veya path’ini belirler. Os_file_name’deki path, SQL Server’ın kurulduğu server üzerinde bir klasör belirler.
Boyut
Bu seçenek dosyanın boyutunu belirler. Boyutlar megabyte veya kilobyte olarak belirtilebilir. Veri dosyaları için minimum değer 1MB’tır, geçerli değer 3 Mb’tır ve log dosyalar için 1 Mb’tır.
MaxSize
Bu seçenek, genişleyen dosyanın maximum boyutunu belirler. Boyutlar megabyte veya kilobyte olarak belirtilebilir. Eğer herhangi bir boyut belirlenmemişse, dosya disk dolana kadar genişler.
Dosya Artışı
Bu seçenek, dosya artışını belirler. FILEGROWTH ayarı, MAXSIZE ayarını aşamaz. Sıfır değeri artış olmadığını gösterir. Boyutlar megabyte veya kilobyte veya % olarak belirtilebilir. FILEGROWTH belirlenmemişse, geçerli değer 10 percent’tir. Minimum değer 64 KB’dir.
Örnek: Aşağıdaki örnek 10 MB birincil veri dosyası ve 3 MB log dosyası ile library isimli bir veritabanı yaratır.
CREATE DATABASE library
ON
PRIMARY (NAME =library_data,)
FILENAME=’c:\msSQL7\data\library.mdf’,
SIZE=10MB,
MAXSIZE=15MB,
FILEGROWTH=20%)
LOG ON
(NAME=library_log,
FILENAME=’c:\ msSQL7\data\library.ldf’,
SIZE=3MB,
MAXSIZE=5MB,
FILEGROWTH=1MB)
Veritabanı Seçeneklerini Ayarlama
Bir veritabanı yarattıktan sonra veritabanı seçenekleri değiştirilebilir. Veritabanı seçenklerinin çoğu SQL Server Enterprise Manager tarafından ayarlanabilir. Veritabanı seçenekleri tümü ise sp_dboption stored procedure’ı tarafından ayarlanabilir.
Sık Kullanılan Seçenekler
Veritabanı Seçeneği
Tanım
Dbo use only
Sadece dbo veritabanı kullanımını sınırlar.
Read only
Bir veritabanını sadece okumak için tanımlar.
Select into/bulkcopy
Bir veritabanına log olmayan işlemleri kabul etmeye izin verir.
Single user
Belirli bir zamanda bir kullanıcının veritabanına erişimini sınırlar.
Trunc. Log on chkpt.
Checkpoint işlemi meydana geldiği zaman, transaction log’u kısaltır (Onaylanmış işlemleri silme). Production veritabanında kullanılmaz.
No chkpt. On recovery
Veritabanına bir checkpoint kaydı eklenip eklenmeyeceğini belirler.
Autoshrink
Veritabanı boyutunun otomatik olarak küçülüp küçülmediğini belirler.
Veritabanı Seçeneklerini İzleme
Aşağıdaki tablo, veritabanı seçenekleri ve veritabanları hakkındaki bilgileri gösteren sistem stored procedure’ları gösterir.
Sistem Stored Procedure
Tanım
Sp_dboption
Bütün uygun seçenekleri listeler.
Sp_helpdb
Server üzerindeki bütün veritabanlarını raporlar. Veritabanı ismini, boyutunu, sahibini, ID’sini, yaratılış tarihini ve seçeneklerini sağlar.
Sp_helpdb database_name
Sadece belirtilmiş veritabanını raporlar. Veritabanı ismini, boyutunu, sahibini, ID’sini, yaratılış tarihini ve seçenekleri sağlar. Ayrıca veri ve log için dosyaları listeler.
Sp_spaceused [objname]
Bir veritabanının, transaction log’un veya veritabanı nesnesinin kullandığı depo alanı gösterir.
Veritabanlarını Değiştirme
Veritabanı genişler ya da değişirse, veritabanı boyutu otomatik olarak genişletilebilir veya küçültülebilir. Bir veritabanı uzun zaman kullanılmazsa, bağlı olduğu dosyalarla birlikte kaldırılır.
Veri ve Log Dosyalarının Büyümelerini Yönetme
ALTER DATABASE library
MODIFY FILE (NAME= ‘library_log’,
SIZE = 10MB)
GO
ALTER DATABASE library
ADD FILE
(NAME=library_data2,
FILENAME = ‘c:\mssql7\data\library2.ndf’,
SIZE=10MB,
MAXSIZE=20MB)
GO
Veri dosyaları büyüdüğü zaman, veri veya log dosyalarının boyutları büyütülebilir. Veritabanı büyümeleri, SQL Server Enterprise Manager veya ALTER DATABASE ifadesi kullanılarak yönetilebilir. ALTER DATABASE ifadesini kullanabilmek için Master veritabanında olmak gerekir.
Veritabanı boyutu aşağıdakiler tarafından kontrol edilebilir.
Ø Otomatik olarak genişlemesi için veri tabanı ve log dosyalarını konfigüre ederek
Ø Veritabanı ve log dosyalarının max boyutunu el ile arttırarak
Ø İkincil veritabanı ve log dosyaları eklenerek
Otomatik Dosya Büyümesinin Kullanımı
Otomatik büyüme seçeneği, SQL Server Enterprise Manager veya ALTER DATABASE ifadesi kullanılarak ayarlanabilir. Otomatik dosya genişlemesi, artan veritabanı boyutu ile ilgili olan administrative task’ları azaltır. Başlangıç boyutu, max boyut ve herbir dosya için artış belirlenebilir. Max boyut belirlenmemişse, bir dosya diskteki uygun alan boyunca genişleyebilir.
Veritabanı Dosyalarını Genişletme
Varolan bir dosyanın otomatik olarak genişlemesi konfigüre edilememişse, boyutu yine de arttırılabilir.Büyüme artışı için, 0 değeri otomatik olarak büyütülemeyeceğini gösterir.
İkincil Veritabanı Dosyaları Ekleme
Veritabanı dosyasının boyutunu genişletmek için, ikincil veritabanı dosyaları yaratılabilir. RAID sistemlerinin disk-striping özellikleri kullanılmadığında, veri dosyalarını, farklı fiziksel diskler üzerine yerleştirmek için, ikincil veritabanı dosyaları kullanılır.
Aşağıdaki örnek geçerli log boyutunu artırır ve library veritabanına ikincil veri dosyası ekler.
ALTER DATABASE library
MODIFY FILE (NAME=’library_log’,
SIZE=10MB)
GO
ALTER DATABASE library
ADD FILE (NAME=’library_data2’,
FILENAME=’c:\msSQL7\data\library2.ndf’,
SIZE=10MB,
MAXSIZE=20MB)
GO
Bir Transaction Log’u Genişletme
Bir veritabanı genişlerse veya veri değiştirme aktivitesi artarsa, transaction logu genişletmeye ihtiyaç duyulabilir.
Log Denetimi
Log düzenli olarak denetlenirse, genişlemesi de kontrol altına alınabilir.
Uyarı: Eğer transaction log’un yeterli alanı yoksa, SQL Server transactionları kaydetmez ve veritabanında değişiklik yapmamıza izin vermez.
Transaction log, SQL Server Enterprise Manager ile elle denetlenebilir veya WinNT Performans Monitor kullanılabilir. Aşağıdaki tablodaki SQL Server Performans Monitor’daki, SQL Server Log nesneleri kullanılarak veritabanının transaction logları denetlenebilir.
SQL Server Log Yönetim Nesnesi
Görünümler
Log Bytes Per Flush
Buffer büyütüldüğü zaman, log bufferındaki, byte sayısını gösterir.
Log Flushes
Log artışlarının sayısını gösterir.
Log Flush Wait Time
Milisaniye olarak toplam bekleme zamanını gösterir.
Log Flush Waits
Log artışları üzerinde bekleyen onayların sayısını gösterir.
Gerekli Olduğu Zaman Log’u Genişletme
SQL Server Enterprise Manager veya ALTER DATABASE ifadesi kullanılarak transaction log genişletilebilir.
Extensive Log Aktivitelerine Neden Olan Durumlar
Extensive Log aktivitelerine neden olan durumlar, aşağıdakileri içerir.
· İndexlere sahip olan bir tabloya yüklenmiş bilgiyi içerir. İndexleri olmayan tablolar yüklenirken sadece extent allocationlar log edilir.
· Tek bir işlemle, bir çok değişiklik (INSERT, UPDATE, DELETE) yapan işlemleri içerir.
· WRITETEXT veya UPDATETEXT ve WITH LOG ifadeleri kullanılarak text veya image data eklemelerini ve değişikliklerini içerir. Transaction log alanını korumak için text ve image değişiklikleri log edilmez.
Bir Veritabanı veya Dosyayı Genişletme
Çok alan parçalandığı zaman veya alan ihtiyacı azaldığı zaman, veritabanının tamamı veya belirli veri dosyaları küçültülebilir.
Tüm Veritabanını Küçültme
Database Consistency Checker (DBCC) ifadesi olan SHRINK DATABASE çalıştırılarak veya SQL Server Enterprise Manager kullanılarak küçültülebilir. Bu, veri dosyalarının boyutlarını küçültebilir ama log dosyalarının boyutlarını küçültemez.
Örnek: Aşağıdaki örnek library veritabanının boyutunu 25 percent küçültür.
DBCC SHRINKDATABASE (library, 25)
Veritabanındaki bir Veri Dosyasını Küçültme
DBCC ifadesi olan SHRINKFILE ile küçültülebilir.
Örnek: Aşağıdaki örnek library veri dosyasının boyutunu 10 MB küçültür.
DBCC SHRINKFILE (library,10)
Bir Veritabanını Otomatik Olarak Küçültme
Kullanılmayan alanı ottomatik olarak geri almak için bir veritabanı seçeneği ayarlanabilir.
Bir veritabanı veya veri dosyası küçültülürken aşağıdaki adımlar göz önüne alınmalı.
· Resulting Database, model veritabanının veya içindeki verinin veya veri dosyasının boyutundan
daha geniş olmalı.
· Bir veritabanı veya veri dosyası küçültülmeden önce, veritabanı yedeklenmeli.
· İşletim sistemine alan sağlamak için TRUNCATE seçeneği kullanılır
· Tüm verileri, aynı filegrup’ta bulunan bir dosyadan diğerine taşımak için EMPTYFILE seçeneği kullanılır. SQL Server, verinin, EMPTYFILE seçeneği kullanılan dosya üzerine yerleştirilmesine izin vermeyecektir. ALTER DATABASE ifadesi kullanılarak boşaltılmış dosya silinebilir.
Bir Veritabanını Kaldırma (Dropping)
Bir veritabanına uzun zaman ihtiyaç duyulmadığında kaldırılır. Bir veritabanını kaldırma, veritabanı tarafından kullanılan veri dosyalarını ve veritabanını siler.
Bir Veritabanını Kaldırmak için Kullanılan İki Method
SQL Server Enterprise Manager kullanılarak veya DROP DATABASE ifadesi çalıştırılarak bir veritabanı kaldırılabilir.
Örnek: Aşağıdaki örnek ifade kullanılarak birden fazla veritabanı kaldırılabilir.
DROP DATABASE library, northwind, pubs
Bir veritabanı kaldırıldığı zaman aşağıdaki adımlar göz önüne alınmalı.
v SQL Server Enterprise Manager kullanılarak bir zaman anında sadece bir veritabanı kaldırılabilir.
v Transact-SQL kullanılarak, bir kerede farklı veritabanları kaldırılabilir.
v Bir veritabanını kaldırdıktan sonra, her login ID master veritabanını kullanır.
Note: Bir veritabanını kaldırdıktan sonra, master veritabanı yedeklenmeli.
Belirli Durumlarda Bir Veritabanı Kaldırılamaz
Ø Herhangi bir kullanıcı tarafından yazmak veya okumak için açılan bir veritabanı kaldırılamaz.
Ø Kopyalamayla elde edilen bir veritabanı kaldırılamaz.
Ø Backup’tan açılan bir veritabanı kaldırılamaz.
SQL Server msdb sistem veritabanını kaldırmaya izin verse bile, aşağıdakiler kullanılırsa kaldırmaya izin vermez.
q SQL Server Agent (SQL Server Aracısı)
q Replication (Kopyalama)
q SQL Server Web Sihirbazı
q Yedekleme History
q Data Transformation Services
Çoklu Diskler Üzerindeki Veritabanlarını Yönetme
Eğer veritabanı, çoklu diskler kullanırsa, hata toleranslarını arttırmak, daha iyi performans elde etmek, ve veritabanı büyümesine daha kolay yer sağlamak için RAID kullanılabilir. Ayrıca filegrup olarak adlandırılan dosya grupları, farklı disklere veritabanı ve log dosyalarını kaydetmek için kullanılabilir. File gruplar, administrative task’ları basitleştirir, ve kritik dosyaların yedekleme zamanını düşürür.
WinNT Server Hata Toleransını Giderme
RAID seviyeleri tarafından gruplandırılan hata toleransı, sistem başarısızlığa uğradığında veri kaybı olmadan, işletim sisteminin çalışmaya devam etmesini sağlar. 0, 1 ve 5, SQL Server ile en çok kullanılan RAID seviyeleridir.
Disk Yolunmalarını (Striping) Kullanma
Disk Striping, çoklu disklerin içinden veri yazar:
ü Disk striping tabanlı WinNT Server, RAID 0 seviyesini yerine getirir. Bu en yüksek RAID seviyesidir.
ü Eğer bir disk bozulursa, stripe set’teki hiç bir veriye erişilemez.
Disk Mirroring’i Kullanma
Disk mirroring, farklı disk üzerinde tamamiyle gereksiz bölünme kopyası tutarak media’nın başarısızlıklarına karşı korur.
¨ Disk mirroring tabanlı WinNT Server, bir yedekleme formudur ve RAID 1 seviyesini yerine getirir.
¨ Disk mirroring tabanlı WinNT Server çok disk alanı ister.
¨ Veri açma zamanı minimize edilebilir.
Disk Striping’I With Parity Kullanımı
Ø Disk striping with parity tabanlı WinNT Server RAID 5 seviyesini yerine getirir.
Ø Disk mirroring’e eşit olan hata tolerans koruması elde edilebilir ama az sayıda disk alanı kullanır.
Ø Sistem başarısızlığında, striped set’in disklerinde kalan kayıp veri yeniden oluşturulabilir.striped setteki disklerden birine ulaşılamadığında, disk striping with parity performans avantajını kaybeder; çünkü geri alım işlemi uzun sürer.
Ø Disk striping with parity, disk mirroring’ten daha fazla RAM ister
SQL Server ile RAID Kullanma
Veri kaybı engellenerek, hata toleransını ve Performansını geliştirmek için RAID kullanılabilir. Seçilen en iyi performans, az hata toleransına neden olur. Tersi düşünülürse; en büyük hata toleransı en düşük performansa neden olur.
Örneğin; RAID 0 ile çoklu diskler üzerindeki veritabanı biçimlendirildiği zaman ve RAID 1 ile başka disk üzerindeki transaction log yansıtıldığında iyi I/O performansı sağlanabilir.
Filegruplar Yaratma
Eğer donanım düzeni çoklu disk sürücüleri içerirse, veritabanı dosyaları filegruplar içine gruplanarak özel diskler üzerine belirli dosyalar ve nesneler yerleştirilebilir. File gruplar, dosya yığınlarıdır. SQL Server, default olarak bir filegrup içerir ve ihtiyaca göre yenileri eklenebilir.
Filegruplarla, belirli bir dosya üzerine belirli nesneler yerleştirilebilir. Veritabanının tamamını yedeklemek veya açmak yerine filegruplar veya dosyalar yedeklenebilir veya açılabilir (Restoring) .
FileGruplar Kullanılırken Dikkat Edilmesi Gerekenler
Filegrupları kullanma, gelişmiş veritabanı tasarım tekniğidir. Belirli filegruplar üzerine tabloları, indexleri en iyi şekilde yerleştirmek için veritabanı yapısını, veriyi, işlemleri ve sorguları çok iyi anlamak gerekir. Bir çok durumda, RAID sistemlerinin striping yeteneklerini kullanma, filegrupları yönetme ve tanımlama administrative sıkıntıyı eklemeden filegrupları kullanmayı onaylayan performans faydalarını sağlar.
Not: Log dosyaları bir filegrup parçası değildir. Log alanı, veri alanından ayrı olarak yönetilir.
FileGrupların Tipleri
İki tip filegrup aşağıda tanımlanmıştır.
Geçerli filegrup, başka bir filegrubun parçası olmayan diğer dosyaları ve birincil veri dosyasını içerir.
Kullanıcı tanımlı filegruplar, ALTER DATABASE ifadesindeki FILEGROUP anahtar kelimesinin kullanımıyla belirlenen filegruplardır.
Geçerli FileGroup’u Boyutlandırmak
Filegrubu boyutlandırma çok önemlidir. Geçerli filegrup bütün tabloları ve sistem tablolarını tutabilecek genişlikte olmalı. Eğer geçerli filegrup’un yeterli alanı yoksa, sistem tablolarına yeni bilgi eklenemez. Eğer kullanıcı tanımlı filegrup’un yeterli alanı yoksa, file gruba ayrılmış kullanıcı dosyaları etkilenir. Filegrup sadece, otomatik büyüme seçeneği işaretlenmemişse dolar. Boş alan elde etmek için otomatik büyüme seçeneği işaretlenmeli.
Örnek: Aşağıdaki örnek library veritabanında kullanıcı tanımlı bir filegrup yaratır ve kullanıcı tanımlı filegruba ikincil bir veri dosyası ekler.
ALTER DATABASE library
CREATE FILEGROUP loanhistorygroup
GO
ALTER DATABASE library
ADD FILE
(NAME = ‘year1’
FILENAME = ‘d:\msSQL7\data\loanhist1.ndf’,
SIZE = 5MB),
TO FILEGROUP loanhistorygroup
GO
FileGrup Bilgilerini İnceleme
Aşağıdaki sistem stored procedure’lar, filegruplar hakkında bilgi gösterir.
Sistem Stored Procedure
Tanım
Sp_helpfile[filename]
Geçerli veritabanı ile bağlanan dosyaların özelliklerini ve fiziksel isimlerini geri döndürür. Bu server’a bağlanan veya server’dan ayrılan dosya isimlerini belirlemek için kullanılır.
Sp_helpfilegroup[filegroup_name]
Geçerli veritabanı ile birleşen filegrupların özelliklerini ve isimlerini geri döndürür.
Kapasite Planlaması
Sistem yöneticisinin başlıca fonksiyonlarından biri bir veritabanı için alan ve depo ihtiyacını ayırmak, yönetmek ve denetlemektir.
Model Veritabanının ve Sistem Tablolarının Boyutunu Belirleme
Veritabanı tasarlandığı zaman, mantıksal yapısı kurulmalı. Yapı, fiziksel disk alanını dolduran dosyalar ve nesnelerdir. Bunlar, transaction log’u, tabloları ve indexleri içerir.
Bir veritabanı yaratılırken, SQL Server sistem tablolarını içeren model veritabanının bir kopyasını içerir. Yaratılan nesneler, bir yada daha fazla sistem tablosuna eklenecek yeni bir row oluşturur.
Veritabanı Boyutunu Hesaplamak için Gerekli Olan Faktörler
Veritabanını dolduracak alan miktarını hesaplamak için, aşağıdaki adımları göz önüne almak gerekir.
q Model veritabanının ve sistem tablolarının boyutu
q Tablolardaki veri miktarı
q İndex sayısı ve boyutu, anahtar alanın boyutu, row’ların sayısı.
q Transaction log’un boyutu, her bir transaction’ın boyutu
q Sistem tablolarının boyutu
Tablolardaki Veri Miktarını Hesaplama
Model veritabanına alan miktarı ayrıldıktan sonra, tablolardaki veri miktarı hesaplanır.
Bu hesaplama, toplam rowların sayısının, row boyutunun, toplam sayfa sayısının belirlenmesiyle yapılabilir.
Bir Tablodaki Sayfaların Sayısını Hesaplama
Tabloların sahip olabileceği rowların sayısı bilinirse, gerekli olan sayfaların sayısı hesaplanabilir.
Bunun için aşağıdaki methodlar kullanılabilir:
¨ Herbir kolonun içerdiği byte sayısını toplanarak bir satırdaki byte sayısı hesaplanır.
¨ Herbir veri sayfasının içerdiği satırların sayısını belirleme. Bunu yapmak için 8092’yi bir satırdaki byte sayısına böl.
¨ Tablodaki rowların sayısını herbir veri sayfasının içerdiği rowların sayısına böl. Sonuç tabloya yerleştirilecek sayfaların sayısına eşit olur.
Note: Bir row, bir sayfadan daha geniş olamaz.
Performans Etmenleri
Veritabanından iyi bir performans sağlamak için aşağıdaki önerileri incelemek gerekir.
Performans ve Hata Toleransını Geliştirmek için RAID’I Kullan
RAID, ya veriye hızlı ulaşmak için ya da verinin güvenliğini arttırmak için kullanılabilir. İstenen hata tolerans seviyesini korurken, performans elde etmek için RAID seviyesini kullan. Performans arttırımını basitleştirmek içiRAID disk striping seçilir.
Disk Sürücüsü İçeriğini Elemek (Disk Drive Contention)
Veritabanı dosyalarını ve transaction log dosyalarını farklı fiziksel diskler üzerine yerleştir. Böylece Transaciton log’a tesadüfi yazılanlar INSERT, UPDATE, DELETE işlemleriyle yarışmaz (çakışmaz). Ayrıca disk sürücüsü içeriğini elemek için filegruplar kullanılabilir.
Filegruplar Kullanılarak Yedeklemeleri Basitleştirmek
Farklı diskler üzerine veritabanı nesneleri yerleştirmek için filegruplar kullanılır. Sürekli değişen dosyalar grubu varsa, bu tablolar ve nesneler sık sık yedeklenebilir.
Tavsiye Edilen Uygulamalar
Aşağıdaki tavsiyeler veritabanı yönetiminde yardımcı olur.
& Veritabanı ve transaction logu farklı fiziksel diskler üzerine yerleştirme. Bu durum, media’nın başarısızlıklarına karşı korur.
& Veritabanı server’ları için donanım write-caching mekanizması tasarlanmadıkça, disk kontrolörleri üzerindeki write caching etkisiz hale getirilir.
& Bir veritabanı yaratıldığında yada değiştirildiğinde master veritabanı yedeklenmeli. Düzenli olarak veritabanı dosyalarının yedeklerinin alınması güzel bir düşüncedir.
& Transaction log için yeterli alanın olmasından emin olmak. Yeterli alan yoksa, veritabanına erişilemez ve veritabanı değiştirilemez. Yeterli alan yokluğundan kurtulmak için aşağıdaki hareketler takip edilmeli.
& Artışa yer sağlamak için yeterli alan ayırma
& Kullanılan toplam alanı sık sık denetleme
& Disk alanının otomatik olarak artması için otomatik artış seçeneğini kullan.
Transaction log alanı, toplam transaction log boyutunun yüzde 25’in altına düşerse, bu durumu uyaran bir alert (ikaz) ayarlama.