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 / 12286
Accepted
Will A
Will A
Asked: 2010-07-05 08:46:10 +0800 CST2010-07-05 08:46:10 +0800 CST 2010-07-05 08:46:10 +0800 CST

SQL Server - Tabelas temporárias x físicas

  • 772

Um movimento está em andamento em meu local de trabalho para deixar de usar tabelas #temp e, em vez disso, usar tabelas físicas permanentes com SPIDs. Sempre que alguém insere anteriormente INTO em uma tabela #temp, agora INSERT INTO dbo.MyPermanentTable (SPID, ...) VALUES (@@SPID, ...)é necessário um - junto com um monte de DELETE FROM dbo.MyPermanentTable WHERE SPID = @@SPIDinstruções no início, por exemplo, de um procedimento armazenado. Além disso, nem é preciso dizer que, em qualquer lugar em que essas 'tabelas permanentes para armazenar dados temporários' sejam usadas, é preciso ter o cuidado de incluir um arquivo WHERE SPID = @@SPID.

A lógica por trás da mudança em direção a essa prática é que ela melhorará o desempenho geral do servidor no qual as consultas estão sendo executadas (reduzindo a E/S e a contenção em tempdb). Não gosto dessa abordagem por vários motivos - é feia, potencialmente perigosa e parece que pode prejudicar o desempenho das consultas que usam o novo esquema.

Alguém tem alguma experiência com isso ou abordagens semelhantes para eliminar tabelas #temp?

sql-server performance
  • 3 3 respostas
  • 11622 Views

3 respostas

  • Voted
  1. Best Answer
    Remus Rusanu
    2010-07-05T09:19:41+08:002010-07-05T09:19:41+08:00

    Pode-se demonstrar facilmente que isso não reduzirá IO nem contenção, mas aumentará ambos.

    • IO : Cada linha inserida, lida ou excluída de uma tabela #temp agora será inserida, lida ou excluída da tabela @@SPID. Mas cada linha será mais larga com uma coluna @@SPID adicional, portanto, o número de páginas necessárias aumentará ligeiramente e o IO será um pouco maior. Porém, mais importante, a queda de uma tabela #temp e a inicialização de uma tabela #temp de uma nova sessão por uma sessão agora terão que ser simuladas com um DELETE FROM @@spidTable WHERE spid = @@SPIDe, portanto, a operação de truncar/criar (ou seja, operações de gerenciamento de extensão de página) serão transformadas em operações de linha, incomparavelmente mais lento.
    • Contenção : Cada varredura que estava usando bloqueios de página na tabela #temp agora terá o potencial de bloquear uma página com linhas spid não relacionadas, criando assim uma contenção inexistente anteriormente. Cada atualização que atinge o limite de escalonamento de bloqueio tem a oportunidade de escalar o bloqueio para bloqueio de tabela e, assim, bloquear todos os outros spid.

    Portanto, embora seja verdade que você não atingirá a contenção mítica de IAM/SGAM/GAM em tempdb, a única razão pela qual isso aconteceria é porque suas operações se tornariam muito mais lentas devido a E/S extra comum e contenção extra.

    • 18
  2. Ben M
    2010-07-05T08:57:52+08:002010-07-05T08:57:52+08:00

    Esta parece ser uma solução drástica. Há muitos artigos on-line sobre como reduzir a contenção de tempdb (e otimizar seu uso) - sua organização examinou minuciosamente esse caminho?

    http://www.sql-server-performance.com/tips/tempdb_p1.aspx

    http://www.sqlservercentral.com/blogs/robert_davis/archive/2010/03/05/Breaking-Down-TempDB-Contention.aspx

    http://searchsqlserver.techtarget.com/tip/Optimize-tempdb-in-SQL-Server-by-striping-and-splitting-to-multiple-files

    etc.

    • 5
  3. SPE109
    2010-07-05T08:59:55+08:002010-07-05T08:59:55+08:00

    Parece-me que você deveria estar solucionando os problemas de desempenho no tempDB, há algumas sugestões aqui

    • 2

relate perguntas

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

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

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

Sidebar

Stats

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

    Como fazer um mysqldump com um banco de dados de uso no dump

    • 4 respostas
  • Marko Smith

    No MySQL Workbench, insira uma nova coluna no "topo" de uma tabela?

    • 4 respostas
  • Marko Smith

    SQL Server - Tabelas temporárias x físicas

    • 3 respostas
  • Marko Smith

    Quando uma varredura de tabela completa é melhor que uma varredura de índice?

    • 4 respostas
  • Marko Smith

    Qual é a diferença entre Shrink Database e File?

    • 3 respostas
  • Marko Smith

    Problema de coleta de lixo Sql FILESTREAM

    • 1 respostas
  • Marko Smith

    Problemas de DBCC do SQL Server 2008

    • 2 respostas
  • Marko Smith

    Como você para, coloca offline e exclui um banco de dados SQL Server em recuperação?

    • 2 respostas
  • Marko Smith

    Como faço para restaurar um banco de dados do SQL Server 2000 para uma instância do SQL Server 2008?

    • 5 respostas
  • Marko Smith

    Desempenho atingido usando CAST em T-SQL

    • 3 respostas
  • Martin Hope
    user481826 Como fazer um mysqldump com um banco de dados de uso no dump 2010-10-29 16:08:59 +0800 CST
  • Martin Hope
    Will A SQL Server - Tabelas temporárias x físicas 2010-07-05 08:46:10 +0800 CST
  • Martin Hope
    NibblyPig Particionamento de tabelas no SQL 2008 - Por quê? 2010-06-30 00:59:23 +0800 CST
  • Martin Hope
    Gnomo Interpretando um plano de execução 2010-09-10 10:31:11 +0800 CST
  • Martin Hope
    ahsan Quando uma varredura de tabela completa é melhor que uma varredura de índice? 2010-12-10 10:16:54 +0800 CST
  • Martin Hope
    Tom DeMille Devo reduzir regularmente meu banco de dados ou pelo menos meu arquivo de log? 2010-04-24 08:19:19 +0800 CST
  • Martin Hope
    Jango Qual é a diferença entre Shrink Database e File? 2010-08-24 10:25:42 +0800 CST
  • Martin Hope
    CrapHands Como você para, coloca offline e exclui um banco de dados SQL Server em recuperação? 2010-12-18 07:12:36 +0800 CST
  • Martin Hope
    Ryan Delucchi Desempenho atingido usando CAST em T-SQL 2010-07-02 15:11:16 +0800 CST
  • Martin Hope
    Manjot SQL 2005: Podemos determinar quanto o trabalho de manutenção do índice de reconstrução pode aumentar os arquivos de log do banco de dados? 2010-08-12 18:40:44 +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