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 / 188016
Accepted
Randy Minder
Randy Minder
Asked: 2017-10-10 06:18:58 +0800 CST2017-10-10 06:18:58 +0800 CST 2017-10-10 06:18:58 +0800 CST

Isolamento de instantâneo versus leitura confirmada - OLTP e bancos de dados de relatórios

  • 772

Acabei de ler um excelente artigo sobre níveis de isolamento aqui . Nossa empresa iniciará em breve o desenvolvimento de uma reescrita e expansão de nosso produto atual. Meu desejo é ter um banco de dados OLTP e um banco de dados de relatórios separado, mais desnormalizado. Supondo que sejamos um pouco disciplinados e que a maioria de nossas consultas ad-hoc e de tipo de relatório vá para o banco de dados de relatórios, parece apropriado que nosso banco de dados OLTP tenha um nível de isolamento padrão de Read Committed (não precisaremos de um isolamento mais rigoroso level para OLTP) e nosso banco de dados de relatórios seja Snapshot Isolation (provavelmente RCSI)?

Meu pensamento é que, se nosso banco de dados OLTP for realmente um banco de dados OLTP verdadeiro e não servir como um banco de dados de relatórios, não precisaremos de isolamento de instantâneo e da sobrecarga associada que isso acarreta. Mas o isolamento de instantâneo seria desejável no banco de dados de relatórios para que os leitores não sejam bloqueados pelo fluxo constante de dados que chegam, e a leitura da última versão salva de uma linha seria aceitável.

sql-server isolation-level
  • 2 2 respostas
  • 1042 Views

2 respostas

  • Voted
  1. Best Answer
    David Browne - Microsoft
    2017-10-10T08:40:04+08:002017-10-10T08:40:04+08:00

    Apenas para adicionar à outra resposta.

    O SQL Server oferece suporte a dois tipos diferentes de READ COMMITTED, travamento herdado READ COMMITTED e READ COMMITTED SNAPSHOT. Se você já criou e deu suporte a um aplicativo OLTP de alto volume no bloqueio de READ COMMITTED, sabe por que o RCSI foi introduzido (além de facilitar a portabilidade de aplicativos Oracle para o SQL Server).

    Bloquear READ COMMITTED é complicado para obter simultaneidade e é propenso a bloqueios, pois leitores bloqueiam escritores e escritores bloqueiam leitores. Deadlocks são um tipo de bug em seu aplicativo, mas são difíceis de encontrar em testes. Assim, você tem a chance de fazer uma escolha que reduz o número de bugs difíceis de encontrar nos testes. Isso vale muito. O RCSI também aumenta a simultaneidade de seu aplicativo, permitindo que você escale verticalmente para usar vários núcleos com mais facilidade.

    Assim, o RCSI aumenta a escalabilidade e a confiabilidade do seu aplicativo, ao custo de um pouco de contabilidade extra para UPDATES e DELETES (e INSERTS se você tiver um gatilho) e 14 bytes extras por linha.

    O RCSI é mais simples de programar, o principal é que às vezes você precisa optar por uma leitura de bloqueio usando a dica de tabela UPDLOCK quando quiser ler uma linha e atualizá-la imediatamente e precisar garantir que nenhuma outra sessão faça o mesma coisa simultaneamente.

    • 8
  2. Dave Markle
    2017-10-10T06:31:51+08:002017-10-10T06:31:51+08:00

    Eu não suporia que o instantâneo ou o INSTANTÂNEO COMMITIDO DE LEITURA necessariamente aumentarão sua sobrecarga que pode levar à degradação do desempenho - os tempos de espera reduzidos podem aumentar a taxa de transferência.

    O perigo com RCS e SNAPSHOT tem mais a ver com como o aplicativo é codificado - se seus programadores assumirem a semântica de bloqueio de READ COMMITTED quando as consultas forem executadas no modo Snapshot, você poderá ter problemas. Por exemplo

    UPDATE foo SET bar = 1 + (SELECT MAX(bar) from foo);
    

    provavelmente causará problemas em situações de alto rendimento porque vários leitores obterão o mesmo valor MAX(bar) ao mesmo tempo.

    No entanto, você provavelmente ainda precisará de alguma forma de relatórios e consultas operacionais não OLAP, e o modo de instantâneo pode ser um grande benefício para o desempenho.

    Meu ponto é que você pode projetar e desenvolver seu sistema OLTP para o modo RCS e deve considerá-lo. Afinal, é assim que a maioria dos sistemas OLTP no Oracle são escritos.

    • 4

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