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 / 199509
Accepted
G.Smith
G.Smith
Asked: 2018-03-07 08:19:13 +0800 CST2018-03-07 08:19:13 +0800 CST 2018-03-07 08:19:13 +0800 CST

Monitoramento de desempenho para SQL preparado?

  • 772

Minha empresa está pensando em mudar para o uso completo do SQL preparado em todos os aplicativos para alguns aplicativos. Por alguns dias, tenho tentado responder à pergunta "Temos uma maneira de monitorar o desempenho", como ver uma transação SQL com ações de alta duração/CPU/IO e ver o que estava fazendo para produzir esse alto carregar. Muito do que encontrei foram preocupações de que isso é desnecessário/obsoleto no Microsoft SQL Server. Eu levantei preocupações sobre isso, mas enquanto isso ainda estou tentando encontrar uma maneira de rastrear a atividade.

O melhor que identifiquei é que podemos ter nosso monitoramento de desempenho padrão que sempre tivemos, mas também precisaremos de uma espécie de "anel decodificador mágico" de rastreamento/sessão XE. Isso teria que rastrear as ações Preparar/Despreparar SQL para obter o identificador e as mensagens de conclusão da instrução associada para obter qual é a consulta associada para cada SPID. Então, se encontrarmos em nosso monitoramento de desempenho uma transação dizendo algo como "sp_execute 32 etc etc...", olharíamos para o SPID solicitando essa ação, pegaríamos esse handle # 32 (ou o que for) e olharíamos para o nosso anel decodificador mágico para descobrir qual é a instrução SQL parametrizada que está sendo executada para análise.

A resposta que estaríamos usando atualmente precisa dar suporte ao SQL2008R2 e superior (temos muitas centenas desta versão implantada no momento, pois estamos começando a migrar para a próxima geração), e é por isso que menciono o rastreamento do SQL, pois ainda utilizamos isso no XE para muitas implantações devido às limitações do XE antes do SQL2012.

Ainda estaremos analisando se o SQL preparado é ou não uma boa ideia para nós, pois algumas novas informações que surgem na pesquisa sugerem que pode não ser. Estou simplesmente perguntando se existe uma maneira limpa de monitorar diretamente as ações feitas por meio do SQL preparado sem um método tão complicado de "anel decodificador mágico" para acompanhar o que é o SQL preparado.

sql-server performance
  • 1 1 respostas
  • 122 Views

1 respostas

  • Voted
  1. Best Answer
    Solomon Rutzky
    2018-03-07T14:33:20+08:002018-03-07T14:33:20+08:00

    Você provavelmente precisaria interceptar eventos em nível de instrução, pois a chamada RPC "concluída" sp_executenão mostrará o lote em si.

    Além disso, você precisa de mais do que apenas o SPID. Os IDs de sessão são reutilizados, portanto, não é uma chave granular o suficiente. Você também precisará do ID de conexão, pois é mais exclusivo e é o que a matriz em cache de instruções preparadas está vinculada.

    Finalmente, qual é o ímpeto para passar para declarações preparadas? O único benefício deles é economizar alguns bytes na solicitação de rede se seu aplicativo estiver enviando frequentemente as mesmas consultas parametrizadas. Geralmente, é melhor chamar Stored Procedures para que você não esteja enviando as consultas toda vez. Recentemente, alguém sugeriu que instruções preparadas poderiam ser mais rápidas que Stored Procedures, mas era um caso de uso muito específico: instruções DML simples executadas pelo menos 1 - 2 BILHÕES de vezes por dia (ou seja, as mesmas INSERT INTO dbo.Table (@1, @2, @3);executadas 2 bilhões de vezes com valores diferentes ).

    Se você estiver executando consultas ad hoc não parametrizadas, usar instruções preparadas é inútil na melhor das hipóteses e, na pior das hipóteses, é um retrocesso, considerando o quanto elas são mais difíceis de monitorar.

    Veja também minha resposta, também aqui no DBA.SE, para a seguinte pergunta:

    Qual é o sentido e o benefício de usar SqlCommand.Prepare()?

    • 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

    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