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

Enhver ulempe ved at bruge ExecuteReaderAsync fra C# AsyncCTP

Jeg er uenig med Ricka i dette. Async DB-kommandoer er ikke kun gode, de er afgørende for at opnå skalering, gennemløb og reaktionstid. Hans indvending om opgraderingstiden for trådpuljen gælder kun for en webserver, der oplever lave trafikmængder.

I en situation med høj trafik (hvilket er den eneste, der betyder noget), behøver trådpuljen ikke at vente på at 'injicere' nye tråde. At udføre SQL-kommandoerne asynkront er vigtigt ikke kun ud fra et synspunkt om webserveranmodninger/trådes sundhed, men også ud fra et synspunkt om den samlede anmodnings levetid/latency:ukorrelerede DB-kald kan udføres parallelt i modsætning til sekventielt. Dette alene resulterer normalt i dramatiske forbedringer i HTTP-anmodningens latens, som brugeren oplever. Med andre ord indlæses dine sider hurtigere.

Et råd dog:SQL Command er ikke virkelig asynkron, før du aktiverer Asynchronous Processing=true på forbindelsesstrengen. Selvom dette ikke er indstillet (og som standard ikke er det, Rediger:starter med .NET Framework <4.5. Asynchronous Processing er ikke længere påkrævet ) dine 'asyncronous' opkald til BeginExecuteReader er intet andet end et humbug, vil opkaldet starte en tråd og blokere det tråd. Når ægte async-behandling er aktiveret i forbindelsesstrengen så er opkaldet virkelig asynkront, og tilbagekaldet er baseret på IO-afslutning.

En advarsel:en asynkron SQL-kommando fuldføres, så snart den første resultatet returnerer til klienten, og infomeddelelser tæller som resultat.

create procedure usp_DetailsTagsGetAllFromApprovedPropsWithCount
as
begin
print 'Hello';
select complex query;
end

Du har mistet alle fordelene ved async. print opretter et resultat, der sendes tilbage til klienten, som fuldfører async-kommandoen og udførelsen på klienten genoptages og fortsætter med 'reader.Read()'. Nu det vil blokere, indtil den komplekse forespørgsel begynder at producere resultater. Du spørger 'hvem sætter print i proceduren?' men print kan være forklædt i noget andet, måske noget så uskyldigt udseende som en INSERT der udføres uden udsender først en SET NOCOUNT ON .



  1. Hvad er formålet med at sætte et 'N' foran funktionsparametre i TSQL?

  2. SQL Server 2008 Generer en række datotider

  3. MySQLI Connect-fejl viser adgangskode

  4. hvordan man bruger `charset` og `encoding` i `create_engine` af SQLAlchemy (for at skabe pandas dataramme)?