Bilmek istediğim iki şey:
- tempdb'yi minimum kesinti süresiyle nasıl güvenle hareket ettirirsiniz?
- kaç tempdb dosyaya ihtiyacınız var?
Çekirdek başına 1 dosya mı? Yani dört çekirdekli = 4 tempdb dosya, üç yenilerini oluşturmak?
Bilmek istediğim iki şey:
Çekirdek başına 1 dosya mı? Yani dört çekirdekli = 4 tempdb dosya, üç yenilerini oluşturmak?
Yanıtlar:
tempdb
Dosyaları taşımak için aşağıdakileri yapmanız yeterlidir:
alter database tempdb
modify file
(
name = tempdev,
filename = 'C:\YourNewTempdbDir\tempdb.mdf'
)
go
alter database tempdb
modify file
(
name = templog,
filename = 'C:\YourNewTempdbDir\templog.ldf'
)
go
Yeni bir dosya eklemek istiyorsanız tempdb
, aşağıdakileri yapmanız gerekir ( PRIMARY
dosya grubuna eklemek veya kendi klasörünüzü oluşturmak istemeniz şartıyla ):
alter database tempdb
add file
(
name = tempdb2,
filename = 'C:\YourNewTempdbDir\Tempdb2.ndf'
)
go
Bu değişikliklerin etkili olması için SQL Server hizmetini yeniden başlatmanız gerekecek. Yani kadarıyla kesinti minimize gider, bunu servis yeniden başlatma için alacak süreyi kısıtlanır . tempdb
SQL Server her zaman dosyaları yeniden oluşturduğundan ve yeni başlatmalar / dosyalar hizmet başlangıcında oluşturulacağından önceden var olan veritabanı dosyalarını taşıma konusunda endişelenmenize gerek yoktur .
"Çekirdek başına 1 tempdb veri dosyası" gelince, bu büyük ölçüde bir efsanedir. Doğru yaklaşım, tempdb
Sayfa Boş Alan (PFS), Küresel Tahsis Haritası (GAM) ve Paylaşılan Küresel Tahsis Haritası (SGAM) sayfalarındaki dosya çekişliliğini izlemektir . Lütfen ne kadar dosya çekişme olduğunu görmek için DMV'ye bakan bir sorgu (alternatif bağlantı) almak için bu makaleyesys.dm_os_waiting_tasks
bakın tempdb
. Öyleyse tempdb
, çekirdekten olduğu kadar aynı miktarda dosyayla örtmek yerine bundan kurtulmanız gerekir . Bu daha tavsiye edilebilir bir yaklaşım.
Tempdb'yi taşımak için aşağıdakileri yürütün:
ALTER DATABASE tempdb
MODIFY FILE ( name=tempdev, filename='D:\Newpath\tempdb.mdf')
GO
ALTER DATABASE tempdb
MODIFY FILE ( name=templog, filename='D:\Newpath\templog.ldf')
GO
Ardından, SQL Server Hizmetinizi (MSSQLServer) yeniden başlatın.
Tempdb'deki dosya sayısı - Paul Randall'ın makalesine bakın: Günde bir SQL Server DBA efsanesi: (12/30) tempdb, işlemci çekirdeği başına her zaman bir veri dosyasına sahip olmalıdır
Gönderen Microsoft'un tavsiyesi :
Genel bir kural olarak, mantıksal işlemci sayısı 8’den küçük veya ona eşitse, aynı sayıda veri dosyasını mantıksal işlemci olarak kullanın.
Mantıksal işlemci sayısı 8'den büyükse, 8 veri dosyası kullanın ve ardından çekişme devam ederse, çekişme kabul edilebilir seviyelere indirilinceye veya oluncaya kadar veri dosyalarının sayısını 4 katına (mantıksal işlemci sayısına kadar) artırın iş yüküne / koduna döner.
TempDB dosyalarını taşımak 2 adımlı bir işlemdir:
SQL Server
Değişikliğin yürürlüğe girmesi için hizmeti yeniden başlatın (bu, ihtiyacınız olan minimum kesintidir )SQL'e yeni TempDB dosyalarını nerede yaratacağınızı söylemek için şunları kullanabilirsiniz:
DECLARE @newDriveAndFolder VARCHAR(8000);
SET @newDriveAndFolder = 'Z:\YourTempDBfolder';
SELECT [name] AS [Logical Name]
,physical_name AS [Current Location]
,state_desc AS [Status]
,size / 128 AS [Size(MB)] --Number of 8KB pages / 128 = MB
,'ALTER DATABASE tempdb MODIFY FILE (NAME = ' + QUOTENAME(f.[name])
+ CHAR(9) /* Tab */
+ ',FILENAME = ''' + @newDriveAndFolder + CHAR(92) /* Backslash */ + f.[name]
+ CASE WHEN f.[type] = 1 /* Log */ THEN '.ldf' ELSE '.mdf' END + ''''
+ ');'
AS [Create new TempDB files]
FROM sys.master_files f
WHERE f.database_id = DB_ID(N'tempdb')
ORDER BY f.[type];
Bu, dosyaları drive:\folder
istediğiniz yeniye taşımak için çalıştırmanız gereken T-SQL ifadelerini üretecektir . (büyütmek için resme tıklayın)
Hareketli ifadelerinizi çalıştırdığınızda, Current Location
sütunun şimdi yeni durumunuzu gösterdiğini kontrol etmek için yukarıdaki sorguyu tekrar çalıştırabilirsiniz drive:\folder
.
Değişikliklerinizden memnunsanız , SQL Server hizmetini yeniden başlatın .