SQL Server “TempDB” Nedir?

SQL Server “TempDB” Nedir?

SQL Server’da bulunan system database’leri, Tüm sisteme, veri tabanları ait kritik bilgileri tutar. TempDB bu System database’lerinden biridir. Öncelikle TempDB nedir? ve ne işe yarar?

TempDB sistem üzerinde geçici objeleri saklayan veritabanıdır. Bu yüzdende diğer sistem veri tabanları gibi sistemin hayatına devam edebilmesi için büyük öneme sahiptir. Bu sistem veri tabanı genel olarak içerisinde şunları barındırır:

  • Geçici tablolar(Temp Tables) ve buna ait veriler.
  • Stored Procedur’ler
  • Tablo Değişkenleri
  • Online index işlemleri
  • Trigger’lar
  • İstatistik Güncellemeleri(Statistics Updates)
  • Cursor’lar
  • DBCC CheckDb Komutu Operasyonları
  • Join İşlemleri

SQL Server servisi yeniden başlatıldığında TempDB tekrar drop edilip yeniden oluşturulur. Bu yüzden verileri düzenli olarak tempDB’de saklamak pekte güvenilir bir yöntem tercihi değildir. TempDB hakkında biraz daha detaylı bilgi edinecek olursak:

  1. Yedeği alınamaz dolayısıyla yedekten geri dönülemez
  2. Recovery modelini değiştiremeyiz default olarak simple modeldedir
  3. FileGroup sayısını arttırmamız mümkün değildir
  4. Read Only mode’a alınabilme özelliğine sahip değildir

TempDB içerisinde normal veritabanında oluşturduğumuz gibi bir allocation süreci işler bu süreçte üç adet page söz konusudur. Bunlar PFS(Page Free Space), GAM(Global Allocation Map), SGAM(Shared Global Allocation Map) Her bir tempDB data file için birer adet PFS ve SGAM page mevcuttur. Bir sql server objesini oluşturmak yada silmek için Sql Server PFS ve SGAM page’lerine yazar. Latch dediğimiz Yapılar bu Page’leri hafızada korur.

PFS(Page Free Space): Her page için bir byte’lık bir bilgi tutar. Bu bilgi ilgili Page içerisinde ne kadar boş alan olduğunu ve ne için kullanıldığını tutar. Bir PFS sayfası, yaklaşık olarak 8.088 sayfayı (Yaklaşık 64MB data) kapsar. Herhangi bir veritabanı data file için ilk page PFS dir. Page ile ilgili bir hatada bunu görebiliriz.

“Örnek verecek olursak; 2:1:1 ifadesini yorumlayalım Database id:2 ve 1 numaralı page demektir.”

“Bir diğer örneğimiz 5:3:1 database id:5 file id:3 ve ilk page demektir.”

GAM(Global Allocation Map): GAM page her extent’in kullanım bilgisini tutar. Her extend için bir flag bit kullanılması bir GAM page’in 4GB(6400 extend) bir alanı yönetmesine olanak sağlar.Bir data file’daki ilk GAM page numarası 2’dir. Yani 2:1:2 TempDB’deki ilk GAM page’idir

SGAM(Shared Global Allocation Map):SGAM bu extend’in mixed extend olup olmadığını ve boş page olup olmadığını belirtir.Buradaki flag bit’in “1” olması mixed extent olduğunu ve boş pagelere sahip olduğunu “0” olması ise extent mixed olarak kullanılmadığını veya mixed extend olarak kullanılıyor fakat boş sayfa olmadığını belirtir.GAM gibi 4GB(6400 extend)bir alanı yönetir. Bir data file’daki ilk SGAM page’im numarası 3’tür. Yani 2:1:3 tempDB’nin ilk SGAM page’idir.

TempDB MetaData Contention

Birden fazla session geçici tablo oluşturduğu sırada TempDB’nin sistem tablolarına aynı anda erişmek ister bunun sonucunda MetaData contention oluşur. Bu iş yükü sistem tablolarında gecikmeye sebep olur ve sorgu performansları düşmeye başlar. TempDB üzerindeki darboğazı gidermek ve iş yükünü bölmek için TempDB içerisine yeni file eklenmelidir.

Bu tip durumların yaşanmasını önlemek için yapılması gerekenlere değinecek olursak.

  • Index Rebuild işlemlerinde “sort in tempDB” seçeneği tempDB performansını etkiler.
  • TempDB contention durumunu kontrol etmek ve Microsoft’un “allocation contention” problemini azaltmak için önerilerine buradan ulaşabilirsiniz.
  • Autogrowth özelliği açık olmalıdır.
  • SQL Server’da çalıştırmış olduğumuz sp komutu (sp_whoIsactive @show_sleeping_Spids = 0) ile anlık login olan sorguları kontrol ederken wait_info column içeriğinde görmüş olduğumuz PAGELATCH_EX, PAGELATCH_UP ve CXPACKET türleri TempDB ile doğrudan ilgilidir.

