Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Bu makalede, SQL Server, Azure SQL Veritabanı veya Azure SQL Yönetilen Örneği'ndeki veritabanı altyapısı örneğine bağlı tüm kullanıcıların kullanabileceği genel bir kaynak olan sistem veritabanı açıklanmaktadır tempdb .
Overview
Sistem tempdb veritabanı, aşağıdakileri içeren genel bir kaynaktır:
Açıkça oluşturulan kullanıcı nesneleri. Bunlar arasında şunlar vardır:
- Bu tablolardaki genel veya yerel geçici tablolar ve dizinler
- Geçici saklı yordamlar
- Tablo değişkenleri dahil olmak üzere büyük değişkenler
- Tablo değerli işlevlerde döndürülen tablolar
- Cursors
Bir kullanıcı veritabanında oluşturulabilen kullanıcı nesneleri de içinde
tempdboluşturulabilir, ancak dayanıklılık garantisi olmadan oluşturulur ve Veritabanı Altyapısı örneği yeniden başlatıldığında bırakılır.Veritabanı altyapısının oluşturduğu iç nesneler. Bunlar arasında şunlar vardır:
- Ara sonuçları spool'lar, imleçler, sıralamalar ve geçici büyük nesne (LOB) depolaması için saklayan çalışma tabloları.
- Hash eşleştirme veya hash toplama işlemleri için iş dosyaları.
- Dizin oluşturma veya yeniden oluşturma (belirtilirse
SORT_IN_TEMPDB) ya da belirliGROUP BY,ORDER BYveyaUNIONsorgular gibi işlemler için ara sıralama sonuçları.
Her iç nesne en az dokuz sayfa kullanır: IAM sayfası ve sekiz sayfalık kapsam. Sayfalar ve kapsamlar hakkında daha fazla bilgi için Sayfa ve kapsam mimarisi kılavuzuna bakın.
Sürüm depoları, satır sürümü oluşturmayı destekleyen veri satırlarını barındıran veri sayfaları koleksiyonlarıdır. Sürüm depoları aşağıdakileri içerir:
- Satır sürümü oluşturmaya dayalı
READ COMMITTEDveyaSNAPSHOTyalıtım işlemlerini kullanan bir veritabanında, veri değiştirme işlemleri tarafından oluşturulan satır sürümleri. - Çevrimiçi dizin işlemleri, Birden Çok Etkin Sonuç Kümesi (MARS) ve
AFTERtetikleyiciler gibi özellikler için veri değiştirme işlemleri tarafından oluşturulan satır sürümleri.
SQL Server 2025(17.x) ile başlayarak, içinde hızlandırılmış veritabanı kurtarma (ADR) etkinleştirildiğinde
tempdbtempdbiki farklı ve bağımsız sürüm deposu içerir:- ADR etkinleştirilmemiş kullanıcı veritabanlarındaki işlemler tarafından oluşturulan satır sürümleri için kullanılan geleneksel sürüm deposu.
- Kalıcı sürüm deposu (PVS),
tempdbiçindeki işlemlerin oluşturduğu satır sürümleri için kullanılır.
tempdbiçinde ADR etkinse,tempdbveri dosyaları için, her iki sürüm deposunu da barındıracak kadar yeterli disk alanı ayırdığınızdan emin olun. İş yükünüze bağlı olarak, veri dosyalarının boyutununtempdbPVS verilerini içerecek şekilde artırılması gerekebilir.Geleneksel sürüm deposunun alan kullanımı hakkında
tempdbdaha fazla bilgi için bkz. Tempdb'de kullanılan alan. PVS tarafından kullanılan alan hakkında daha fazla bilgi için bkz. Kalıcı sürüm deposu (PVS) tarafından kullanılan alan.- Satır sürümü oluşturmaya dayalı
tempdb içindeki işlemler asgari düzeyde günlüğe kaydedilir.
tempdb , Veritabanı Altyapısı her başlatıldığında yeniden oluşturulur, böylece sistem her zaman boş tempdb bir veritabanıyla başlar. Geçici saklı yordamlar ve yerel geçici tablolar, bunları oluşturan oturum bağlantısı kesildiğinde otomatik olarak bırakılır.
tempdb Veritabanı Altyapısı'nın bir çalışma döneminden diğerine kaydedilmesi gereken hiçbir şeyi yoktur. üzerinde yedekleme ve geri yükleme işlemlerine tempdbizin verilmez.
SQL Server'da tempdb'nin fiziksel özellikleri
Aşağıdaki tabloda SQL Server'daki verilerin ve günlük dosyalarının tempdb ilk yapılandırma değerleri listelenmiştir. Değerler, veritabanı için model varsayılan değerleri temel alır. Bu dosyaların boyutları, SQL Server'ın farklı sürümleri için biraz farklılık gösterebilir.
| File | Mantıksal ad | Fiziksel ad | Başlangıç boyutu | Dosya büyümesi |
|---|---|---|---|---|
| Birincil veriler | tempdev |
tempdb.mdf |
8 megabayt | Disk dolu olana kadar 64 MB artırarak otomatik büyüt |
| İkincil veri dosyaları | temp# |
tempdb_mssql_#.ndf |
8 megabayt | Disk dolana kadar 64 MB otomatik büyütme |
| Log | templog |
templog.ldf |
8 megabayt | 64 megabayt ile en fazla 2 terabayt arasında otomatik büyütme |
Tüm tempdb veri dosyaları her zaman aynı başlangıç boyutuna ve büyüme parametrelerine sahip olmalıdır.
Tempdb veri dosyalarının sayısı
Veritabanı Altyapısı'nın sürümüne, yapılandırmasına ve iş yüküne bağlı olarak, tempdb ayırma çekişmelerini azaltmak için birden çok veri dosyası gerekebilir.
Önerilen toplam veri dosyası sayısı, makinedeki mantıksal işlemci sayısına bağlıdır. Genel rehberlik olarak:
Mantıksal işlemci sayısı sekizden küçük veya sekize eşitse, aynı sayıda veri dosyası kullanın.
Mantıksal işlemci sayısı sekizden büyükse, sekiz veri dosyası kullanın.
Ayırma çekişmesi yine de gözlemleniyorsa
tempdb, çekişme kabul edilebilir düzeylere gelene kadar veri dosyası sayısını dört katına çıkarın veya iş yükünde değişiklik yapın.
Daha fazla bilgi için bkz. SQL Server tempdb veritabanında ayırma çekişmesini azaltma önerileri.
için geçerli boyut ve büyüme parametrelerini denetlemek için tempdbiçindeki sys.database_files katalog görünümünü tempdbkullanın.
SQL Server'da tempdb verilerini ve günlük dosyalarını taşıma
Verileri ve günlük dosyalarını taşımak tempdb için bkz. Sistem veritabanlarını taşıma.
SQL Server'da tempdb için veritabanı seçenekleri
Aşağıdaki tabloda, veritabanındaki her veritabanı seçeneği tempdb için varsayılan değer ve seçeneğin değiştirilip değiştirilemeyeceği listelenmiştir. Bu seçeneklerin geçerli ayarlarını görüntülemek için sys.databases katalog görünümünü kullanın.
| Veritabanı seçeneği | Varsayılan değer | Değiştirilebilir |
|---|---|---|
ACCELERATED_DATABASE_RECOVERY |
OFF |
Yes1 |
ALLOW_SNAPSHOT_ISOLATION |
OFF |
Yes |
ANSI_NULL_DEFAULT |
OFF |
Yes |
ANSI_NULLS |
OFF |
Yes |
ANSI_PADDING |
OFF |
Yes |
ANSI_WARNINGS |
OFF |
Yes |
ARITHABORT |
OFF |
Yes |
AUTO_CLOSE |
OFF |
No |
AUTO_CREATE_STATISTICS |
ON |
Yes |
AUTO_SHRINK |
OFF |
No |
AUTO_UPDATE_STATISTICS |
ON |
Yes |
AUTO_UPDATE_STATISTICS_ASYNC |
OFF |
Yes |
AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN) |
OFF |
No |
CHANGE_TRACKING |
OFF |
No |
COMPATIBILITY_LEVEL |
Veritabanı Altyapısı sürümüne bağlıdır. Daha fazla bilgi için bkz ALTER DATABASE . (Transact-SQL) uyumluluk düzeyi. |
Yes |
CONCAT_NULL_YIELDS_NULL |
OFF |
Yes |
CONTAINMENT |
NONE |
No |
CURSOR_CLOSE_ON_COMMIT |
OFF |
Yes |
CURSOR_DEFAULT |
GLOBAL |
Yes |
| Veritabanı durumu | ONLINE |
No |
| Veritabanı güncelleştirmesi | READ_WRITE |
No |
| Veritabanı kullanıcı erişimi | MULTI_USER |
No |
DATE_CORRELATION_OPTIMIZATION |
OFF |
Yes |
DB_CHAINING |
ON |
No |
DELAYED_DURABILITY |
DISABLEDBu seçenekten bağımsız olarak, gecikmeli dayanıklılık tempdb üzerinde her zaman etkindir. |
Yes |
ENCRYPTION |
OFF |
No |
MIXED_PAGE_ALLOCATION |
OFF |
No |
NUMERIC_ROUNDABORT |
OFF |
Yes |
PAGE_VERIFY |
CHECKSUM SQL Server'ın yeni yüklemeleri içinBir SQL Server örneği yerinde yükseltildiğinde mevcut PAGE_VERIFY değer korunabilir. |
Yes |
PARAMETERIZATION |
SIMPLE |
Yes |
QUOTED_IDENTIFIER |
OFF |
Yes |
READ_COMMITTED_SNAPSHOT |
OFF |
No |
RECOVERY |
SIMPLE |
No |
RECURSIVE_TRIGGERS |
OFF |
Yes |
| Hizmet Aracısı | ENABLE_BROKER |
Yes |
TARGET_RECOVERY_TIME |
60 | Yes |
TEMPORAL_HISTORY_RETENTION |
ON |
Yes |
TRUSTWORTHY |
OFF |
No |
SQL Server 2025 (17.x) sürümünden itibaren 1ACCELERATED_DATABASE_RECOVERY'nin ON olarak ayarlanması tempdb desteklenmektedir. SQL Server'ın önceki sürümlerinde veritabanı seçeneğinin değiştirilmesine ACCELERATED_DATABASE_RECOVERYtempdb izin verilmiyor.
Bu veritabanı seçeneklerinin açıklaması için bkz ALTER DATABASE SET . seçenekler.
Azure SQL Veritabanı'nda tempdb
Azure SQL Veritabanı'nda davranış ve yapılandırmanın tempdb bazı yönleri SQL Server'dan farklıdır.
Tek veritabanları için, mantıksal sunucudaki her veritabanının kendi tempdbvardır. Elastik havuzda, tempdb aynı havuzdaki tüm veritabanları için paylaşılan bir kaynaktır, ancak bir veritabanı tarafından oluşturulan geçici nesneler aynı elastik havuzdaki diğer veritabanlarına görünmez.
içindeki tempdbkatalog görünümleri ve dinamik yönetim görünümleri (DMV' ler) gibi nesnelere tempdb veritabanına çapraz veritabanı başvurusu aracılığıyla erişilebilir. Örneğin, sys.database_files görünümünü sorgulayabilirsiniz:
SELECT file_id,
type_desc,
name,
size,
max_size,
growth
FROM tempdb.sys.database_files;
Azure SQL Veritabanı'ndaki genel geçici tablolar veritabanı kapsamına alınır. Daha fazla bilgi için bkz.: Azure SQL Veritabanı'nda veritabanı kapsamındaki genel geçici tablolar.
Azure SQL Veritabanı'ndaki boyutlar hakkında tempdb daha fazla bilgi edinmek için şunları gözden geçirin:
- Sanal çekirdek satın alma modeli: tek veritabanları, havuza alınan veritabanları
- DTU satın alma modeli: tekil veritabanları, havuzlanmış veritabanları
SQL Yönetilen Örneği'ta tempdb
Azure SQL Yönetilen Örneği'nde davranış ve varsayılan yapılandırmanın tempdb bazı yönleri SQL Server'dan farklıdır.
tempdb dosyalarının sayısını, büyüme artışlarını ve maksimum boyutlarını yapılandırabilirsiniz. Azure SQL Yönetilen Örneği'nde ayarları yapılandırma tempdb hakkında daha fazla bilgi için bkz. Azure SQL Yönetilen Örneği için tempdb ayarlarını yapılandırma.
Azure SQL Yönetilen Örneği, SQL Server’da olduğu gibi geçici nesneleri destekler ve tüm genel geçici tablolar ile genel geçici depolanan yordamlar, aynı SQL yönetilen örneği içindeki tüm kullanıcı oturumları tarafından erişilebilir.
Azure SQL Yönetilen Örneği'ndeki boyutlar hakkında tempdb daha fazla bilgi edinmek için kaynak sınırlarını gözden geçirin.
Fabric'te SQL veritabanında tempdb
Microsoft Fabric'teki SQL veritabanındaki boyutlar hakkında tempdb daha fazla bilgi edinmek için Özellik karşılaştırması: Microsoft Fabric'te Azure SQL Veritabanı ve SQL veritabanı makalesindeki kaynak sınırları bölümünü gözden geçirin.
Azure SQL Veritabanı'na benzer şekilde, Microsoft Fabric'teki SQL veritabanındaki genel geçici tablolar da veritabanı kapsamına alınır. Daha fazla bilgi için bkz.: Azure SQL Veritabanı'nda veritabanı kapsamındaki genel geçici tablolar.
Sınırlamalar
Veritabanında aşağıdaki işlemler gerçekleştirilemez tempdb :
- Dosya grupları ekleme.
- Veritabanını yedekleme veya geri yükleme.
- Sıralama düzeni değiştiriliyor. Varsayılan harmanlama, sunucu harmanlamasıdır.
- Veritabanı sahibini değiştirme.
tempdbsa'ya aittir. - Veritabanı anlık görüntüsü oluşturma.
- Veritabanı siliniyor.
- guest kullanıcısı veritabanından siliniyor.
- Değişiklik Verisi Yakalamayı etkinleştirme.
- Veritabanı yansıtmasına katılma.
- Birincil dosya grubunu, birincil veri dosyasını veya günlük dosyasını kaldırma.
- Veritabanını veya birincil dosya grubunu yeniden adlandırma.
-
DBCC CHECKALLOCçalıştırılıyor. - çalıştırılıyor
DBCC CHECKCATALOG. - Veritabanını olarak
OFFLINEayarlama. - Veritabanını veya birincil dosya grubunu olarak
READ_ONLYayarlama.
Permissions
Herhangi bir kullanıcı içinde tempdbgeçici nesneler oluşturabilir.
Kullanıcılar, ek izinler almadıkları sürece, tempdb içinde yalnızca kendilerine ait geçici olmayan nesnelere erişebilir.
Bir veritabanı kullanıcısının veya rolünün tempdb kullanmasını önlemek için, tempdb üzerindeki CONNECT iznini iptal etmek mümkündür. Birçok işlem kullanılmasını tempdbgerektirdiğinden bu önerilmez.
SQL Server'da tempdb performansını iyileştirme
Dosyaların boyutu ve fiziksel yerleşimi tempdb performansı etkileyebilir. Örneğin, tempdb başlangıç boyutu çok küçükse, Veritabanı Altyapısı örneği her yeniden başlatıldığında, tempdb öğesini iş yükünü desteklemek için gereken boyuta kadar otomatik olarak büyütmek için zaman ve kaynak harcanabilir.
- Mümkünse, veri dosyaları için büyüme işlemlerinin performansını artırmak için anında dosya başlatmayı kullanın.
- SQL Server 2022 (16.x) ile başlayarak, 64 MB'a kadar işlem günlüğü dosyası büyüme olayları da anında dosya başlatmadan yararlanabilir. Daha fazla bilgi için bkz . Anlık dosya başlatma ve işlem günlüğü.
- Ortamdaki tipik iş yükünü karşılamak için dosya boyutunu yeterince büyük bir değere ayarlayarak tüm
tempdbdosyalar için önceden yer ayırın. Önceden ayırma,tempdb’nin çok sık otomatik olarak büyümesini önler; bu da performansı olumsuz etkileyebilir. - Veritabanındaki
tempdbdosyalar planlanmamış büyüme olayları sırasında alan sağlamak için otomatik olarak büyütülecek şekilde ayarlanmalıdır. -
tempdbEşit boyutta birden çok veri dosyasını bölmek, kullanantempdbişlemlerin verimliliğini artırabilir.- Veri ayırma dengesizliğini önlemek için, Veritabanı Altyapısı daha fazla boş alana sahip dosyalarda ayırmaları destekleyen orantılı doldurma algoritması kullandığından, veri dosyalarının ilk boyutu ve büyüme parametreleri aynı olmalıdır.
- Dosya büyüme artışını 64 MB gibi makul bir boyuta ayarlayın ve büyüme dengesizliklerini önlemek için büyüme artışını tüm veri dosyaları için aynı hale getirin.
- SQL Server 2025 (17.x) ile başlayarak,
içindeki işlemler için anlık işlem geri alma ve agresif günlük kesilmesi avantajlarından yararlanmak amacıyla hızlandırılmış veritabanı kurtarmayı etkinleştirmeyi düşünün. Daha fazla bilgi için bkz. tempdb'de ADR.- içinde ADR'nin
tempdbetkinleştirilmesi veya devre dışı bırakılması için Veritabanı Altyapısı'nın yeniden başlatılması gerekir.
- içinde ADR'nin
için geçerli boyut ve büyüme parametrelerini denetlemek için tempdbaşağıdaki sorguyu kullanın:
SELECT name AS file_name,
type_desc AS file_type,
size * 8.0 / 1024 AS size_mb,
max_size * 8.0 / 1024 AS max_size_mb,
CAST (IIF (max_size = 0, 0, 1) AS BIT) AS is_autogrowth_enabled,
CASE WHEN growth = 0 THEN growth
WHEN growth > 0 AND is_percent_growth = 0 THEN growth * 8.0 / 1024
WHEN growth > 0 AND is_percent_growth = 1 THEN growth
END AS growth_increment_value,
CASE WHEN growth = 0 THEN 'Autogrowth is disabled.'
WHEN growth > 0 AND is_percent_growth = 0 THEN 'Megabytes'
WHEN growth > 0 AND is_percent_growth = 1 THEN 'Percent'
END AS growth_increment_value_unit
FROM tempdb.sys.database_files;
tempdb Veritabanını hızlı bir G/Ç alt sistemine yerleştirin. Disk düzeyinde G/Ç performans sorunlarıyla karşılaşmadığınız sürece tek tek veri dosyalarının veya veri dosyası gruplarının tempdb farklı disklerde olması gerekmez.
Kullanıcı veritabanları ile tempdb arasında bir G/Ç çekişmesi varsa, tempdb dosyalarını, kullanıcı veritabanlarının kullandığı disklerden farklı olan diskler üzerine yerleştirin.
Note
Performansı artırmak için, veritabanı seçeneği DELAYED_DURABILITY olarak DISABLED ayarlanmış olsa bile tempdbgecikmeli dayanıklılık her zaman etkinleştirilir.
tempdb, başlatma sırasında yeniden oluşturulduğundan kurtarma sürecinden geçmez ve dayanıklılık garantisi sağlamaz.
SQL Server için tempdb geliştirmeleri
SQL Server 2025(17.x) ile kullanıma sunulmuştur
-
Tempdbalan kaynağı idaresi, bir uygulama veya kullanıcı iş yükü tarafından kullanılan toplam alan miktarıtempdbiçin bir sınır uygular. Bu, kontrolden çıkan sorguların veya iş yüklerinintempdbiçinde büyük miktarda yer kaplamasını önleyerek güvenilirliği artırır ve kesintileri önler. Daha fazla bilgi için bkz . Tempdb alan kaynağı idaresi. -
Hızlandırılmış veritabanı kurtarma,
tempdbiçinde desteklenir vetempdbiçindeki işlemler için anında işlem geri alma ile yoğun günlük kısaltma sağlar.
SQL Server 2022 (16.x) ile kullanıma sunulmuştur
-
Sistem sayfası mandalı eşzamanlılığına yönelik iyileştirmelerle geliştirilmiş ölçeklenebilirlik sunuldu. Genel ayırma eşlemesi (GAM) sayfalarına ve paylaşılan genel ayırma eşlemesi (SGAM) sayfalarına yönelik eşzamanlı güncelleştirmeler, veri sayfalarını ve uzantıları ayırıp serbest bırakma sırasında sayfa mandal çekişmesini azaltır. Bu geliştirmeler tüm kullanıcı veritabanları için geçerlidir ve özellikle içindeki
tempdbağır iş yüklerine yarar sağlar. GAM ve SGAM sayfaları hakkında daha fazla bilgi için bkz . Kapakların altında: GAM, SGAM ve PFS sayfaları. Daha fazla bilgi için Bkz. Sistem Sayfası Mandal Eşzamanlılık Geliştirmeleri (Ep. 6) | Kullanıma Sunulan Veriler.
SQL Server 2019(15.x) ile kullanıma sunulmuştur
- Veritabanı Altyapısı, en yüksek disk aktarım hızına izin vermek için dosyaları açarken
FILE_FLAG_WRITE_THROUGHseçeneğini kullanmaztempdb.tempdbBaşlangıçta yeniden başlatıldığından, veri dayanıklılığı sağlamak için bu seçenek gerekli değildir.FILE_FLAG_WRITE_THROUGHhakkında daha fazla bilgi için bkz. SQL Server'da veri güvenilirliğini artıran günlüğe kaydetme ve veri depolama algoritmaları. -
Bellek için optimize edilmiş TempDB meta verisi,
tempdbiçindeki geçici nesne meta verisi çekişmesini ortadan kaldırır. - Eşzamanlı Page Free Space (PFS) sayfa güncelleştirmeleri, tüm veritabanlarında sayfa mandalı çekişmesini azaltır; bu sorun en yaygın olarak
tempdbiçinde görülür. Bu geliştirme, PFS sayfa güncelleştirmelerinin eşzamanlılık yönetimini değiştirerek özel bir mandal yerine paylaşılan bir mandal altında güncelleştirilebilmelerini sağlar. Bu davranış, SQL Server 2019 (15.x) ile başlayan tüm veritabanlarında (tempdbdahil) varsayılan olarak açıktır. PFS sayfaları hakkında daha fazla bilgi için Perde arkasında: GAM, SGAM ve PFS sayfaları makalesini okuyun. - Varsayılan olarak, Linux'ta SQL Server'ın yeni bir yüklemesi, mantıksal çekirdek sayısına (sekize kadar veri dosyasıyla) bağlı olarak birden çok
tempdbveri dosyası oluşturur. Bu, yerinde ikincil veya ana sürüm yükseltmeleri için geçerli değildir. Hertempdbveri dosyası 8 MB'tır ve otomatik büyüme 64 MB olur. Bu davranış, Windows'ta varsayılan SQL Server yüklemesine benzer.
SQL Server 2017(14.x) ile kullanıma sunulmuştur
- SQL Kurulumu deneyimi, ilk
tempdbdosya ayırma yönergelerini geliştirir. SQL Kurulumu, ilk dosya boyutu 1 GB'tan büyük bir değere ayarlanırsa ve anlık dosya başlatma etkin değilse müşterileri uyarır ve örnek başlatma gecikmelerini önler. -
sys.dm_tran_version_store_space_usage dinamik yönetim görünümü, veritabanı başına sürüm deposu kullanımını izler. Bu DMV, veritabanı başına sürüm deposu kullanım gereksinimine göre boyutlandırmayı proaktif olarak planlamak isteyen
tempdbveritabanı yöneticileri için kullanışlıdır. - Uyarlamalı birleşimler ve bellek verme geri bildirimi gibi akıllı sorgu işleme özellikleri, bir sorgunun ardışık yürütmelerinde bellek taşmalarını azaltarak kullanımı azaltır
tempdb.
SQL Server 2016(13.x) ile kullanıma sunulmuştur
- Geçici tablolar ve tablo değişkenleri önbelleğe alınır. Önbelleğe alma, geçici nesneleri silen ve oluşturan işlemlerin çok hızlı çalışmasını sağlar. Önbelleğe alma, sayfa ayırmayı ve meta veri çekişmesini de azaltır.
- Kullanılan
UP(güncelleştirme) mandallarının sayısını azaltmak için ayırma sayfası mandallama protokolü iyileştirildi. -
tempdbiçin günlüğe kaydetme ek yükü,tempdbgünlük dosyasındaki disk G/Ç bant genişliği tüketimini azaltmak amacıyla azaltılır. - SQL Kurulumu, yeni bir örnek yüklemesi sırasında birden çok
tempdbveri dosyası ekler. Önerileri gözden geçirin ve SQL Kurulumu'ndaki Veritabanı Altyapısı Yapılandırması sayfasındatempdböğenizi yapılandırın veya/SQLTEMPDBFILECOUNTkomut satırı parametresini kullanın. Varsayılan olarak, SQL Kurulumu mantıksal işlemci sayısı kadar veya sekiz (hangisi daha düşükse) kadar veri dosyası eklertempdb. - Birden çok
tempdbveri dosyası olduğunda, büyüme ayarlarına bağlı olarak tüm dosyalar aynı anda ve aynı miktarda otomatik olarak büyütür. izleme bayrağı 1117 artık gerekli değildir. Daha fazla bilgi için TEMPDB ve kullanıcı veritabanları için -T1117 ve -T1118 değişikliklerini okuyun. -
tempdbiçindeki tüm ayırmalar aynı boyutları kullanır. izleme işareti 1118 artık gerekli değildir. içindekitempdbperformans geliştirmeleri hakkında daha fazla bilgi için TEMPDB - Dosyalar ve İzleme bayrakları ve Güncelleştirmeler, Aman Tanrım! blog makalesine bakın. -
PRIMARYdosya grubu içinAUTOGROW_ALL_FILESözelliği her zaman etkindir.
Bellek için iyileştirilmiş TempDB meta verileri
Geçici nesne meta veri çekişmesi geçmişte birçok SQL Server iş yükü için ölçeklenebilirlik açısından bir performans sorunu olmuştur. Bu sorunu gidermek için SQL Server 2019 (15.x), bellek içi veritabanı özellik ailesinin bir parçası olan Bellek için iyileştirilmiş TempDB meta verisi adlı bir özelliği kullanıma sundu.
Bellek için iyileştirilmiş TempDB meta veri özelliğinin etkinleştirilmesi, daha önce içindeki tempdbgeçici nesne meta veri çekişmesiyle sınırlı olan iş yükleri için bu performans sorununu ortadan kaldırır. SQL Server 2019'dan (15.x) başlayarak, geçici nesne meta verilerini yönetmeye dahil olan sistem tabloları mandalsız, dayanıklı olmayan, bellek için iyileştirilmiş tablolara dönüşebilir.
Warning
Geçerli sınırlamalar nedeniyle, bellek için iyileştirilmiş TempDB meta verilerini yalnızca nesne meta veri çekişmesi oluştuğunda ve iş yüklerinizi önemli ölçüde etkilediğinde etkinleştirmenizi öneririz.
Geçici nesne meta veri çekişmesi oluşuyorsa aşağıdaki tanılama sorgusu bir veya daha fazla satır döndürür. Her satır bir sistem tablosunu temsil eder ve bu tanılama sorgusu yürütülürken söz konusu tabloya erişim için bağlanan oturum sayısını döndürür.
SELECT OBJECT_NAME(dpi.object_id, dpi.database_id) AS system_table_name,
COUNT(DISTINCT (r.session_id)) AS session_count
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.fn_PageResCracker(r.page_resource) AS prc
CROSS APPLY sys.dm_db_page_info(prc.db_id, prc.file_id, prc.page_id, 'LIMITED') AS dpi
WHERE dpi.database_id = 2
AND dpi.object_id IN (3, 9, 34, 40, 41, 54, 55, 60, 74, 75)
AND UPPER(r.wait_type) LIKE N'PAGELATCH[_]%'
GROUP BY dpi.object_id, dpi.database_id;
Bellek için iyileştirilmiş TempDB meta veri özelliğinin nasıl ve ne zaman kullanılacağına genel bir bakış için bu yedi dakikalık videoyu izleyin:
Note
Şu anda Bellek için optimize edilmiş TempDB meta veri özelliği Azure SQL Veritabanı, Microsoft Fabric'teki SQL Veritabanı ve Azure SQL Yönetilen Örnek'te kullanılamaz.
Bellek için iyileştirilmiş TempDB meta verilerini yapılandırma ve kullanma
Aşağıdaki bölümler Bellek için iyileştirilmiş TempDB meta veri özelliğini etkinleştirme, yapılandırma, doğrulama ve devre dışı bırakma adımlarını içerir.
Enable
Bu özelliği etkinleştirmek için aşağıdaki betiği kullanın:
ALTER SERVER CONFIGURATION SET MEMORY_OPTIMIZED TEMPDB_METADATA = ON;
Daha fazla bilgi için bkz. ALTER SERVER. Bu yapılandırma değişikliği, hizmetin yeniden başlatılmasını gerektirir.
Aşağıdaki T-SQL komutunu kullanarak bellek için iyileştirilmiş olup olmadığını tempdb doğrulayabilirsiniz:
SELECT SERVERPROPERTY('IsTempdbMetadataMemoryOptimized');
Döndürülen değer 1 ise ve özellik etkinleştirildikten sonra yeniden başlatma işlemi gerçekleştiyse özellik etkinleştirilir.
Bellek için optimize edilmiş TempDB meta verilerini etkinleştirdikten sonra sunucu herhangi bir nedenle başlatılamazsa, Veritabanı Altyapısı örneğini en az yapılandırmayla-f başlangıç seçeneğini kullanarak başlatarak bu özelliği devre dışı bırakabilirsiniz. Ardından özelliği devre dışı bırakabilir ve Veritabanı Altyapısı'nı -f normal modda yeniden başlatma seçeneğini kaldırabilirsiniz.
Bellek kullanımını sınırlamak için kaynak havuzuna bağlama
Sunucuyu olası bellek yetersizliği durumlarından korumak için, tempdb öğesini, bellek için iyileştirilmiş TempDB meta verileri tarafından tüketilen belleği sınırlayan bir kaynak yöneticisi kaynak havuzuna bağlamanızı öneririz. Aşağıdaki örnek betik bir kaynak havuzu oluşturur, azami belleğini %20 olarak ayarlar, Kaynak Yönetici'yi etkinleştirir ve tempdb öğesini kaynak havuzuna bağlar.
Bu örnekte gösterim amacıyla bellek sınırı olarak 20% kullanılır. Ortamınızdaki en uygun değer iş yükünüz bağlı olarak daha büyük veya daha küçük olabilir ve iş yükü değişirse zaman içinde değişebilir.
CREATE RESOURCE POOL tempdb_resource_pool
WITH (MAX_MEMORY_PERCENT = 20);
ALTER RESOURCE GOVERNOR RECONFIGURE;
ALTER SERVER CONFIGURATION
SET MEMORY_OPTIMIZED TEMPDB_METADATA = ON
(RESOURCE_POOL = 'tempdb_resource_pool');
Bu değişiklik, Bellek için iyileştirilmiş TempDB meta verileri zaten etkinleştirilmiş olsa bile hizmetin yeniden başlatılmasını da gerektirir.
Kaynak havuzu bağlamasını doğrulama ve bellek kullanımını izleme
Bunun bir kaynak havuzuna bağlı olduğunu tempdb doğrulamak ve havuzun bellek kullanım istatistiklerini izlemek için aşağıdaki sorguyu kullanın:
; WITH resource_pool
AS (SELECT p.pool_id,
p.name,
p.max_memory_percent,
dp.max_memory_kb,
dp.target_memory_kb,
dp.used_memory_kb,
dp.out_of_memory_count
FROM sys.resource_governor_resource_pools AS p
INNER JOIN sys.dm_resource_governor_resource_pools AS dp
ON p.pool_id = dp.pool_id)
SELECT SERVERPROPERTY('IsTempdbMetadataMemoryOptimized') AS is_tempdb_memory_optimized_metadata_enabled,
rp.name AS resource_pool_name,
rp.max_memory_percent,
rp.max_memory_kb,
rp.target_memory_kb,
rp.used_memory_kb,
rp.out_of_memory_count
FROM sys.databases AS d
LEFT OUTER JOIN resource_pool AS rp
ON d.resource_pool_id = rp.pool_id
WHERE d.name = 'tempdb';
Kaynak havuzu bağlantısını kaldır
Bellek için iyileştirilmiş TempDB meta verilerini etkin tutarken kaynak havuzu bağlamasını kaldırmak için aşağıdaki komutu yürüterek hizmeti yeniden başlatın:
ALTER SERVER CONFIGURATION
SET MEMORY_OPTIMIZED TEMPDB_METADATA = ON;
Disable
Bellek için iyileştirilmiş TempDB meta verilerini devre dışı bırakmak için aşağıdaki komutu yürüterek hizmeti yeniden başlatın:
ALTER SERVER CONFIGURATION
SET MEMORY_OPTIMIZED TEMPDB_METADATA = OFF;
Bellek için iyileştirilmiş TempDB meta verilerinin sınırlamaları
Bellek için iyileştirilmiş TempDB meta veri özelliğinin etkinleştirilmesi veya devre dışı bırakılması için yeniden başlatma gerekir.
Bazı durumlarda, iş yükünüzde yetersiz bellek hatalarına neden olan
MEMORYCLERK_XTPbellek clerk’inin yüksek bellek kullanımını gözlemleyebilirsiniz.Diğer tüm bellek katiplerine göre ve hedef sunucu belleğine göre katip tarafından
MEMORYCLERK_XTPbellek kullanımını görmek için aşağıdaki sorguyu yürütür:SELECT SUM(IIF (type = 'MEMORYCLERK_XTP', pages_kb, NULL)) / 1024. AS memoryclerk_xtp_pages_mb, SUM(IIF (type <> 'MEMORYCLERK_XTP', pages_kb, NULL)) / 1024. AS other_pages_mb, SUM(committed_target_kb) / 1024. AS committed_target_memory_mb FROM sys.dm_os_memory_clerks CROSS JOIN sys.dm_os_sys_info;Bellek yüksekse
MEMORYCLERK_XTP, sorunu aşağıdaki gibi azaltabilirsiniz:-
tempdbVeritabanını Bellek için iyileştirilmiş TempDB meta verileriyle bellek tüketimini sınırlayan bir kaynak havuzuna bağlayın. Daha fazla bilgi için Bellek için iyileştirilen tempdb meta verilerini yapılandırma ve kullanma bölümüne bakın. - Bir sistem saklı yordamı, artık gerekli olmayan
MEMORYCLERK_XTPbelleği serbest bırakmak için düzenli aralıklarla çalıştırılabilir. Daha fazla bilgi için bkz. sys.sp_xtp_force_gc (Transact-SQL).
Daha fazla bilgi için bkz. bellek için optimize edilmiş tempdb meta verileri (HkTempDB) yetersiz bellek hataları.
-
In-Memory OLTP kullandığınızda, tek bir işlemin birden fazla veritabanında bellek için iyileştirilmiş tablolara erişmesine izin verilmez. Bu nedenle, kullanıcı veritabanında bellek için iyileştirilmiş bir tablo içeren okuma veya yazma işlemleri aynı işlemdeki sistem görünümlerine de erişemez
tempdb. Bu durum oluşursa 41317 hatası alırsınız:A user transaction that accesses memory optimized tables or natively compiled modules cannot access more than one user database or databases model and msdb, and it cannot write to master.Bu sınırlama, tek bir işlemin birden fazla veritabanında bellek için iyileştirilmiş tablolara erişmeye çalıştığı diğer senaryolar için de geçerlidir.
Örneğin, bellek için iyileştirilmiş tablolar içeren bir kullanıcı veritabanında sys.stats katalog görünümünü sorgularsanız 41317 hatasını alabilirsiniz. Bunun nedeni, sorgunun kullanıcı veritabanında bellek için iyileştirilmiş bir tablodaki istatistik verilerine ve içindeki bellek için iyileştirilmiş meta verilere erişmeye çalışmasıdır
tempdb.Bellek için iyileştirilmiş TempDB meta verileri etkinleştirildiğinde aşağıdaki örnek betik bu hatayı üretir:
BEGIN TRAN; -- Create an In-memory OLTP transaction that accesses a system view in tempdb SELECT name FROM tempdb.sys.tables; -- An attempt to create an In-memory OLTP transaction in the user database fails INSERT INTO <user database>.<schema>.<memory-optimized table> VALUES (1); COMMIT TRAN;Note
Bu sınırlama geçici tablolar için geçerli değildir. Aynı işlemde, kullanıcı veritabanında bellek için iyileştirilmiş bir tabloya erişen geçici bir tablo oluşturabilirsiniz.
Sistem kataloğu görünümlerine yönelik sorgular her zaman yalıtım düzeyini kullanır
READ COMMITTED. Bellek için iyileştirilmiş TempDB meta verileri etkinleştirildiğinde,tempdbiçindeki sistem katalogu görünümlerine yönelik sorgularSNAPSHOTyalıtım düzeyini kullanır. Her iki durumda da kilitleme ipuçları kabul edilmez.Bellek için iyileştirilmiş TempDB meta verileri etkinleştirildiğinde columnstore dizinleri geçici tablolarda oluşturulamaz.
- Sonuç olarak, bellek için iyileştirilmiş TempDB meta verileri etkinleştirildiğinde,
sp_estimate_data_compression_savingssistem saklı yordamınınCOLUMNSTOREveyaCOLUMNSTORE_ARCHIVEveri sıkıştırma parametreleriyle kullanılması desteklenmez.
- Sonuç olarak, bellek için iyileştirilmiş TempDB meta verileri etkinleştirildiğinde,
SQL Server'da tempdb için kapasite planlaması
için tempdb uygun boyutun belirlenmesi birçok faktöre bağlıdır. Bu faktörler, kullanılan iş yükünü ve Veritabanı Altyapısı özelliklerini içerir.
Tipik iş yükünüzü yeniden oluşturabileceğiniz bir test ortamında aşağıdaki görevleri gerçekleştirerek alan tüketimini analiz tempdb etmenizi öneririz:
-
tempdbdosyalar için autogrow özelliğini etkinleştirin. Tümtempdbveri dosyalarının ilk boyutu ve otomatik büyütme yapılandırması aynı olmalıdır. - İş yükünü yeniden oluşturun ve alan kullanımını izleyin
tempdb. - Düzenli dizin bakımı uyguluyorsanız, bakım işlerinizi çalıştırın ve
tempdbalanını izleyin. - Toplam iş yükü kullanımınızı tahmin etmek için önceki adımlarda kullanılan maksimum alan değerlerini kullanın. Öngörülen eşzamanlı etkinlik için bu değeri ayarlayın ve boyutunu buna göre ayarlayın
tempdb.
Tempdb kullanımını izleme
tempdb içinde disk alanının tükenmesi ciddi aksamalara ve uygulama kesintisine neden olabilir.
tempdb dosyalarında kullanılan alanı izlemek için sys.dm_db_file_space_usage dinamik yönetim görünümünü kullanabilirsiniz.
Örneğin, aşağıdaki örnek betik şunları bulur:
-
tempdbiçindeki boş alan (tempdbbüyümesi için kullanılabilir olabilecek boş disk alanı dikkate alınmadan). - Geleneksel sürüm deposu için kullanılan alan.
- içinde hızlandırılmış veritabanı kurtarma (ADR) etkinleştirildiğinde
tempdbkalıcı sürüm deposunun (PVS) boyutunu izlemek için bkz. PVS'nin boyutunu inceleme.
- içinde hızlandırılmış veritabanı kurtarma (ADR) etkinleştirildiğinde
- İç nesnelerin kullandığı alan.
- Kullanıcı nesneleri tarafından kullanılan alan.
SELECT SUM(unallocated_extent_page_count) * 8.0 / 1024 AS tempdb_free_data_space_mb,
SUM(version_store_reserved_page_count) * 8.0 / 1024 AS tempdb_version_store_space_mb,
SUM(internal_object_reserved_page_count) * 8.0 / 1024 AS tempdb_internal_object_space_mb,
SUM(user_object_reserved_page_count) * 8.0 / 1024 AS tempdb_user_object_space_mb
FROM tempdb.sys.dm_db_file_space_usage;
tempdb içindeki sayfa ayırma veya serbest bırakma etkinliğini oturum ya da görev düzeyinde izlemek için sys.dm_db_session_space_usage ve sys.dm_db_task_space_usage dinamik yönetim görünümlerini kullanabilirsiniz. Bu görünümler, büyük miktarda alan kullanan sorguları, geçici tabloları veya tablo değişkenlerini belirlemenize tempdb yardımcı olabilir.
Örneğin, her oturumda şu anda çalışan tüm görevlerde iç nesneler tarafından ayrılan ve serbest bırakılan tempdb alanı elde etmek için aşağıdaki örnek betiği kullanın:
SELECT session_id,
SUM(internal_objects_alloc_page_count) AS task_internal_objects_alloc_page_count,
SUM(internal_objects_dealloc_page_count) AS task_internal_objects_dealloc_page_count
FROM sys.dm_db_task_space_usage
GROUP BY session_id;
Hem çalışan hem de tamamlanmış görevler için, her oturum ve istek özelinde, dahili ve kullanıcı nesneleri tarafından ayrılmış ve şu anda tüketilen tempdb alanı bulmak üzere aşağıdaki örnek betiği kullanın:
; WITH tempdb_space_usage
AS (SELECT session_id,
request_id,
user_objects_alloc_page_count + internal_objects_alloc_page_count AS tempdb_allocations_page_count,
user_objects_alloc_page_count + internal_objects_alloc_page_count - user_objects_dealloc_page_count - internal_objects_dealloc_page_count AS tempdb_current_page_count
FROM sys.dm_db_task_space_usage
UNION ALL
SELECT session_id,
NULL AS request_id,
user_objects_alloc_page_count + internal_objects_alloc_page_count AS tempdb_allocations_page_count,
user_objects_alloc_page_count + internal_objects_alloc_page_count - user_objects_dealloc_page_count - user_objects_deferred_dealloc_page_count - internal_objects_dealloc_page_count AS tempdb_current_page_count
FROM sys.dm_db_session_space_usage)
SELECT session_id,
COALESCE (request_id, 0) AS request_id,
SUM(tempdb_allocations_page_count * 8) AS tempdb_allocations_kb,
SUM(IIF (tempdb_current_page_count >= 0, tempdb_current_page_count, 0) * 8) AS tempdb_current_kb
FROM tempdb_space_usage
GROUP BY session_id, COALESCE (request_id, 0)
ORDER BY session_id, request_id;