Hasan Tatarlı - Sql Server Sistem Veritabanları
11 Ocak 2019 11 Ocak 2019 hasantatarli
Bu yazımda, son zamanlarda çevremdeki yazılımcı arkadaşlardan aldığım sorular üzerine SQL Server’da sistem veritabanlarının neler olduğunu ve ne için kullanıldıklarını detaylarıyla anlatmaya çalıştım.
Sql Server ilk kurulduğunda default olarak bazı sistem veritabanları kurulur. Bu sistem veritabanlarına baktığımızda;
default olarak kurulu gözükür.
Bunlar haricinde kurulu olarak gelen fakat gözükmeyen resource isminde bir veritabanı ve Sql Server’da replikasyon kurulduğunda kurulan bir distribution veritabanı daha sistem veritabanları içerisindedir.
Sistem veritabanlarını sorgulamak için genelde aşağıdaki script kullanılır.
select * from sys.databases where database_id &lt; 5
Sistem veritabanları Sql Server ilk kurulduğunda otomatik olarak create edildiği için ilk 4 sıra her zaman sistem veritabanları için ayrılır. distribution veritabanı, replikasyon default olarak kurulu gelmediği için bulunmaz. Bundan dolayı replikasyon kurulu sistemlerde, sistem veritabanlarını sorgularken distribution veritabanını da göz önünde bulundurmak gerekir.
Şimdi bu veritabanlarının ne işe yaradığına bakalım;
master veritabanında bütün sistem seviyesindeki bilgiler tutulur. Kullanıcı hesapları, linkserverlar, sistem konfigürasyonları ve endpoint gibi sistem seviyesindeki metadataların bilgileri bu veritabanı altında tutulur. Ayrıca diğer veritabanlarının tutulduğu lokasyon bilgileri, sql server’ın initial bilgileri de bu veritabanında tutulur. Bu nedenle master veritabanının erişilemez olması durumunda sql server başlatılamayacaktır. Bu yüzden sistem veritabanlarının düzenli olarak backuplarının alınması çok önemlidir.
model veritabanı sql server üzerinde oluşturulacak her bir veritabanı için template görevi görür. Yeni bir veritabanı oluşturulmak istenildiğinde veritabanı büyüklüğü, dil ayaları ve recovery model gibi bilgileri değiştirilerek diğer bilgilerin model veritabanında altından alınarak oluşturulmasını sağlar. Ayrıca Sql Server her restart edildiğinde tempdb yeniden oluşturulduğundan dolayı yine bu veritabanı bilgilerini model veritabanından alarak tempdb’yi oluşturur. Bu nedenle bütün sunucularda model veritabanı bulunur.
msdb, sql server agent tarafından kullanılan uyarıları ve jobları schedule etmek için ve Service Broker, Database Mail gibi Sql Server’ın diğer özellikleri için kullanılır. Jobların bilgileri, çalışma geçmişleri, zamanları gibi metadatalar bu veritabanı üzerinde saklanır.
tempdb, veritabanı yöneticilerinin ve yazılımla uğraşan hemen hemen herkesin direk olarak kullandığı veritabanlarından biridir. tempdb geçici user object ve database engine tarafından oluşturulan internal object gibi yapılarda kullanılır;
Geçici user objects: local ve global temp tablolar, temp stored procedure’ler, temp variable’lar ve temp olarak oluşturulan indexler
Query planda gördüğümüz spool, cursor, sort ve temporary large objects(LOB) leri tutmak için oluşturulan work tablelar,
hash join ve hash aggregate operasyonları için work filelar
index create ve rebuild işlemlerinde SORT_IN_TEMPDB on olarak şeçilmişse veya querylerde kullanılan GROUB BY, ORDER BY, UNOIN gibi işlemlerde kullanılır.
Ayrıca veri güncellemeleri işlemlerinde, online index operasyonları, AFTER trigger kullanımları gibi operasyonlarda da tempdb kullanılmaktadır.
tempdb, yoğun kullanılan sistemlerde hem çok kritik, hem de sağlıklı ve performanslı olarak çalışması için çok önemli bir yere sahiptir. Doğru konfigüre edilmediğinde ciddi anlamda performans problemlerine sebep olabilmektedir. Bu yüzden tempdb’nin konfigüre edilmesi önemli konulardan birisidir. Başka bir makelede tempdb’nin nasıl konfigüre edileceğini paylaşacağım.
Resource veritabanı, bütün sql server system objelerini içeren read-only bir veritabanıdır. Sql server system objeleri fiziksel olarak resource veritabanıda tutulur fakat mantıklsal olarak her veritabanı altında sys şeması altında gözükür. resource veritabanını Sql Server Management Studio’da veya sys.databases tablosunda gözükmese de
C:\Program Files\Microsoft SQL Server\MSSQL<version>.<instance_name>\MSSQL\Binn\ klasörü altında mssqlsystemresource.mdf ve mssqlsystemresource.ldf isimli fiziksel dosyaları görebilirsiniz.
Daha önce de belirttiğim gibi distribution veritabanı Sql Server’ın default olarak kurulu olduğunda sunucuda bulunmaz. Replikasyon kurulumu yapmak istediğinizde ve ayarlarını tamamladıktan sonra bu database sistem veritabanları altında gözükmektedir. Bu veritabanı, bütün replikasyon tiplerine ait metadata ve historik data ile beraber, transactional replikasyona ait transactionları tutmaktadır.
Database distribution master model msdb resource sistem Sql Server system databases tempdb