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 / 103362
Accepted
Geoff Patterson
Geoff Patterson
Asked: 2015-06-06 10:51:44 +0800 CST2015-06-06 10:51:44 +0800 CST 2015-06-06 10:51:44 +0800 CST

Controlando como a atividade do tempdb é dividida entre as unidades (tempdb em unidades de estado sólido e giratórias)

  • 772

Estou vendo o seguinte comportamento de E/S do tempdb durante um período de uma hora: insira a descrição da imagem aqui

Há uma boa quantidade de E/S de disco gerada por várias cargas de trabalho de DW em execução na máquina, algumas das quais não cabem nos aproximadamente 280 GB de memória alocada para SQL. Um aspecto interessante é que grande parte da E/S está concentrada nas unidades de disco giratórias (E) em vez das unidades de estado sólido (F e G) que lidam com a E/S com muito mais eficiência.

Pré-alocamos 300 GB completos cada (600 GB no total) nas unidades F e G para tempdb (usando 12 arquivos) e pré-alocamos 1,3 TB para tempdb na unidade E (atualmente 1 arquivo). Os dados de E/S acima sugerem que o uso de tempdb é distribuído entre arquivos com base no tamanho atual do arquivo. Não consegui encontrar documentação sobre isso, mas também executei uma consulta como a seguinte para investigar mais a fundo:

-- While running this query, writes to tempdb are distributed to E/F/G drives
-- in proportion to their current size.  This was shown by both
-- sys.dm_io_virtual_file_stats and the space used on the tempdb files before and after
SELECT TOP 100000000 *
INTO #temp
FROM [A_Really_Big_Table]

O comportamento ideal seria que F e G fossem usados ​​exclusivamente, a menos que ambos estivessem cheios, caso em que a unidade de disco giratória deve fornecer espaço tempdb adicional para que cargas de trabalho ocasionais muito grandes possam ser atendidas sem esgotar o espaço tempdb.

Estamos no caminho certo ao observar que o uso do tempdb é distribuído entre os arquivos com base no tamanho atual dos arquivos? Foi um pouco surpreendente ver esse tipo de distribuição em vez de ver um uso igual de cada arquivo (o que provavelmente foi a suposição de quem configurou esse hardware e decidiu alocar apenas um para tempdb no disco giratório).

Com base no comentário de Paul White em resposta a esta pergunta , estamos pensando na seguinte abordagem:

  • Reduza os arquivos tempdb no disco giratório. Com base em nosso teste inicial, isso deve mudar a distribuição atual do trabalho mais para as unidades de estado sólido
  • Configure os arquivos tempdb de estado sólido para pré-alocar seu espaço (como já fazemos agora)
  • Configure os arquivos tempdb do disco giratório para iniciar sem alocação. Certifique-se de que a inicialização instantânea do arquivo esteja ativada. O Tempdb aumentará no disco giratório apenas conforme necessário (o que provavelmente ocorrerá no máximo uma vez por semana).
  • Crie um plano de manutenção que reduza os arquivos tempdb no disco giratório após períodos de pico de carga, colocando a distribuição de volta em favor dos arquivos tempdb de estado sólido.

Isso parece razoável? Existem abordagens alternativas ou problemas potenciais a serem considerados? Obviamente, testaremos a abordagem na medida do possível, mas não poderemos fazê-lo em hardware de teste completamente equivalente.

sql-server sql-server-2012
  • 1 1 respostas
  • 565 Views

1 respostas

  • Voted
  1. Best Answer
    Hannah Vernon
    2015-06-06T11:18:00+08:002015-06-06T11:18:00+08:00

    As gravações de arquivo são distribuídas entre os arquivos no mesmo grupo de arquivos proporcionalmente com base no tamanho atual de cada arquivo no grupo de arquivos. Isso é conhecido como "algoritmo de preenchimento proporcional" - consulte http://sqlserver-performance-tuning.net/?p=2552 para obter alguns detalhes interessantes sobre isso.

    tempdbpode ter apenas um único grupo de arquivos. Se você tentar criar um grupo de arquivos, tempdbobterá o seguinte:

    Msg 1826, Level 16, State 1, Line 1
    User-defined filegroups are not allowed on "tempdb".
    

    Se você tiver o sinalizador de rastreamento 1117 ativado, os arquivos em um grupo crescerão automaticamente simultaneamente entre os arquivos no grupo de arquivos para cada arquivo que não esteja atualmente em seu tamanho máximo e onde houver espaço no disco.

    Sua instância tem o sinalizador de rastreamento 1117 ativado? Você provavelmente desejaria desativá-lo neste caso específico, embora as "práticas recomendadas" geralmente indiquem ter isso ativado. Há um item no Microsoft Connect solicitando uma configuração como esta que pode ser habilitada/desabilitada por banco de dados, aqui: https://connect.microsoft.com/SQLServer/feedback/details/781198/trace-flag -1117-autogrowth-of-data-files-is-instance-wide-would-like-a-flag-for-just-tempdb

    Supondo que os SSDs sejam dedicados ao tempdb, concordo com sua afirmação e sugiro tornar o tempdb nos SSDs o maior possível (não 100% da unidade, talvez deixe 10% livre). Torne os arquivos tempdb no disco tão pequenos quanto possível, digamos 1 MB, com crescimento automático e tamanho máximo de arquivo tão grande quanto você precisar. Monitore o crescimento do arquivo tempdb nos HDDs e defenda a obtenção de SSDs maiores se você acha que a empresa se beneficiaria com isso.

    De acordo com a documentação, os arquivos do SQL Server podem ser criados em partições brutas (partições que não foram formatadas) usando apenas a letra da unidade da partição na ALTER DATABASE ... ADD FILEsintaxe. Isso aparentemente elimina a necessidade de aumentar ou diminuir o arquivo, pois ele usa inerentemente toda a partição bruta, conforme necessário. Não tenho certeza se isso ajudaria sua situação ou não; apenas pensei em jogá-lo lá fora como um factóide interessante. Consulte "Se o arquivo estiver em uma partição bruta, os_file_name deve especificar apenas a letra da unidade de uma partição bruta existente. Apenas um arquivo pode ser colocado em cada partição bruta."

    • 3

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