Eu tenho um procedimento armazenado usp_appdata
que é usado pela tela de carregamento do aplicativo, bem como por vários outros locais do aplicativo. Este SP consome muitos recursos e retorna muitos dados. Estou planejando fazer uma cópia deste procedimento armazenado usp_appdata_initial
e usá-lo apenas para a tela de carregamento do aplicativo e usar o sp original usp_appdata
para todas as outras chamadas. Dividir o mesmo procedimento em vários procedimentos e usar cada um deles para uma finalidade específica oferece algum benefício de desempenho? Obrigado!
relate perguntas
-
Existe um ganho de desempenho ao manipular dados com procedimentos armazenados em vez de alimentá-los em funções após a recuperação?
-
Como você ajusta o MySQL para uma carga de trabalho pesada do InnoDB?
-
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?
Se você estiver fazendo uma cópia literal do procedimento e chamando uma instância de uma pilha de chamadas e a outra instância de outra pilha de chamadas, não deve haver diferença de desempenho.
Se você estiver refatorando o código necessário apenas para a tela de carregamento no
usp_appdata_initial
procedimento, estará reduzindo a quantidade de trabalho que o servidor SQL precisa fazer toda vez que a tela de carregamento for aberta e, portanto, melhorando o consumo de recursos e a contenção nessa servidor.Você pode ou não ver qualquer melhoria de desempenho direta no tempo de execução desse procedimento em relação à pilha de chamadas da tela de carregamento. Mas você provavelmente diminuirá pelo menos parte da carga no servidor geral (o que pode ou não ser significativo).
Quando um procedimento é executado, não ocorrem bloqueios que afetem outras execuções do mesmo procedimento ou mesmo impeçam que você altere o código do próprio procedimento (não importa a frequência com que o procedimento é executado simultaneamente).
Por outro lado, um bloqueio de modificação de esquema é colocado em um procedimento armazenado quando você
ALTER
o código desse procedimento, o que pode momentaneamente fazer com que uma nova execução simultânea desse procedimento aguarde aALTER
conclusão.Portanto, é possível melhorar marginalmente o desempenho de execução de um procedimento que é executado com muita frequência, refatorando o código que é alterado com muita frequência (e não está relacionado a essa pilha de chamadas) em outro procedimento. Mas uma
ALTER
instrução geralmente é executada quase instantaneamente, portanto, mesmo com um procedimento muito utilizado, os ganhos provavelmente seriam imensuráveis.Para obter uma resposta mais específica, precisaríamos ver as duas versões do código e seus planos de execução correlatos, no mínimo.