Gostaria de saber duas coisas:
- como você move com segurança o tempdb com tempo de inatividade mínimo?
- quantos arquivos tempdb você precisa?
É 1 arquivo por núcleo? Então quad-core = 4 arquivos tempdb, criando três novos?
fonte
Gostaria de saber duas coisas:
É 1 arquivo por núcleo? Então quad-core = 4 arquivos tempdb, criando três novos?
Para mover tempdb
arquivos, basta fazer o seguinte:
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
Se você deseja adicionar um novo arquivo tempdb
, basta fazer o seguinte (desde que você queira adicioná-lo ao grupo de PRIMARY
arquivos ou crie seu próprio):
alter database tempdb
add file
(
name = tempdb2,
filename = 'C:\YourNewTempdbDir\Tempdb2.ndf'
)
go
Para que essas alterações entrem em vigor, você precisará reiniciar o serviço SQL Server. No que diz respeito à minimização do tempo de inatividade, você fica restrito à quantidade de tempo que levará para a reinicialização do serviço . Você não precisa se preocupar em mover os tempdb
arquivos de banco de dados preexistentes , pois o SQL Server sempre recria os arquivos e os novos locais / arquivos serão criados na inicialização do serviço.
Quanto ao "1 arquivo de dados tempdb por núcleo", isso é amplamente um mito. A abordagem correta é monitorar a tempdb
contenção de arquivos nas páginas Espaço Livre de Página (PFS), Mapa de Alocação Global (GAM) e Mapa de Alocação Global Compartilhado (SGAM). Consulte este artigo para obter uma consulta (link alternativo) que analisa a sys.dm_os_waiting_tasks
DMV para ver quanta tempdb
contenção de arquivo existe. Então você precisa sair disso, em vez de apenas cobrir tempdb
a mesma quantidade de arquivos que há núcleos. É a abordagem mais aconselhável.
Para mover o tempdb, execute:
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
Em seguida, reinicie o serviço do SQL Server (MSSQLServer).
Número de arquivos no tempdb - consulte o artigo de Paul Randall: Um mito do DBA do SQL Server por dia: (12/30) o tempdb sempre deve ter um arquivo de dados por núcleo do processador
Por conselho da Microsoft :
Como regra geral, se o número de processadores lógicos for menor ou igual a 8, use o mesmo número de arquivos de dados que os processadores lógicos.
Se o número de processadores lógicos for maior que 8, use 8 arquivos de dados e, se a contenção continuar, aumente o número de arquivos de dados em múltiplos de 4 (até o número de processadores lógicos) até que a contenção seja reduzida para níveis aceitáveis ou faça alterações na carga de trabalho / código.
Mover os arquivos TempDB é um processo em duas etapas:
SQL Server
serviço para que a alteração entre em vigor (esse é o tempo de inatividade mínimo necessário)Para informar ao SQL onde criar os novos arquivos TempDB, você pode usar:
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];
Isso irá gerar as instruções T-SQL que você precisa executar para mover os arquivos para o novo drive:\folder
desejado. (clique na imagem para aumentar)
Depois de executar suas instruções em movimento, você pode executar a consulta acima novamente, para verificar se a Current Location
coluna agora está mostrando o seu novo drive:\folder
.
Quando estiver satisfeito com as alterações, reinicie o serviço SQL Server .