TempDB’nin sistem üzerinde tutulduğu yer bilgisi için sp_Helpdb tempdb komutu kullanılabilir.

TempDB’nin kullandığı disk alanını sys.dm_db_file_space_usage DMV’sini sorgulayarak görebiliriz.

Tempdb içerisinde çok fazla yer kaplayan nesneleri görmek için sys.dm_db_session_space_usage ve sys.dm_db_Task_space_usage kullanılabilir.

 

 

Benzer Yazılar

SQL SERVER SERViS RESTART HATASI

SQL Server 2 gün önce

Bu haftaki yazımızda karşılan bir hata üzerindeki; logları ve çözümünü anlatacağım. Aşağıdaki GÖRSEL-1’de görüldüğü üzere SQL servisini restart ettiğimiz sırada bir hata ile karşılaşıyoruz. Servis running state’e geçemiyor. “The request failed or the service did not respond in a timely fashion. Consult the event log or other applicable error logs for details” şeklinde bir uyarı veriyor. Hatanın çözümüne doğru ilerlerken farklı servis hesaplarıyla veya “Local System” hesabı ile restart etmeye çalıştığınızda servis ilginç bir şekilde ayağa kalkıyor. Ancak Always on sistem çalışıyorsanız farklı servis hesaplarını kullandığınızda always on size haberleşme izni vermiyor. Aynı hesabın şifresi ile ilgili sorunlar olduğu düşünüp hesabın şifresini de değiştirdiğiniz de yine sonuç alamıyorsunuz. Burdan yola çıkıldığında sıkıntı servis hesabında gibi görünüyor olabilir ancak çözüme geçildiğinde regedit üzerinde yapacağımız bir işlem ile sorunu çözüyoruz. Servis hesabının kaydının olduğu regedit kaydını siliyoruz. Regedit üzerindeki servis hesap bilgisi güncellendiğinde sorun çözülmüş olmakta. GÖRSEL-1  Servis restart edildiğinde SQL’in verdiği Error […]

SQL’DE İKİ NODE’UN RESOLVING DURUMA DÜŞMESİ VE ÇÖZÜMÜ

SQL Server 3 hafta önce

Bu yazımızda failover olma işlemi esnasında karşılaşılan bir durumdan kısaca bahsedeceğim. Kısa bir yazı olacak ama önemli olduğunu düşünüyorum. Bazen failover olmak istediğinizde cluster secondary’e node’a failover olamaz, hem secondary hem de primary node’unuz resolving durumuna geçer. Bu durumla daha çok otomatik failover olma durumlarında karşılaşılır çünkü sistem failover’a aslında hazır değildir ancak cluster bunu bir şekilde bilemez. Failover olma gerçekleşemez bir anlamda sql cluster askıda kalır ve hiçbir sunucu da sql engine çalışmaya devam edemez. (GÖRSEL-1) GÖRSEL-1 GÖRSEL-1 üzerinde gördüğünüz üzere availability group resolving duruma düşer. Availability replica’lar üzerinde de gördüğünüz üzere primary ve secondary tüm node’lar resolving state’e düşer. Böyle bir durumunda iki farklı çözüm yolumuz var;   Çözüm: ikinci node’a sunucu restart’ı atmak. Bu noktada secondary sql node’a servis restart atmak işe yaramıyor. Zaten db’ler iki taraflı resolving modda. O sebeple ancak sunucu restart atıldığında cluster ayakta olan sunucuyu görüyor ve askıda kalma durumundan ilk başta primary […]

Query Store Nedir?

SQL 3 hafta önce

Query Store ile birlikte execution planın seçimi ve bu sürecin performansa etkisini anlayabiliriz. SQL Server içerisinde bulunan Query Store özelliği, çalıştırılan sorguların execution planını ve bu sırada oluşan istatistiklerini otomatik olarak yakalar. Böylece query plan değişikliği ile oluşan problemleri de hızlı ve kolay şekilde fark edebiliriz. Elinizde bulunan bir sorguya ait query plan zamanla değişebilir. Bunun birçok sebebi vardır. Tablo yapısına yeni bir column eklenmesi Veri tipinin değiştirilmesi Sorgularda yeni parametrelerin eklenip çıkarılması Verilerde, schemalarda veya sorgu parametrelerindeki değişiklik Burada önemli olan ise bazen bu değişimler sorgunun yavaş çalışmasına neden olur. Query Store ile beraber bu yavaşlığın kök nedenine inmek daha kolay oldu. Ayrıca query store sayesinde ilgili sorguya ait read-write bilgileri ve cpu tüketimi bilgilerine de erişebilirsiniz. Query Store’u veritabanı seviyesinde aktif edebiliyoruz. Veritabanı üzerine sağ tıklayarak properties diyoruz ve Query Store sekmesine geliyoruz. Operation Mode alanından Read Write’ı seçiyoruz. Böylelikle Query Store gerekli bilgiyi toplayabilir ve size ilgili sonuçları […]

0 Yorum

Yorum Yaz

Rastgele