Aracılığıyla paylaş


Tempdb alan kaynağı idaresi

Şunlar için geçerlidir: SQL Server 2025 (17.x) ve sonraki sürümleri

tempdb alan kaynağı yönetimini etkinleştirdiğinizde, kontrolsüz sorguların veya iş yüklerinin tempdb içinde büyük miktarda alan tüketmesini önleyerek güvenilirliği artırır ve kesintileri önlersiniz.

SQL Server 2025'ten (17.x) başlayarak, bir iş yükü grubu tarafından kullanılan toplam alan miktarına tempdb bir sınır uygulamak için resource governor kullanabilirsiniz. İş yükü grubu bir uygulama, kullanıcı, kullanıcı grubu vb. ile ilişkilendirilebilir. Bir istek (sorgu) sınırı aşmaya çalıştığında resource governor, iş yükü grubu sınırının zorunlu kılındığını belirten ayrı bir hatayla iptal eder.

Aslında, paylaşılan tempdb alanı farklı iş yükleri arasında bölümleyebilirsiniz. Örneğin, görev açısından kritik bir uygulama tarafından kullanılan bir iş yükü grubu için daha yüksek bir sınır ayarlayabilir ve diğer tüm iş yükleri tarafından kullanılan iş yükü grubu için default daha düşük bir sınır ayarlayabilirsiniz.

Adım adım yapılandırma örnekleri için bkz . Öğretici: Tempdb alanı kaynak idaresini yapılandırma örnekleri.

Kaynak yöneticisini kullanmaya başlama

Resource Governor, farklı uygulamalar, kullanıcılar, kullanıcı grupları vb. için farklı tempdb alan sınırları ayarlamak için esnek bir çerçeve sağlar. Özel mantığı temel alan sınırlar da ayarlayabilirsiniz.

SQL Server'da resource governor'ı yeni kullanıyorsanız kavramlar ve özellikleri hakkında bilgi edinmek için bkz. resource governor .

Kaynak yöneticisi yapılandırma kılavuzu ve en iyi yöntemler için bkz . Öğretici: Kaynak yöneticisi yapılandırma örnekleri ve en iyi yöntemler.

Tempdb alanı tüketiminde sınırları ayarlama

Bir iş yükü grubu tarafından alan tüketimini iki yoldan biriyle sınırlayabilirsiniz tempdb :

  • Bağımsız değişkeni kullanarak GROUP_MAX_TEMPDB_DATA_MB ayarlayın.

    Sabit sınır, iş yükü tempdb kullanım gereksinimleri önceden bilindiğinde veya boyut değişmediğinde tempdb kullanışlıdır.

  • argümanını kullanarak GROUP_MAX_TEMPDB_DATA_PERCENT ayarlayın.

    Yüzde sınırı, zaman içinde tempdb maksimum boyutunu değiştirdiğinizde, kaynak yöneticisini yeniden yapılandırmadan, her iş yükü grubuna tempdb mevcut alanın orantılı olarak değişmesini istemeniz durumunda kullanışlıdır. Örneğin, SQL Server çalıştıran bir Azure VM'nin ölçeğini büyütüp boyut üst tempdb sınırını artırırsanız, tempdb yüzde sınırı olan her iş yükü grubu için kullanılabilir alan da artar.

GROUP_MAX_TEMPDB_DATA_MB ve GROUP_MAX_TEMPDB_DATA_PERCENT bağımsız değişkenleri hakkında daha fazla bilgi için CREATE WORKLOAD GROUP veya ALTER WORKLOAD GROUP bölümüne bakın.

Aynı iş yükü grubu için hem sabit hem de yüzde sınırları belirtilirse, sabit sınır yüzde sınırından önceliklidir.

Belirli bir SQL Server örneğinde sabit sınırlarla, yüzde sınırlarıyla veya alan tüketimiyle ilgili hiçbir sınır olmadan iş yükü gruplarının bir karışımına tempdb sahip olabilirsiniz.

Yüzde sınırı yapılandırması

Yüzde sınırları yalnızca veri dosyası yapılandırması aşağıdaki tabloda özetlenen gereksinimleri karşıladığında tempdb geçerlidir:

