sql >> Database teknologi >  >> RDS >> Oracle

Om ydeevnen vil påvirke, når databaseproceduren kaldes fra applikationen mange gange?

Dit råd er korrekt, det ville være bedre at udføre alle databaseopgaver på én gang. Der er 2 store præstationspåvirkninger i dit scenarie

  1. Kontekstskiftet af pro*c mellem SQL-motoren og PL/SQL-motoren for at køre dine tråde flere gange. Normalt det største problem i mange PL/SQL-opkald fra en klientapplikation.
  2. Netværksstackoverhead (TNS) i kommunikationen mellem din pro*c-app og databasemotoren - især hvis din app er på en anden fysisk vært.

Når det er sagt, opretter du en forbindelsespulje i applikationsenden. TNS-lytteren skal også have en pulje af testamenterede serverskyggeprocesser, der venter på hver netværksforbindelse (dette er opsat på listener.ora).

OCI login/logoff, når skyggeprocessen allerede venter på forbindelse, er meget hurtig og ikke en kæmpe faktor i latens - jeg bekymrer mig ikke om dette, medmindre en ny skyggeproces på serveren skal starte op - så kan det være en meget dyrt opkald. Da du bruger forbindelsespooling på klientsiden, er dette normalt ikke et problem, men blot noget at overveje på grund af trådningen i dine opkald. Når du har brugt puljen af ​​serverskyggeprocesser, vil du bemærke en enorm forringelse, hvis TNS-lytteren skal starte mere serverskyggeproces op.

Rediger som svar på de nye spørgsmål:

  1. Det hænger meget sammen. Som påpeget tidligere, bør du minimere mængden af ​​plsql- og sql-kald i din C++-app. Hvert PLSQL-kald i dit C++-appkald kalder SQL-motoren, som derefter kalder PLSQL-motoren til procedurekaldet. Så hvis du deler din procedure op i 2 - fordobler du SQL til PLSQL kontekstswitch, som er den dyrere switch som skitseret af Tom Kyte artiklen og min egen personlige erfaring.

  2. Besvares i 1. Men som jeg tidligere sagde, er kommunikationsomkostningerne nummer to, medmindre dine værter er på forskellige fysiske netværk og de typer data, du overfører. For eksempel vil store C++-objektparametre og store Oracle-resultatsæt med mange opkald naturligvis påvirke kommunikationsforsinkelsen med rundrejser. Husk, at med flere PLSQL-kald tilføjer du også mere SQLNET-trafik til opsætningen for hver forbindelse og hvert resultatsæt.

  3. der er ikke noget 3. spørgsmål

  4. PLSQL til SQL i PLSQL-motoren er ubetydelig, så hæng dig ikke op i det. Læg alle dine SQL-kald inden for 1 PLSQL-kald for maksimal ydeevnegennemstrømning. Del ikke opkaldene op bare for at være mere veltalende med hensyn til den dyre ydeevne.




  1. Oracle SQL escape-tegn (for et '&')

  2. SQL Server Tekst Datatype Maks. længde =65.535?

  3. MySQL:Fejlkode:1242 Underforespørgsel returnerer mere end 1 række

  4. postgresql udenlandsk nøgle syntaks