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 / user-15407

Erik Hart's questions

Martin Hope
Erik Hart
Asked: 2013-11-24 03:40:39 +0800 CST

Quão ruim é a poluição do plano de consulta (muitos planos equivalentes no cache)?

  • 6

Atualmente, a pergunta afeta C#/.NET, acesso ao banco de dados baseado em ADO.NET e SQL Server 2008 R2, mas acho que também se aplica a outros bancos de dados.

Percebi que alguns módulos antigos de um sistema têm consultas SQL não ideais, com várias strings de valor concatenadas em vez de espaços reservados para parâmetros. Eles fazem uma votação em uma tabela, como a cada 10 segundos, para obter itens adicionados durante os últimos minutos, o que gera um novo plano de consulta a cada execução.

O desempenho deles não é tão ruim, não há risco de injeção de SQL (sem formulários web/usuário), eles são antigos e daria muito trabalho alterar suas consultas para corrigir a parametrização. Sugiro fazer essa mudança, mas há o debate de que seria uma perda de tempo, sendo outras coisas mais importantes.

Editar: o banco de dados deve ser executado principalmente com consultas parametrizadas (que todos os módulos mais recentes usam), então gostaria de evitar a opção "otimizar para ad hoc". As consultas parcialmente parametrizadas criam um plano de qualquer maneira. Existe uma desvantagem ao executar no modo otimizado ad-hoc, com consultas principalmente parametrizadas?

Para mim, parece que esses módulos antigos ocupam uma grande parte dos recursos do banco de dados, embora sejam poucos. Mesmo um único módulo desse tipo criaria milhares de planos de consulta ao longo do tempo, enquanto todos os módulos mais novos juntos têm menos.

É importante alterá-los ou posso deixá-los em seu estado, com otimização/consultas parametrizadas apenas nos módulos atuais/futuros?

SQL é como:

select ItemId, ItemName from Items 
where ItemType=3 and ItemCreator=1234 
and ItemDate >= '2013-11-23 12:30:00'

onde os valores variam e a data é alguns minutos antes de agora. Em alguns casos, a data foi alterada para um parâmetro como "@startDate", para evitar problemas de formato, mas os valores ItemType e ItemCreator ainda são strings concatenadas.

Ao monitorar planos de consulta com DMV ou Activity Monitor (Recent Expensive Queries - Plan Count coluna), percebo que algumas dessas consultas têm mais de 8.000 planos de consulta equivalentes no cache:

select count(*), query_plan_hash 
from sys.dm_exec_query_stats 
group by query_plan_hash 
order by count(*) desc

em seguida, selecionando o plano XML com um CROSS APPLY em sys.dm_exec_query_plan, com identificadores de plano selecionados pelo hash do plano de consulta.

Edição/Conclusão temporária: Parece que é melhor deixar os aplicativos muito antigos como estão, mesmo ao criar toneladas de consultas ad hoc. Meu maior medo era que a enxurrada de consultas ad hoc de uso único fizesse com que os bons planos de consulta parametrizados e preparados para vários usos fossem removidos do cache. Isso não acontece porque, quando a limpeza é feita, os planos ad hoc são removidos primeiro e outros são classificados por fatores como complexidade, número de usos etc. Portanto, as consultas parametrizadas com alta taxa de uso provavelmente serão mantidas, não importa quantas planos ad hoc ou parcialmente parametrizados inundam. A otimização ad hoc reduz o tamanho do plano (na verdade, nenhum plano real é armazenado no primeiro uso), mas ainda mais planos podem ser mantidos, com um uso de memória semelhante (está correto?). Mesmo o SQL parcialmente parametrizado (parâmetros DateTime para evitar problemas de formato local) será removido rapidamente se não for usado novamente, mesmo quando enviado com sp_executesql, que força a parametrização e o armazenamento em cache do plano. Ter um grande número (5.000 a 8.000+) de planos de consulta ad hoc equivalentes não é bom, mas provavelmente menos prejudicial do que ter que vasculhar anos C#, C++, talvez até código do Visual Studio 6.0, para corrigir consultas (ninguém paga por isso, e o material ainda está funcionando sem problemas reconhecíveis).

sql-server-2008-r2 cache
  • 1 respostas
  • 4324 Views
Martin Hope
Erik Hart
Asked: 2013-11-05 10:13:57 +0800 CST

Configure o usuário Oracle no Enterprise Manager para CREATE VIEW em qualquer uma de suas tabelas

  • 2

É possível configurar um usuário Oracle no Enterprise Manager, para que ele possa posteriormente criar visualizações em qualquer tabela futura ainda desconhecida em seu esquema?

No momento, estou enfrentando o erro "ORA-01031 privilégios insuficientes", porque nenhum SELECT individual ou direitos de modificação de dados foram concedidos (somente por meio da função, mais a função CONNECT, incluindo CREATE VIEW - EDIT: errado! Não faz mais! ).

No entanto, eu executo um script de criação de banco de dados, executado no SQL Developer, que cria tabelas e agora deve criar uma exibição com base nas tabelas criadas anteriormente (como outra tabela). O script não "conhece" a conta de usuário que o está executando e basicamente não está fazendo nenhuma configuração de direitos/privilégios.

É basicamente como:

CREATE TABLE Members (
    ID        number(10),
    Name      varchar2(100),
    Street_No varchar2(100),
    ZIP       number(5),
    City      varchar2(100)
);

CREATE VIEW MembersNamesOnly AS
    SELECT ID, Name FROM Members;

Detectar o usuário atual (executando o script) e conceder a si mesmo os direitos não funciona e resultaria em uma sobrecarga de código irritante, concedendo direitos para muitas tabelas individuais. E problemas novamente, quando outros usuários devem usar a visão, mas obtêm seus direitos apenas por meio de funções, sem atribuições tediosas de direitos de tabela de usuário para cada usuário e tabela.

Essa configuração é possível? Criar tabelas e visualizações com base nelas, em um único script? No momento, estou com medo de não poder usar nenhuma exibição, sem reescrever pesadamente todo o código de criação de banco de dados existente.

oracle view
  • 2 respostas
  • 656 Views

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