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:
- Havuzlar, imleçler, sıralamalar ve geçici büyük nesne (LOB) depolaması için ara sonuçları depolamak için çalışma tabloları.
- Karma eşleştirme veya karma 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 bkz. Sayfalar ve kapsamlar.
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şturma veya
READ COMMITTEDSNAPSHOTyalıtım işlemleri kullanan bir veritabanındaki 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.
- içindeki işlemler
tempdbtarafından oluşturulan satır sürümleri için kullanılan kalıcı sürüm deposu (PVS).
içinde ADR
tempdbetkinse veri dosyalarının her iki sürüm depolarını da içermesi içintempdbyeterli disk alanı ayırdığından 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şturma veya
içindeki tempdb işlemler en az 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 süresinden diğerine hiçbir zaman kaydedilecek bir şey olmaz. ü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 dolana kadar 64 MB otomatik büyütme |
| İ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çenek ne olursa olsun, gecikmeli dayanıklılık her zaman üzerinde tempdb. |
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 options.
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ı kapsamlı 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: tek veritabanları, havuza alınan veritabanları
SQL Yönetilen Örneği'nde 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.
Dosya sayısını tempdb , büyüme artışlarını ve en büyük 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, tüm genel geçici tablolara ve genel geçici saklı yordamlara aynı SQL yönetilen örneği içindeki tüm kullanıcı oturumları tarafından erişilebilen SQL Server ile aynı şekilde geçici nesneleri destekler.
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ı kapsamlı 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ı bırakılıyor.
- Konuk kullanıcı veritabanından bırakılıyor.
- Veri Yakalamayı Değiştir'i etkinleştirme.
- Veritabanı yansıtmaya 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.
- çalıştırılıyor
DBCC CHECKALLOC. - ç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 içinde tempdbyalnızca kendi geçici olmayan nesnelerine erişebilir.
Veritabanı kullanıcısının veya rolünün kullanmasını CONNECTönlemek için üzerindeki tempdb izni tempdb 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, başlangıç boyutu tempdb çok küçükse, Veritabanı Altyapısı örneği her yeniden başlatıldığında iş yükünü desteklemek için gereken boyuta kadar zaman ve kaynaklar otomatik olarak büyütülebilir tempdb .
- 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. Ön yükleme, otomatik büyümenin çok sık yapılmasını önlertempdbve 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 olarak ayarlansa tempdbbile DELAYED_DURABILITY her zaman etkindirDISABLED.
tempdb Başlangıçta yeniden oluşturulur, bir kurtarma işleminden geçilmez 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, güvenilirliği artırır ve kaçak sorguların veya iş yüklerinin içindetempdbbüyük miktarda alan kullanmasını engelleyerek kesintileri önler. Daha fazla bilgi için bkz . Tempdb alan kaynağı idaresi. -
Hızlandırılmış veritabanı kurtarma , içinde, içindeki
tempdbişlemlertempdbiçin anlık işlem geri alma ve agresif günlük kesilmesi sağlayarak desteklenir.
SQL Server 2022 (16.x) ile kullanıma sunulmuştur
-
Sistem sayfası mandal eşzamanlılık geliştirmeleri ile geliştirilmiş ölçeklenebilirlik eklendi. 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. hakkındaFILE_FLAG_WRITE_THROUGHdaha fazla bilgi için bkz . SQL Server'da veri güvenilirliğini genişleten günlük ve veri depolama algoritmaları. -
Bellek için iyileştirilmiş TempDB meta verileri içindeki
tempdbgeçici nesne meta veri çekişmelerini kaldırır. - Eşzamanlı Sayfa Boş Alanı (PFS) sayfa güncelleştirmeleri, tüm veritabanlarında sayfa mandal çekişmesini azaltır ve en yaygın olarak içinde
tempdbgörülen bir sorundur. 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 kapakların altı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
tempdbisteyen DMV'ler 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 bırakan ve oluşturan işlemlerin çok hızlı bir şekilde çalışmasını sağlar. Önbelleğe alma, sayfa ayırmayı ve meta veri çekişmesini de azaltır.
- Kullanılan (güncelleştirme) mandal sayısını
UPazaltmak için ayırma sayfası mandallama protokolü geliştirildi. - günlük dosyasında disk G/Ç bant genişliği tüketimini
tempdbazaltmak içintempdbgünlük ek yükü 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'nuntempdbsayfasında öğesini yapılandırın veya komut satırı parametresini/SQLTEMPDBFILECOUNTkullanı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. - Içindeki
tempdbtüm ayırmalar tekdüzen kapsamlar 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. -
AUTOGROW_ALL_FILESözelliği dosya grubu içinPRIMARYher zaman açıktır.
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 çözmek için SQL Server 2019 (15.x), bellek içi veritabanı özellik ailesinin parçası olan bellek içi TempDB meta verilerinin bir parçası olan bir özellik kullanıma sunulmuştur.
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.
Tip
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 iyileştirilmiş TempDB meta verilerini etkinleştirdikten sonra sunucu herhangi bir nedenle başlatılamazsa, başlangıç seçeneğini kullanarak Veritabanı Altyapısı örneğini -f başlatarak özelliği atlayabilirsiniz. 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ı yetersiz bellek koşullarından korumak için, Bellek için iyileştirilmiş TempDB meta verileri tarafından tüketilen belleği sınırlayan bir kaynak yöneticisi tempdb bağlamanızı öneririz. Aşağıdaki örnek betik bir kaynak havuzu oluşturur ve en fazla belleğini 20%olarak ayarlar, kaynak yöneticisini etkinleştirir ve kaynak havuzuna bağlanır tempdb .
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ğlamasını kaldırma
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 bellek yetersiz hatalara neden olan bellek katibi tarafından
MEMORYCLERK_XTPyüksek bellek kullanımı 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 bkz. Bellek için iyileştirilmiş tempdb meta verilerini yapılandırma ve kullanma. - Sistem saklı yordamı, artık gerekli olmayan belleği serbest bırakmak
MEMORYCLERK_XTPiçin düzenli aralıklarla yürütülebilir. Daha fazla bilgi için bkz. sys.sp_xtp_force_gc (Transact-SQL).
Daha fazla bilgi için bkz. Bellek yetersiz bellek hataları için bellek için iyileştirilmiş tempdb meta verileri (HkTempDB).
-
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, sistem kataloğu görünümlerindetempdbyapılan sorgular yalıtım düzeyini kullanırSNAPSHOT. 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:
- Dosyalar için
tempdbetkinleş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ı kullanıyorsanız, bakım işlerinizi yürütür ve alanı izler
tempdb. - 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
içinde tempdb disk alanının dolması önemli kesintilere ve uygulama kapalı kalma süresine neden olabilir. Dosyalarda kullanılan alanı izlemek için tempdb dinamik yönetim görünümünü kullanabilirsiniz.
Örneğin, aşağıdaki örnek betik şunları bulur:
- içinde
tempdbboş alan (büyüme içintempdbkullanılabilir olabilecek boş disk alanı dikkate alınmaz). - Geleneksel sürüm deposu tarafından 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
- İç nesneler tarafından kullanılan 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;
Oturum veya görev düzeyinde sayfa tempdb ayırma veya serbest bırakma etkinliğini izlemek için , sys.dm_db_session_space_usage ve dinamik yönetim görünümlerini sys.dm_db_task_space_usage 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 çalışmakta olan tüm görevlerde iç nesneler tarafından ayrılan ve serbest bırakılan alanı almak tempdb 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 tamamlanan görevler için her oturum ve istek için iç ve kullanıcı nesneleri tarafından ayrılan ve şu anda kullanılan alanı bulmak tempdb için 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;