AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 207068
Accepted
Shooter McGavin
Shooter McGavin
Asked: 2018-05-18 07:04:33 +0800 CST2018-05-18 07:04:33 +0800 CST 2018-05-18 07:04:33 +0800 CST

Como faço para corrigir arquivos TempDB irregulares?

  • 772

Recentemente, adicionei mais núcleos de CPU a um SQL Server e, como aconselham as práticas recomendadas, separei os arquivos tempDB no mesmo número de núcleos(8).

Além disso, junto com as práticas recomendadas, expandi o tamanho dos novos arquivos tempdb, limitei o crescimento automático e reduzi os arquivos originais para corresponder ao tamanho dos novos arquivos.

O problema é que, como eu estava passando de um único núcleo para 8 núcleos, todos os dados do tempdb permaneceram no primeiro arquivo, o que não me permitiria diminuir. Agora eu tenho um arquivo tempdb que é maior que os outros e gostaria de mudar isso.

Suspeito que para corrigir isso, será necessário uma interrupção.

  1. Existe uma maneira de fazer isso sem uma interrupção?

  2. Vale a pena abordar este problema? Eu sei o que as melhores práticas dizem, mas essa instância realmente causa algum problema prático além da feiúra?

sql-server sql-server-2016
  • 2 2 respostas
  • 1276 Views

2 respostas

  • Voted
  1. Best Answer
    Tibor Karaszi
    2018-05-18T07:45:01+08:002018-05-18T07:45:01+08:00

    EMPTYFILE é só lá é transferir todas as páginas para outros arquivos, para que posteriormente você possa fazer ALTER DATABASE... REMOVE FILE. Isso não parece ser o que queremos aqui.

    Eu não me preocuparia com isso, apenas deixaria isso se resolver na próxima reinicialização. Lembre-se de que o tempdb é recriado com base no que sys.master_files diz. Este é o "modelo" para tempdb em relação ao número, posicionamento, tamanho etc dos arquivos.

    Você ajusta o tamanho em sys.master_files usando ALTER DATABASE ... MODIFY FILE. Se você quiser ajuda, basta usar SSMS, tempdb, propriedades e ajustar o tamanho de qualquer um dos arquivos tempdb para um tamanho maior . Em seguida, faça o script do comando e ajuste ao seu gosto. (A razão para não especificar um tamanho menor na GUI é que ele irá gerar um DBCC SHRINKFILE, que apenas (tenta) endereçar o tamanho atual para tempdb e não faz nada para o modelo. É perfeitamente possível especificar um tamanho menor que tamanho atual usando ALTER DATABASE para tempdb, pois afetará apenas o "modelo" e não o tamanho atual.

    • 8
  2. AndreasWBJ
    2021-03-03T03:54:10+08:002021-03-03T03:54:10+08:00

    Então como eu não sei o tamanho do tempdb que você está trabalhando, vou fazer um exemplo. Layout de arquivos de banco de dados

    Certifique-se de definir o crescimento automático de todos os arquivos no grupo de arquivos.

    ALTER DATABASE [tempdb] MODIFY FILEGROUP [PRIMARY] AUTOGROW_ALL_FILES
    

    Então, para tornar os arquivos do mesmo tamanho, eu reduziria o tempdev para 30.000 MB, como o restante dos arquivos. Eu faria isso em incrementos para que o psiquiatra pudesse ser interrompido e reiniciado sem que o trabalho até agora fosse desperdiçado.

    USE [tempdb]
    DECLARE @FileName sysname = N'tempdev';
    DECLARE @TargetSize INT = (SELECT 1 + size*8./1024 FROM sys.database_files WHERE name = @FileName);
    DECLARE @Factor FLOAT = .999;
     
    WHILE @TargetSize > 30000
    BEGIN
        SET @TargetSize *= @Factor;
        DBCC SHRINKFILE(@FileName, @TargetSize);
        DECLARE @msg VARCHAR(200) = CONCAT('Shrink file completed. Target Size: ', 
             @TargetSize, ' MB. Timestamp: ', CURRENT_TIMESTAMP);
        RAISERROR(@msg, 1, 1) WITH NOWAIT;
        WAITFOR DELAY '00:00:01';
    END;
    

    Se eu fosse bloqueado por uma página, tentaria ver se é algo que eu poderia liberar.

    USE [tempdb]
    GO
    DBCC DROPCLEANBUFFERS
    GO
    DBCC FREEPROCCACHE
    GO
    DBCC FREESESSIONCACHE
    GO
    DBCC FREESYSTEMCACHE ( 'ALL')
    GO
    

    E então eu começaria o psiquiatra novamente.

    Se ainda estiver bloqueado por uma página, eu definiria o tamanho do arquivo inicial para que o arquivo tenha o mesmo tamanho após a próxima reinicialização do serviço sql.

    ALTER DATABASE TempDB MODIFY FILE
    (NAME = tempdev, SIZE = 30000MB )
    GO
    
    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve