Mudanças entre as edições de "Solução de Problemas do SQL Server"
(Criou página com ': https://stackoverflow.com/questions/801909/why-is-some-sql-query-much-slower-when-used-with-sqlcommand : https://docs.microsoft.com/pt-br/sql/t-sql/statements/set-arithabort...') |
(→Ver Também) |
||
(4 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
− | : https://stackoverflow.com/questions/801909/why-is-some-sql-query-much-slower-when-used-with-sqlcommand | + | Esse artigo fornece algumas dicas para lidar com problemas do SQL Server, que podem afetar a utilização do LATROMI. |
− | + | ||
+ | == Query mais rápida no SSMS do que no LATROMI == | ||
+ | Vários fatores podem influenciar no tempo que uma consulta leva pra ser executada no banco de dados. Dentre esses fatores estão a falta (ou má utilização) de índices, a quantidade de registros, ou até mesmo a complexidade da QUERY. Mas se a QUERY leva menos tempo para executar no SSMS (Sql Server Management Studio) do que no LATROMI, o problema pode estar nas opções que são configuradas por padrão no SSMS e que não foram configuradas na aplicação. Geralmente, a opção que faz a diferença nesse caso é '''[https://docs.microsoft.com/pt-br/sql/t-sql/statements/set-arithabort-transact-sql?view=sql-server-2017 ARITHABORT]'''. | ||
+ | |||
+ | Habilite essa opção antes da chamada da QUERY ou STORED PROCEDURE: | ||
+ | <source lang="sql"> | ||
+ | SET ARITHABORT = ON | ||
+ | </source> | ||
+ | |||
+ | ''OBS.: Use a ferramenta [https://docs.microsoft.com/sql/tools/sql-server-profiler/sql-server-profiler?view=sql-server-2017 SQL Server Profiler] para verificar as opções configuradas para cada aplicação.'' | ||
+ | |||
+ | === Exemplos === | ||
+ | |||
+ | ==== SELECT ==== | ||
+ | <source lang="sql"> | ||
+ | SET ARITHABORT = ON | ||
+ | |||
+ | SELECT | ||
+ | Orders.OrderID, | ||
+ | SUM((UnitPrice * Quantity) - Discount) AS UnitPriceTotal | ||
+ | FROM [Order Details] | ||
+ | INNER JOIN Orders ON Orders.OrderID = [Order Details].OrderID | ||
+ | WHERE OrderDate BETWEEN '2017-01-01' AND '2017-12-31' | ||
+ | GROUP BY Orders.OrderID | ||
+ | </source> | ||
+ | |||
+ | ==== STORED PROCEDURE ==== | ||
+ | <source lang="sql"> | ||
+ | SET ARITHABORT = ON | ||
+ | |||
+ | EXEC SP_GET_ORDERS_SUMMARY '2017-01-01', '2017-12-31' | ||
+ | </source> | ||
+ | |||
+ | == Ver Também == | ||
+ | * [https://stackoverflow.com/questions/801909/why-is-some-sql-query-much-slower-when-used-with-sqlcommand Why is some sql query much slower when used with SqlCommand?] | ||
+ | * [https://docs.microsoft.com/pt-br/sql/t-sql/statements/set-arithabort-transact-sql?view=sql-server-2017 SET ARITHABORT (Transact-SQL)] | ||
+ | * [https://docs.microsoft.com/sql/tools/sql-server-profiler/sql-server-profiler?view=sql-server-2017 SQL Server Profiler] |
Edição atual tal como às 15h23min de 18 de julho de 2018
Esse artigo fornece algumas dicas para lidar com problemas do SQL Server, que podem afetar a utilização do LATROMI.
Índice
Query mais rápida no SSMS do que no LATROMI
Vários fatores podem influenciar no tempo que uma consulta leva pra ser executada no banco de dados. Dentre esses fatores estão a falta (ou má utilização) de índices, a quantidade de registros, ou até mesmo a complexidade da QUERY. Mas se a QUERY leva menos tempo para executar no SSMS (Sql Server Management Studio) do que no LATROMI, o problema pode estar nas opções que são configuradas por padrão no SSMS e que não foram configuradas na aplicação. Geralmente, a opção que faz a diferença nesse caso é ARITHABORT.
Habilite essa opção antes da chamada da QUERY ou STORED PROCEDURE:
SET ARITHABORT = ON
OBS.: Use a ferramenta SQL Server Profiler para verificar as opções configuradas para cada aplicação.
Exemplos
SELECT
SET ARITHABORT = ON SELECT Orders.OrderID, SUM((UnitPrice * Quantity) - Discount) AS UnitPriceTotal FROM [Order Details] INNER JOIN Orders ON Orders.OrderID = [Order Details].OrderID WHERE OrderDate BETWEEN '2017-01-01' AND '2017-12-31' GROUP BY Orders.OrderID
STORED PROCEDURE
SET ARITHABORT = ON EXEC SP_GET_ORDERS_SUMMARY '2017-01-01', '2017-12-31'