sql >> Database >  >> RDS >> Sqlserver

Time-out voor SQL Server-query, afhankelijk van Where-clausule

Het probleem dat u ondervindt, is (vrijwel zeker) te wijten aan een queryplan in de cache, dat geschikt is voor sommige versies van parameters die aan de query worden doorgegeven, maar niet voor andere (ook wel Parameter Sniffing genoemd).

Dit komt vaak voor en wordt vaak verergerd door verouderde statistieken en/of slecht gefragmenteerde indexen.

Eerste stap :zorg ervoor dat u al uw indexen opnieuw hebt opgebouwd en dat de statistieken over niet-geïndexeerde kolommen up-to-date zijn. (Zorg er ook voor dat uw klant een regelmatig geplande onderhoudstaak voor de index heeft)

exec sp_msforeachtable "DBCC DBREINDEX('?')"
go

exec sp_msforeachtable "UPDATE STATISTICS ? WITH FULLSCAN, COLUMNS"
go

Dit is de canonieke referentie:traag in de toepassing, snel in SSMS?

Als het probleem nog steeds bestaat na het opnieuw opbouwen van indexen en het bijwerken van statistieken, dan heb je een paar opties:

  1. Gebruik dynamische SQL (maar lees dit eerst:The Curse and Blessings of Dynamic SQL)

  2. Gebruik OPTIMIZE FOR

  3. Gebruik WITH(RECOMPILE)




  1. Kun je een webservice aanroepen vanuit TSQL-code?

  2. Hoe SUBSTRING() werkt in MariaDB

  3. Hoe het schema van een object (tabel, weergave, opgeslagen procedure) in SQL Server-database te wijzigen - SQL Server / TSQL-zelfstudie, deel 28

  4. Kan geen verbinding maken met PostgreSQL met PHP pg_connect()