Üzerinde index bulunan bir tabloya kayıt eklendiğinde Page ve Row konumları nasıl etkilenir? Page Split ne zaman oluşur?
Birçok yerde indexlenmiş tabloya yeni kayıt eklendiğinde veya mevcut kayıt silindiğinde kayıtların adreslerinin fiziksel olarak değişip değişmediği sorusu gelmektedir. Bunu basit bir örnekle açıklayalım. UYE isminde bir tablo oluşturalım. ID alanı üzerinde Clustered Index oluşturalım. İlk kayıt olarak ID=4 olarak “D” ifadesini ekleyelim.
Bundan önce SQL Server mimarisini anlattığımız yazılardan table ve index datasının içeriğinin nasıl depolandığını biliyoruz. Peki Stored Procedure, View, Function, Trigger benzeri nesneler nerede store ediliyor. Bunlar tabiki MDF içerisinde aynı mantıkta Page’ler içerisinde saklanmaktadır. Bu nesneler System Base Tables olarak tanımlanan sistem tablolarında tutulmaktadır. Bu tablolar mevcut veri tabanlarına ait metadata bilgisini saklar. Bu tablolar kullanıcı erişimi için değil SQL Server Database Engine tarafından kullanılır. Bu tablolar ancak Dedicated Administrator Connection (DAC) bağlantısıyla erişilebilir. Okumaya devam et →
Boot Page Nedir? Birçok kişi SQL Server’da Boot Page bozulma sorununu yaşamıştır. Her veri tabanı kendisi hakkında kritik bilgileri içeren bir Page’a sahiptir. Bu page FileId=1 ve PageId=9 olarak oluşturulur. Bu sayfanın en önemli özelliği sözkonusu veri tabanını başlangıcını temsil ediyor olmasıdır. Bu sayfanın bozulması durumunda hiçbir şekilde o veri tabanı ayağa kaldırılamaz, DBCC CHECKDB gibi yöntemler de fayda sağlamaz. Page (1:9)’da corrupt oluşması durumunda yapılacak tek şey elimizdeki yedekten Restore işlemi yapmaktır.
DBCC PAGE(BLOG, 1, 9, 3) komutu aracılığıyla BLOG isimli veri tabanının başlangıç sayfasını dump etmiş oluruz. Page’in içeriğinde veri tabanının ilk oluşturulduğu versiyonu, şu anki sunucunun versiyonu (dbi_Version ve dbi_CreateVersion), son (Full, Log, Differential) backup alma zamanı, yedeğin alındığı LSN numarası (Log Sequence Numbers), dirty pages LSN numarası, DBCC CHECKDB en son ne zaman başarıyla çalıştığı (dbi_DBCCLastKnownGood) gibi bilgiler bulunmaktadır.
Bu bilgilere aynı zamanda DBCC DBINFO komutuyla da erişebiliriz.
DBCC DBINFO('BLOG')
--veya
DBCC DBINFO('BLOG') WITH TABLERESULTS
Boot Page’in bozulması durumunda aşağıdaki gibi bir hata mesajı ile karşılaştırız.
SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0xcdee22fa; actual: 0xcb6ea2fa). It occurred during a read of page (1:9) in database ID 19 at offset 0x00000000013000 in file ‘C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\BLOG.mdf’. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
SQL Server veri tabanı mimarisi serisinin dördüncü bölümünde Table ve Index nesnelerinin nasıl oluşturulduğu, MDF içerisinde nasıl konumlandırıldığını detaylandıracağız. Bu amaçla temel olarak aşağıdaki kavramları incelemiş olacağız.
SQL Server Table, Heap, B-Tree (Balanced Search Tree), Index
Clustered Index,
NonClustered Index,
Columnstore Index
SQL Server JOIN türleri kullanılır, INNER JOIN, OUTER JOIN (LEFT JOIN, RIGHT JOIN, CROSS JOIN) nedir?
Bu makalede genelde ilişkisel veritabanı [Relational Database] sistemlerinin özelde SQL Server’in temel konularından biri olan JOIN seçeneklerini özetleyeceğiz. SQL Server ne tür JOIN seçenekleri sunuyor, bu seçeneklerin birbirinden farkı nedir, olay sadece syntax farklılığı mıdır, performans cephesinden neler oluyor . . . bu soruları yanıtlayacağız. Table veya view gibi kaynakları birbirine bağlayan JOIN ifadeleri bu kaynaklara uygulanmış SELECT, INSERT.SELECT, SELECT.INTO, UPDATE ve DELETE işlemlerinde FROM deyimiyle birlikte kullanılır. Okumaya devam et →