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: Yedeği alınamaz dolayısıyla yedekten geri dönülemez Recovery modelini değiştiremeyiz default olarak simple modeldedir FileGroup sayısını arttırmamız mümkün değildir 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 […]

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 Log Shipping Mimarisi

SQL Server 1 ay önce

SQL Server Log Shipping Mimarisi nedir? Log Shipping Nedir? Log Shipping Kurulumu nasıl yapılır?İçindekilerLog Shipping Nedir?Log Shipping Nasıl Çalışır?Log Shipping Kurulumu Merhabalar Bu yazımda MS SQL Server mimarisi olan LOG SHIPPING mimarisinden ve kurulumundan bahsettim. Log Shipping Nedir? Log Shipping, Primary veritabanında meydana gelen değişikliklerin (inserts, updates, deletes) Secondary  veritabanına aktarılmasını sağlar. Bu işlem, düzenli olarak alınan transaction log yedeklerinin bir veya birden fazla Secondary sunucuya uygulanmasıyla gerçekleşir. Log Shipping, genellikle şunlar için kullanılır: Felaket Kurtarma (Disaster Recovery): Primary Sunucu Arızalandığında Secondary sunucudan devam etmeyi sağlar. Burada tabiki herkesin aklındaki soru Veri Kaybı  evet burada bir veri kaybı olacaktır. Bunun sebebi alınan son transaction log backup sonrasında yapılan işlemler Secondary sunucuda bulunmayacaktır. Kısaca özetlemek gerekir ise Her 10 Dakikada bir Transaction Log backup alınan ortamda En son alınan Transaction Log backup saat 12:50 de alındığını düşünelim ve Primary sunucumuz arızalandığı saat ise 12:55 burada 5 dakika içerisinde gerçekleşen işlemlerin hiç […]

User-Defined Functions(Kullanıcı Tanımlı Fonksiyonlar)

SQL Server 1 ay önce

User-Defined Functions(Kullanıcı Tanımlı Fonksiyonlar) SQL Server 2000 ile gelen bir özelliktir.İçindekilerTable-Valued Functions (Tablo Değerli Fonksiyonlar)Scalar Functions (Skalar Fonksiyonlar)Inline Table-Valued Functions (Satır İçi Tablo Değerli Fonksiyonlar) Bu yazımda ihtiyaçlar doğrultusunda kendinize ait raporlamaları aralıklı günlere göre yada istediğiniz değerlere göre ihtiyaçlarınızı karşılayabilirsiniz. Başlıktanda anlaşıldığı gibi kullanıcıların ihtiyaçlarına göre kendilerine ait fonksiyonlarını oluşturabileceklerdir. 3 çeşit fonksiyon vardır. Table-Valued Functions (Tablo Değerli Fonksiyonlar) Viewlerle büyük benzerlikler içerir ancak farklı olarak dışarıdan parametre alabilirler. belirli bir tarih aralığındaki verileri dondurmek istediğimizde ve büyük verileri sorgulamak istediğimizde kullanılır. Örnek olarak 2 tarih arasındaki verileri döndürmek CREATE FUNCTION dbo.fn_SalesBaslaBitisTarih (@startDate DATE, @endDate DATE) RETURNS TABLE AS RETURN ( SELECT * —-Yada istenilen kolonlar FROM Sales WHERE OrderDate BETWEEN @startDate AND @endDate — ekstra koşul eklenebilir ) SELECT * FROM dbo.fn_ SalesBaslaBitisTarih (‘2025-01-01’, ‘2025-03-01’) Bu sorgu, 2025-01-01 ile 2025-03-01 arasındaki tüm verileri listeleyecektir. Scalar Functions (Skalar Fonksiyonlar) Skalar fonksiyonlar birden fazla satır üzerinde işlem yapmaz; her zaman […]

SQL Server 2016 ‘dan 2022 Sürüm bilgileri

SQL Server 1 ay önce

SQL Server 2016 ‘dan 2022 sürümüne kadar eklenen önemli işlevler ve gelişmeler hakkında bilgi sahibi olmak  Bu yazımızda SQL Server 2016 ,SQL Server 2017, SQL Server 2019, SQL Server 2022 sürümlerinin yeniliklerini nelerdir ? Bu sürümler ile göze çarpan ve ortamlara göre kullanılması gereken etkenler ne olmalıdır sorularına cevap vermeye çalışacağım

1 Yorum

  • […] ayar başlıklarına ayrılmış sekmelerden oluşur: Server Configuration, Data Directories, TempDB, MaxDOP, Memory ve Filestream gibi sekmeler burada yer alır. SQL Server 2022 ile birlikte gelen […]

Yorum Yaz

Rastgele