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 / 12185
Accepted
Contango
Contango
Asked: 2011-05-28 00:13:50 +0800 CST2011-05-28 00:13:50 +0800 CST 2011-05-28 00:13:50 +0800 CST

Como posso garantir que as inserções no SQL Server 2008 R2 sejam armazenadas em cache primeiro na RAM?

  • 772

Imagine um fluxo de dados que é "rajada", ou seja, pode ter 10.000 eventos chegando muito rapidamente, seguidos por nada por um minuto.

insira a descrição da imagem aqui

Seu conselho de especialista: como posso escrever o código de inserção C# para o SQL Server, de forma que haja uma garantia de que o SQL armazene tudo imediatamente em sua própria RAM, sem bloquear meu aplicativo por mais do que o necessário para alimentar os dados na referida RAM? Para conseguir isso, você conhece algum padrão de configuração do próprio servidor SQL ou padrões para configurar as tabelas SQL individuais nas quais estou escrevendo?

Claro, eu poderia fazer minha própria versão, que envolve construir minha própria fila na RAM - mas não quero reinventar o Machado de Pedra Paleolítico, por assim dizer.

sql-server c#
  • 3 3 respostas
  • 663 Views

3 respostas

  • Voted
  1. Best Answer
    gbn
    2011-05-28T01:27:51+08:002011-05-28T01:27:51+08:00

    Você já tentou apenas escrever e ver o que acontece? Você tem um gargalo conhecido?

    Se você precisar impedir que seu aplicativo seja bloqueado, uma maneira seria enfileirar as gravações para adiar a chamada do banco de dados. No entanto, espero que a fila seja limpa em um segundo ou 2: então, você precisa de uma fila se estiver tudo bem?

    Ou você pode spool para uma mesa de preparação e, em seguida, liberar mais tarde? Usamos essa técnica para lidar com gravações contínuas de milhões de novas linhas por minuto (na verdade, usamos um banco de dados de teste com recuperação simples): mas não a implementamos até termos experiência de apenas escrever linhas.

    Nota: Cada gravação no SQL Server irá para o disco como parte do protocolo Write Ahead Logging (WAL). Isso se aplica à entrada t-log para essa gravação.

    A página de dados com a linha irá para o disco em algum momento (com base no tempo, uso, pressão de memória, etc.), mas geralmente seus dados estarão na memória de qualquer maneira. Isso é chamado de "Checkpointing" e não remove dados da memória, apenas libera as alterações (editado em 24 de novembro de 2011)

    Editar:

    Para todas as considerações, com base no último parágrafo acima, mude seu LDF para este banco de dados para um conjunto dedicado de discos para obter mais desempenho. O mesmo vale para um banco de dados de preparação (um para MDF/LDF). É bastante comum ter uma dúzia ou 3 volumes diferentes (através de uma SAN normalmente) para o seu servidor de banco de dados

    • 11
  2. Ben Thul
    2011-05-28T04:32:59+08:002011-05-28T04:32:59+08:00

    A menos que esteja faltando alguma coisa, isso violaria o requisito de durabilidade do ACID ( http://en.wikipedia.org/wiki/ACID ). Ou seja, se seu aplicativo "gravar" os dados na RAM e o servidor travar, seus dados serão perdidos.

    Portanto, o que você procura é um sistema não banco de dados que sirva como uma fila para eventual armazenamento em um banco de dados ou um sistema de banco de dados suficientemente rápido para o que você está fazendo. Sugiro tentar o último primeiro e ver se é suficiente; não tome problemas emprestados.

    • 7
  3. Piotr Rodak
    2011-05-28T03:08:39+08:002011-05-28T03:08:39+08:00

    Eu usei uma vez um conjunto de dados para isso. Eu estava inserindo linhas no conjunto de dados conforme elas chegavam e havia outro thread que liberava as linhas a cada 2 segundos ou mais para o banco de dados. Você também pode usar o documento xml para fazer o cachin e depois passar o xml para o banco de dados em uma chamada, isso pode ser ainda melhor.

    Cumprimentos

    Piotr

    • 2

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

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

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

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

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 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
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +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