sql >> Database teknologi >  >> RDS >> Sqlserver

ADO.NET kalder T-SQL Stored Procedure forårsager en SqlTimeoutException

Da jeg fandt ud af, at det er ADO.NET-forbindelsen, der er årsagen til problemet, førte denne tråd mig til svaret.

Grundlæggende har forbindelser gennem SQL Server Management Studio (SSMS) som standard SET ARITHABORT ON . ADO.NET-forbindelser gør det ikke.

Indstilling af ARITHABORT OFF og at udføre forespørgslen direkte gennem SSMS giver mig den samme langsomme responstid.

Den største forskel, når du kører med eller uden denne indstilling, er, at der oprettes en anden forespørgselsplan for de to opkald. Når ARITHABORT var OFF , ville SSMS-kommandoen bruge den prækompilerede cachelagrede forespørgselsplan, som ADO.NET-forbindelsen brugte, og derfor timeout.

Ved at køre følgende kommandoer som administrator på databasen kører alle forespørgsler som forventet uanset ARITHABORT indstilling.

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Jeg kan kun antage, at en kompileret forespørgselsplan er blevet korrupt eller ugyldig.

Jeg vil gå med dette som løsningen (jeg har opstemt svaret) på den anden tråd

Tak.



  1. Sådan laver du en inventardatabase om adgang

  2. Refaktorer en PL/pgSQL-funktion for at returnere output fra forskellige SELECT-forespørgsler

  3. Postgres FOR LOOP

  4. Sådan kører du PHP 5-applikationer med MySQL 8.0 på CentOS 7