Konfigürasyon Açıklama Tempdb maksimum boyutu (100%) Geçerli olan yüzde sınırı
- GROUP_MAX_TEMPDB_DATA_MB ayarlanmadı
- Tüm veri dosyaları için, MAXSIZEUNLIMITED değil
- Tüm veri dosyaları için FILEGROWTH sıfır değil
tempdb veri dosyaları en büyük boyuta kadar otomatik olarak büyüyebilir Tüm veri dosyaları için değerlerin MAXSIZE toplamı Evet
- GROUP_MAX_TEMPDB_DATA_MB ayarlanmadı
- Tüm veri dosyaları için MAXSIZEUNLIMITED'dir
- Tüm veri dosyaları için FILEGROWTH sıfırdır
tempdb veri dosyaları hedeflenen boyutlara göre önceden büyütülmüştür ve daha fazla büyüyemez Tüm veri dosyaları için değerlerin SIZE toplamı Evet
Diğer tüm yapılandırmalar Hayı

Aşağıdaki sorgu geçerli tempdb veri dosyası yapılandırmasını görmenize olanak tanır:

SELECT file_id,
       name,
       size * 8. / 1024 AS size_mb,
       IIF(max_size = -1, NULL, max_size * 8. / 1024) AS maxsize_mb,
       IIF(is_percent_growth = 0, growth * 8. / 1024, NULL) AS filegrowth_mb,
       IIF(is_percent_growth = 1, growth, NULL) AS filegrowth_percent
FROM sys.master_files
WHERE database_id = 2
      AND
      type_desc = 'ROWS';

Sonuç kümesindeki belirli bir dosya için:

  • Eğer maxsize_mb sütunu NULL ise, o zaman MAXSIZEUNLIMITED olur.
  • Ya da filegrowth_mbfilegrowth_percent sıfır olduğunda, FILEGROWTH sıfır olur.

GROUP_MAX_TEMPDB_DATA_PERCENT ayarlayıp ALTER RESOURCE GOVERNOR RECONFIGURE komutunu yürütürseniz, ancak veri dosyası yapılandırması gereksinimleri karşılamıyorsa, komut başarıyla tamamlanır ve yüzde sınırları depolanır, ancak uygulanmaz. Bu durumda, uyarı iletisi 10989, önem derecesi 10, GROUP_MAX_TEMPDB_DATA_PERCENT etkin değil çünkü tempdb yapılandırma gereksinimleri karşılanmadı. İleti aynı zamanda hata günlüğüne de kaydedilir.

Yüzde sınırlarını etkili hale getirmek için, veri dosyalarını gereksinimleri karşılayacak şekilde tempdb yeniden yapılandırın ve ALTER RESOURCE GOVERNOR RECONFIGURE yeniden yürütün. Daha fazla bilgi için SIZE, FILEGROWTH ve MAXSIZE yapılandırma hakkında bkz. ALTER DATABASE File and Filegroup Options.

Uyarı

SQL Server'ın yeni bir örneği için veri dosyası MAXSIZEUNLIMITED sıfırdan büyüktür ve FILEGROWTH bu da yüzde sınırlarının etkili olmadığı anlamına gelir. Yüzde sınırlarını kullanmak için şunlardan birini kullanmanız gerekir:

  • Veri dosyalarını hedeflenen boyutlarına önceden büyütün tempdb ve sıfır olarak ayarlayın FILEGROWTH .
  • MAXSIZE Her veri dosyasının değerini sınırlı bir değere ayarlayın.
    • Her tempdb veri dosyası birimi için birimdeki dosyaların değerlerinin toplamının MAXSIZE birimdeki kullanılabilir disk alanından küçük veya buna eşit olduğundan emin olun.

      Örneğin, bir birimde 100 GB boş alan varsa ve iki tempdb veri dosyası varsa, her dosyanın değerini 50 GB veya daha az yapın MAXSIZE .

Yüzde sınırı etkinse ve veri dosyalarını ekler, kaldırır veya yeniden boyutlandırırsanız, yeni maksimum boyut tempdb (100%) ile kaynak yöneticisini güncellemek için ALTER RESOURCE GOVERNOR RECONFIGURE uygulamanız gerekir.

Nasıl çalışır?

