Movendo e criando com segurança novos arquivos tempdb

21

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?

Stuart Blackler
fonte

Respostas:

22

Para mover tempdbarquivos, 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 PRIMARYarquivos 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 tempdbarquivos 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 tempdbcontençã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_tasksDMV para ver quanta tempdbcontenção de arquivo existe. Então você precisa sair disso, em vez de apenas cobrir tempdba mesma quantidade de arquivos que há núcleos. É a abordagem mais aconselhável.

Thomas Stringer
fonte
8
  1. 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).

  2. 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

jl01
fonte
4

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:

  1. Informe ao SQL onde deseja que seus novos arquivos TempDB acessem (isso não tem tempo de inatividade)
  2. Reinicie o SQL Serverserviç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:\folderdesejado. (clique na imagem para aumentar)

Imagem mostrando 2 linhas com detalhes em arquivos TempDB e instruções T-SQL para movê-los

Depois de executar suas instruções em movimento, você pode executar a consulta acima novamente, para verificar se a Current Locationcoluna agora está mostrando o seu novo drive:\folder.

Imagem mostrando os novos locais dos arquivos TempDB

Quando estiver satisfeito com as alterações, reinicie o serviço SQL Server .

Oreo
fonte