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 / 192268
Accepted
Rainbolt
Rainbolt
Asked: 2017-12-03 21:16:29 +0800 CST2017-12-03 21:16:29 +0800 CST 2017-12-03 21:16:29 +0800 CST

É possível desabilitar bloqueios para uma tabela específica?

  • 772

É possível desabilitar todos os bloqueios de uma tabela específica em qualquer versão do SQL Server?

Eu tenho um punhado de tabelas que são preenchidas com dados no momento da implantação. Por exemplo, uma das tabelas menores, [items].[Colour], contém 'Blue', 'Green', 'Red', 'White'. Após a implantação, o(s) aplicativo(s) sempre seleciona(m) dessas tabelas (nunca insere, atualiza ou exclui). Eu comecei a pensar, se essas tabelas são apenas lidas, então qual é o sentido de ter bloqueios? Suponho que demore algum tempo para obter um bloqueio. Mesmo que essa quantidade de tempo seja insignificante, parte de mim não ficará satisfeita até que eu mesmo teste a diferença.

Enquanto procurava a resposta por conta própria, descobri que posso marcar um banco de dados inteiro como somente leitura e que pode haver alguns benefícios . Eu quero esses benefícios, mas numa base de tabela por tabela. Eu também li sobre desabilitar o escalonamento de bloqueio, mas se eu entendi a documentação corretamente, isso só levaria a mais bloqueios (embora mais refinados), que é o oposto do que eu quero alcançar.

Eu sei que posso atualizar cada consulta que usa a tabela para ter uma NOLOCKdica, mas isso apresenta um problema secundário. No futuro, quando eu ensinar meu aplicativo a aprender novos Colours em tempo de execução, quero atualizar todas as consultas que usam a tabela para remover a NOLOCKdica? Isso soa como um incômodo.


Parece que a pergunta está recebendo alguns votos negativos e, sem nenhuma explicação fornecida, vou assumir que é porque isso parece que o que estou pedindo é otimização prematura. A otimização prematura é, como apontado em um comentário agora excluído, a raiz de todo mal. Eu sei disso e não estou otimizando prematuramente. Aqui está o porquê.

Tenho permissão para pesquisar essa API uma vez por segundo. Não está declarado na página vinculada, mas vi a regra em algum lugar (confie em mim). De qualquer forma, meu aplicativo leva de 100ms a 800ms para fazer a solicitação HTTP, baixar o arquivo de texto gzip'd e descompactá-lo. A maior parte desse tempo é gasto aguardando a resposta da API. Isso me deixa quase sem tempo para processar todos os dados em tabelas de banco de dados bonitas, organizadas e normalizadas. Para ser competitivo, tenho que processar todos os dados em 200 ms ou menos. Estou tão perto de atingir meu objetivo que estou cortando custos descartando dados que talvez não precise, enviando todos os dados para o banco de dados de uma só vez em um grande e feio pacote etc. Então, sim, estou otimizando, mas não prematuramente (na minha opinião).

Também reconheço que o que estou pedindo pode não trazer benefícios de desempenho. Na verdade, a única solução que foi fornecida até agora não pareceu afetar o desempenho em nada. Eu não poderia saber disso antes de fazer a pergunta, e agora quaisquer futuros visitantes que estejam se perguntando se isso os ajudará podem ver o teste que realizei e saber que não vale a pena. Isso não é útil?

Se isso não resolver as preocupações dos downvoters, por favor, considere deixar um comentário com o que você acha que eu poderia melhorar sobre a pergunta.

sql-server locking
  • 1 1 respostas
  • 727 Views

1 respostas

  • Voted
  1. Best Answer
    David Spillett
    2017-12-04T01:24:40+08:002017-12-04T01:24:40+08:00

    Você pode definir grupos de arquivos individuais como somente leitura, mas, a menos que as versões recentes do servidor SQL tenham alterado os mestres, isso não conferirá o benefício de bloqueio reduzido encontrado ao definir um banco de dados inteiro como somente leitura.

    Você pode tentar manter a configuração somente leitura em um banco de dados separado e usar consultas entre bancos de dados para acessá-la. Use sinônimos para poder fazer referência a esses objetos como se ainda fossem tabelas locais. De cabeça, não posso dizer se isso se comportaria como desejado (bloqueio reduzido) ou se o planejador/executor de consultas acabaria tratando o arranjo da mesma forma como se tivesse apenas um grupo de arquivos somente leitura, mas pode vale a pena testar como uma opção. Se funcionar, para migrar o objeto de volta para o banco de dados normal, simplesmente copie os dados para uma nova tabela e atualize o sinônimo, ou faça o sinônimo completamente e dê à tabela esse nome diretamente (sugiro o último se esta for a única instância desse banco de dados, o primeiro se você tiver muitos que podem estar em versões diferentes em um determinado momento,

    OBSERVAÇÃO: (como apontado por Rainbolt nos comentários abaixo) usar um acesso entre bancos de dados como esse impedirá que você defina restrições de chave estrangeira, portanto, mesmo que isso conferisse um benefício de desempenho das diferenças de bloqueio, ainda não seria recomendado. Portanto, tome a resposta acima como "tecnicamente você poderia" em vez de um bom conselho! Você pode implementar a restrição de uma maneira com uma restrição de verificação ou acionar em todos os lugares em que normalmente teria a restrição FK, mas isso é um trabalho extra para manter/depurar e aplicar de outra maneira (não deixar uma linha ser excluída do objeto referido se for referenciado por linhas em outro lugar) não é possível.

    • 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