Bu bölümde, tempdb uzay kaynağı yönetimi ayrıntılı olarak açıklanmaktadır.

  • tempdb içindeki veri sayfaları tahsis edilir ve bırakılırken, kaynak yöneticisi her iş yükü grubu tarafından kullanılan tempdb alanın muhasebesini yapar.

    Kaynak yöneticisi etkinleştirilirse ve tempdb bir iş yükü grubu için bir alan tüketimi sınırı ayarlanırsa ve iş yükü grubunda çalışan bir istek (sorgu) grubun toplam tempdb alan tüketimini sınırın üzerine getirmeye çalışırsa, istek 1138, önem derecesi 17, 'tempdb' veritabanı için yeni bir sayfa ayrılamadı hatasıyla durduruldu çünkü bu, 'workload-group-name' iş yükü grubu için ayarlanan sınırı aşabilir.

    İstek 1138 hatasıyla iptal edildiğinde, total_tempdb_data_limit_violation_count dinamik yönetim görünümünün (DMV) sütunundaki değer bir artırılır ve tempdb_data_workload_group_limit_reached genişletilmiş olay tetiklenir.

  • Resource Governor; geçici tablolar, değişkenler (tablo değişkenleri dahil), tablo değerli parametreler, kalıcı tablolar, imleçler ve sorgu işlemesi sırasında kullanılan havuzlar, taşmalar, çalışma tabloları ve tempdb çalışma dosyaları gibi bir iş yükü grubuna atanan tüm tempdb kullanımını izler.

    tempdb'deki genel geçici tablolar ve kalıcı tablolar için alan kullanımı, diğer iş yükü gruplarındaki oturumlar aynı tablodaki satırları eklese, değiştirse veya silse bile tabloya ilk satırı ekleyen iş yükü grubu altında değerlendirilir.

  • Her iş yükü grubu için yapılandırılmış tempdb tüketim sınırları, vegroup_max_tempdb_data_mb sütunlarında sys.resource_governor_workload_groups katalog görünümünde group_max_tempdb_data_percent kullanıma sunulur.

    Mevcut tüketim ve bir iş yükü grubu tarafından tempdb alanının en yüksek tüketimi, sırasıyla ve tempdb_data_space_kb sütunlarında peak_tempdb_data_space_kb DMV'de sunulmaktadır.

    Tavsiye

    tempdb_data_space_kb ve peak_tempdb_data_space_kbsys.dm_resource_governor_workload_groups sütunları, alan tüketimiyle ilgili tempdb bir sınır ayarlanmamış olsa bile korunur.

    Başlangıçta herhangi bir sınır ayarlamadan sınıflandırıcı işlevini ve iş yükü gruplarını oluşturabilirsiniz. Temsili kullanım desenleri oluşturmak için zaman içinde her grubun kullanımını izleyin tempdb ve ardından sınırları gerektiği gibi ayarlayın.

  • Tempdb sürümünde hızlandırılmış veritabanı kurtarma (ADR ) etkinleştirildiğinde tempdbkalıcı sürüm deposu (PVS) dahil olmak üzere sürüm depoları tarafından kullanım, satır sürümleri birden çok iş yükü grubundaki istekler tarafından kullanılabildiğinden yönetilmiyor.

  • içindeki tempdb alan tüketimi, kullanılan 8 KB veri sayfası sayısı olarak hesaba katılır. Bir sayfa verilerle tam olarak doldurulmasa bile, bir iş yükü grubunun tüketimine tempdb 8 KB ekler.

  • Tempdb alan muhasebesi, bir iş yükü grubunun ömrü boyunca korunur. Genel geçici tablolar veya bu iş yükü grubuna ait verileri içeren kalıcı tablolar tempdb içinde kaldığında bir iş yükü grubu silinirse, bu tablolar tarafından kullanılan alan başka bir iş yükü grubu altında hesaplanmaz.

  • Tempdb alan kaynağı idaresi, veri dosyalarındaki tempdb alanı denetler, ancak temel birimlerdeki disk alanını denetlemez. Veri dosyalarını hedeflenen boyutlarına önceden büyütmezseniz, tempdb bulunduğu birimlerdeki alan diğer dosyalar tarafından tüketilebilir. Veri dosyalarının büyümesi için tempdb kalan alan yoksa, tempdb alan tüketimiyle ilgili tempdb iş yükü grubu sınırına ulaşılamadan önce alanınız tükenebilir.

  • tempdb içindeki uzay kaynak yönetimi, veri dosyaları için geçerlidir ancak işlem günlüğü dosyası için geçerli değildir. İşlem günlüğünün tempdb'de çok fazla alan kullanmadığından emin olmak için içinde tempdb etkinleştirin.

Oturum düzeyinde alan izleme ile farklar

sys.dm_db_session_space_usage DMV, her oturum için tempdb alan ayırma ve serbest bırakma istatistikleri sağlar. bir iş yükü grubunda yalnızca bir oturum olsa bile, bu DMV tarafından sağlanan alan kullanımı istatistikleri, aşağıdaki nedenlerle sys.dm_resource_governor_workload_groups görünümünde sağlanan istatistiklerle tam olarak eşleşmeyebilir:

  • 'nin aksinesys.dm_resource_governor_workload_groups: sys.dm_db_session_space_usage
    • Çalışmakta olan görevlerin alan kullanımını yansıtmaz tempdb . bir görev tamamlandığında içindeki sys.dm_db_session_space_usage istatistikler güncelleştirilir. içindeki sys.dm_resource_governor_workload_groups istatistikler sürekli olarak güncelleştirilir.
    • Dizin ayırma eşlemesi (IAM) sayfalarını izlemez. Daha fazla bilgi için bkz. Sayfalar ve kapsamlar mimarisi kılavuzu.
  • Satırlar silindikten veya bir tablo, dizin ya da bölüm bırakıldığında veya kısaltıldığında, veri sayfaları zaman uyumsuz bir arka plan işlemi tarafından dağıtım dışı bırakılabilir. Bu sayfa ayırma işlemi gecikmeli olarak gerçekleşebilir. sys.dm_resource_governor_workload_groups, bu sayfa serbest bırakmaları olduğu anda yansıtır. Bu serbest bırakmalara neden olan oturum kapatılmış olsa ve sys.dm_db_session_space_usage içerisinde artık mevcut olmasa bile.

Tempdb alanı kaynak idaresi için en iyi yöntemler

Alan kaynağı idaresini tempdb yapılandırmadan önce aşağıdaki en iyi yöntemleri göz önünde bulundurun:

  • Kaynak yöneticisi için genel en iyi yöntemleri gözden geçirin.

  • Çoğu senaryoda, özellikle tempdb iş yükü grubu için default alan tüketim sınırını küçük bir değere veya sıfıra ayarlamaktan kaçının. Bunu yaparsanız, tempdb alan ayırmaları gerekiyorsa birçok yaygın görev başarısız olacaktır. Örneğin, iş yükü grubu için default sabit veya yüzde sınırını 0 olarak ayarlarsanız, SQL Server Management Studio'da (SSMS) Nesne Gezgini'ni açamayabilirsiniz.

  • Özel iş yükü grupları ve iş yüklerini ayrılmış gruplarına yerleştiren bir sınıflandırıcı işlevi oluşturmadığınız sürece, iş yükü grubu tarafından tempdb kullanımı sınırlamaktan default kaçının. Kullanıcı iş yükleri tarafından tüketilemeyen kullanılmamış bir alana sahip olduğunda tempdb, 1138 hatasıyla sorguları durdurabilir.

  • Tüm iş yükü gruplarının GROUP_MAX_TEMPDB_DATA_MB değerlerinin toplamının maksimum tempdb boyutunu aşmasına izin verilir. Örneğin, maksimum tempdb boyutu 100 GB ise, GROUP_MAX_TEMPDB_DATA_MBA ve B iş yükü grupları için bu sınırlar her biri 80 GB olabilir.

    Bu yaklaşım, diğer iş yükü grupları için 20 GB bırakarak her iş yükü grubunun içindeki tempdb tüm alanı tüketmesini engeller. Aynı zamanda, tempdb ve B iş yükü gruplarının aynı anda büyük miktarda alan kullanma olasılığı olmadığından boş tempdb alan kullanılabilir durumdayken gereksiz sorgu iptallerinden kaçınabilirsiniz.

    Benzer şekilde, tüm iş yükü grupları için değerlerin GROUP_MAX_TEMPDB_DATA_PERCENT toplamı yüzde 100'ü aşabilir. Birden çok grubun aynı anda yüksek tempdb kullanıma neden olma olasılığının düşük olduğunu biliyorsanız, her gruba daha fazla tempdb alan ayırabilirsiniz.