Pierakstīties, izmantojot Microsoft
Pierakstieties vai izveidojiet kontu.
Sveicināti!
Atlasiet citu kontu.
Jums ir vairāki konti
Izvēlieties kontu, ar kuru vēlaties pierakstīties.

Kopsavilkums

Šajā rakstā aprakstīts, kā novērst daudz vienlaicīgi ekspromta vaicājumus Microsoft SQL Server lēna veiktspēja. Ja nav noteikuši precīzu problēmas cēlonis, skatiet šajā Microsoft zināšanu bāzes rakstā pirms turpināt:

Kā novērst lietojumprogrammu veiktspēju, Microsoft SQL Server 224587


Šajā rakstā tiek pieņemts, jūs izmantojāt KB 224587 sašaurināt problēmu apjomu un ka esat reģistrējis Windows NT veiktspējas pārraugu žurnālu un SQL Profiler izsekot kas detalizēti parāda noteiktu skaitītāji, notikumiem un datu kolonnas.

Veiktspējas problēmas apraksts

Veiktspējas problēma ir šādas pazīmes:

  • Īss ekspromta vaicājumus, kas parasti ir ļoti īslaicīga izraisa lēnu sistēmas veiktspēju kopumā, palaižot lielu skaitu vienlaicīgu lietotāju vaicājumus.

  • Ļoti augstu vai 100 procentus centrālā Procesora lietojums.

  • Nav saistīts bloķē periodos lēnu veiktspēju.

    Var ātri atrast bloķēšanas pārbaudot BLK kolonnas izvades sp_who saglabāti sistēmas procedūras. BLK kolonna nav nulle vairākas sistēmas procesa ID (SPID), ja tur tiek bloķēta.

  • Dažos gadījumos servera atmiņas uzsvēra un varat saņemt kļūdas, kas ir līdzīgi šādas kļūdas:

    Kļūda: 701 nozīmīguma: 17, valsts: 1
    Nav pietiekami daudz sistēmas atmiņas, lai palaistu šo vaicājumu.

    - vai -

    Msg 8645 līmeni 17 valsts 1. darbību, rindiņa 1
    Radās gaida atmiņas resursus, lai izpildītu vaicājumu taimauts. Atkārtoti palaidiet vaicājumu.

Vaicājumu kompilācijas uzlabojumi

Uzlabojumi startēt SQL Server 7.0, īpaši vaicājuma optimizatora sistēmas arhitektūras dēļ iespējams, pamanīsit, ka sistēmas resursu lietojuma starpība lietojumprogrammām, salīdzinot ar SQL Server versijās. Īpaši atmiņas vai centrālā Procesora lietojums SQL Server 7.0 var parādīt pieaugumu, bet SQL Server versijās parasti diska IEVADIZVADES saistībām. Šīs izmaiņas var izsekot divi faktori:

  • Hash un sapludināšana savienojumi

  • Vaicājumu kompilēšanas laiku

SQL Server versijās pilnībā izmantot ligzdota cikla atkārtojumi veikt savienojumus. Ligzdota cikla savienojumi raksturīgi izmantot diska IEVADIZVADES. Sākot ar SQL Server 7.0, tika ieviesti hash un sapludināšana savienojumus. Hash un sapludināšana pievienojas to daudz atmiņas apstrādes nekā ligzdotu cilpas savienojumus. To loģisko rezultāts ir, Procesora un atmiņas lietojums ir lielāks, lietojot šīs metodes savienojums. Plašāku informāciju par hash un sapludināšana savienojumi skatiet SQL Server 7.0 tiešsaistes grāmatas "Izpratne Hash savienojumi" un "Izpratne sapludināšanas savienojumi" tēmas.

Vaicājumu kompilēšanas laiku tiek ietekmēta, jo vaicājumu optimizatora papildu opcijas un informācija par SQL Server, tostarp jaunas hash un sapludināšana savienojuma metodes, uzlabotu meklēšanas algoritmu un kolonna statistikai vecākās versijās. Šī papildinformācija ļauj vaicājumu optimizatora izvēlēties visefektīvāko metodi vaicājumu datu izgūšanai. Pieprasa, lai šīs jaunās metodes un informācijas analīzes un apstrādes laiks. Palielinot šo centrālā Procesora lietojums var radīt vaicājumu kompilēšanas laiku, kas garāki par SQL Server versijās.

Vairumā meklējumu kompilēšanas laiku pieaugumu korespondējošais samazinājums izpildes laiks. Kopējā ietekme ir vaicājums darbotos ātrāk nekā SQL Server versijās. Vienīgais izņēmums, tomēr notiek ļoti mazs, vienkāršs, OLTP tipa vaicājumi, kas ir ļoti zems izpildes laikā. Šie pieprasījumi vaicājumu plānu veidošanas procesu var būt vienāds vai lielāks par vaicājuma izpilde izdevumu. Rezultātā var veikt vaicājumu lēnāk nekā SQL Server versijās. Milisekundēs parasti ir atšķirība, jo šie efekti ir ievērojis konkrētu vaicājumu, ja tas tiek izpildīts atsevišķi. Tomēr jūs varat pamanīt, ka kopējo sistēmas centrālā Procesora lietojums ir lielāks nekā SQL Server versijās, ja liels skaits ekspromta vaicājumus vienlaicīgi izpilda liels lietotāju skaits.

Izveidot parametru vaicājumi

SQL Server 7.0 izmanto vairākas jaunas metodes, piemēram, kešdarbe ekspromta vaicājumi un automātisko parametrizācija. Tomēr vaicājumus, kas automātiski parameterizes SQL Server 7.0 ir ierobežota. Pārliecinieties, vai ir parametru vaicājumu plānu un var tikt atkārtoti efektīvāk, izmantojiet šādas metodes:

  • Parametru atzīmes OLE DB un ODBC API ļauj parametrus, kas norādīts ar jautājuma zīmi, lietotājiem iesniedzot vaicājumus. Tas var būt ļoti noderīgs pieteikumam, īpaši vidējā līmeņa programmas, kas ir vaicājuma izveides moduļu kur saglabātās procedūras nav pieejama. Vaicājumu plāns tiek ģenerēta vaicājumus, kas ir parametru atzīmes var atkārtoti, visas klientiem, kas izpilda vienu un to pašu vaicājumu, pat tad, ja dažādu parametru vērtības ir norādītas. Lai iegūtu papildinformāciju, skatiet tēmu "Parametru atzīmes" SQL Server 7.0 tiešsaistes grāmatas.

  • sp_executesql Sp_executesql saglabāta procedūra tiek saukta OLE DB nodrošinātājs ODBC draiveris vai lietojot parametru atzīmes programmā. Tomēr tas var būt jeb tieši programmu vai citu iekļautā procedūra, lai skaidri parameterize ekspromta vaicājumus. Tas var būt ļoti noderīgs programmas vai pakešfailus priekšrakstu izpildes izmantotais izpildīt dinamisko SQL priekšrakstus. Atšķirībā no sp_executesql, priekšrakstu izpildes neļauj parametrizācija. Tas ierobežo iespēju vaicājumu plāns atkārtoti. Lai iegūtu papildinformāciju, skatiet SQL Server 7.0 tiešsaistes grāmatas tēmu "Izmantojot sp_executesql" un "sp_executesql (T-SQL)".

  • Iekļautās procedūras Manas darbības ir daudzas priekšrocības, tostarp iespēja parameterize vaicājumi un atkārtoti izpildes plānu. Lai iegūtu papildinformāciju, skatiet SQL Server 7.0 tiešsaistes grāmatas "Saglabātas procedūras" un "Programmēšanas saglabātas procedūras" tēmas.

Skatīt datus veiktspējas pārraugs

Izmantojiet veiktspējas pārraugu žurnāla noteikt, kura sistēmas resursu rada sastrēgums. Veiktspējas pārraugu žurnālā var jums vispārīgu priekšstatu sistēmas un palīdzēt koncentrēt savu uzmanību SQL Profiler datus skatāt. Pārskatiet veiktspējas pārraugu datus no brīža, kad veiktspējas tika samazināta veiktspēja vēlamo laiku pa labi. Nosaka skaitītājs, kas ietekmēja vispirms, un pēc tam noteikt, kura no šīm problēmām ir visprecīzāk atbilst jūsu situācijai:

  • Objekts: Process
    Skaitītājs: procesors
    Gadījums: SQL Server

  • Objekts: procesors
    Skaitītājs: % procesora laiku
    Gadījums: Katram gadījumam procesora izvēles

  • Objekts: SQL Server: bufera pārvaldnieks
    Skaitītājs: Bezmaksas buferi

  • Objekts: SQL Server: bufera pārvaldnieks
    Skaitītājs: Lappušu skaita nozagts

  • Objekts: SQL Server: atmiņas pārvaldnieks
    Skaitītājs: Atmiņas dotācijas līdz

  • Objekts: SQL Server: SQL statistiku
    Skaitītājs: SQL kompilāciju/sec

Ja ir liels centrālā Procesora lietojums SQL kompilāciju/sec un bezmaksas buferi skaitītāji un trūkst atmiņas dotācijas plānota un nozagts lappušu skaita skaitītāji, tas norāda, ka CPU ir sastrēgums. Par to, kā efektīvi parameterize un atkārtoti izmantot vaicājumu plānus, lai izvairītos no vaicājuma plāna darbību izmaksas koncentrēt un skatiet šī raksta sadaļu "Grupas SQL Profiler izsekošanas notikumu klase". Ja trūkst bezmaksas buferi un SQL kompilāciju/sec skaitītāji un nozagts lapu skaits un atmiņas dotācijas gaida skaitītāji ir augstas, SQL Server ir atmiņas ierobežojums. Pievērsties atrast vaicājumus, kur hash savienojumi izmanto un var mainīt cilpas savienojumus un skatiet šī raksta sadaļu "Grupēt SQL Profiler trasēšanas ilgums". Lai iegūtu papildinformāciju par šiem skaitītāji meklēt SQL Server 7.0 tiešsaistes grāmatas izmantot skaitītājs nosaukumu.

Skatiet SQL Profiler dati

Nosakot veiktspējas problēmas, ir ļoti vērtīgs, lai skatītu SQL Profiler datus. Jums nav pārskatīt visus datus, kas tiek uztverti; ir selektīvā. SQL Profiler ļauj efektīvi skatīt uzņemtie datus. Cilnē Rekvizīti (cilnē
Izvēlnē Fails noklikšķiniet uz Rekvizīti), SQL Profiler ļauj ierobežot datus, kas tiek parādīts, noņemot datu kolonnas vai notikumi, grupas vai datu kolonnas kārtošana un lietoti filtri. Jūs varat meklēt visu izsekošanas vai tikai specifisku kolonnu noteiktas vērtības (uz
Izvēlnē Rediģēt noklikšķiniet uz atrast ). SQL Profiler datus var saglabāt arī SQL Server tabulas (izvēlnē Fails norādiet uz Saglabāt kāun pēc tam noklikšķiniet uz Izsekot tabulu), un pēc tam palaidiet SQL vaicājumus pret to.

Piezīme. Pārliecinieties, vai tikai filtrēšanas trasēšanas saglabāto failu. Ja šo darbību veikšanas aktīvā trase, jūs riskējat zaudēt datus, kas kopš trasēšanas startēšanas laikā. Saglabāt aktīvo trasēšanas failā vai tabulas pirmo reizi (uz
Izvēlnē Fails noklikšķiniet uz Saglabāt kā ), un pēc tam vēlreiz atveriet failu (izvēlnē Fails noklikšķiniet uz Atvērt) pirms procedūras turpināšanas. Strādājot ar izsekošanas saglabāto failu filtrēšana nav neatgriezeniski noņemt datus; dati ir tikai paslēpti, netiek izdzēsti. Var pievienot un noņemt notikumi un datu kolonnas, kas palīdz sašaurināt meklēšanu.

Vajadzētu pievērsties arī tiek saņemts vislielāko labumu uzlabojumu. Šādi faktori var palīdzēt uzlabot programmu veiktspēja, bet ne vienādi. Pirms ieviešat jebkādas izmaiņas, noteikt, cik noderīgs izmaiņas var atkarībā no šādi faktori:

  • Cik bieži tiek palaists vaicājums

  • Cik daudz uzlabojumu vaicājumu var uzlabot

Piemēram, vienu vaicājumu izpildes laikā samazināšanai 1,5 sekundes 1.2 sekundes var nebūt noderīgi, ja netiek izpildīts vaicājums bieži visu dienu. Tomēr, ja vaicājumā visbiežāk izpilda lielu skaitu vienlaicīgu lietotāju, veiktspējas uzlabojumus var būt ļoti noderīgs. Turpretī uzlabot 6 minūtēm vienā vaicājumu 3 sekundes nedrīkst iegūt ievērojama palielināšanās vispārējo darbību, ja tiek izmantota reti. Grupēšana un filtrēšana metodes SQL Profiler un savas zināšanas par programmu izmantot, lai novērtētu sekas konkrētā vaicājuma vai procedūras, pirms ieviešat izmaiņas. Vispirms pievērsties visefektīvāko izmaiņas un turpiniet atkārtojumi citi vaicājumi un procedūras līdz tiek parādīts, ja pietiekami uzlabojusies veiktspējas līmeni.

Pēc SQL Profiler trasēšanas saglabāt failu vai tabulas, atveriet trasēšanas SQL Profiler un pārskatīt saturu. Grupēt trasēšanas SQL Profiler, rīkojieties šādi:

  • Grupēt SQL Profiler trasēšanas ilgums:

    1. Izvēlnē Fails noklikšķiniet uz
      Rekvizītus.

    2. Noklikšķiniet uz cilnes Datu kolonnas un grupas, noklikšķiniet uz augšu pārvietot
      Ilgumu. Noklikšķiniet uz leju , lai noņemtu visas citas kolonnas.

    3. Noklikšķiniet uz cilnes notikumus , un pēc tam noņemiet visus notikumus, izņemot TSQL SQL:StmtCompleted un TSQL RPC: pabeigt. Tas ļauj pievērsties tikai vaicājumus, kas tiek izpildītas.

    4. Noklikšķiniet uz Labi.

    Grupēšana pēc ilgums ļauj viegli noskaidrot SQL priekšrakstu, partijas un procedūras, kas darbojas lēnāko. Pārskatiet izsekošana, rodas problēmas un izveidotu bāzlīniju labu veiktspēju. Var filtrēt pēc sākuma trasēšanas sadalīt sadaļās, veiktspēja ir labs un atsevišķas sadaļas, ir vāja veiktspēja. Atrodiet vaicājumu garākais termiņš, veiktspēja ir labs. Šīs visdrīzāk ir problēmas cēlonis. Sistēmas veiktspēju kopumā samazinās, pat labi vaicājumi var parādīt ilgu laiku, jo tie gaida sistēmas resursu.

    Pārskatiet izpildes plāni vaicājumus, lielākā daļa bieži ir ilgu laiku. Ja redzat jaukšanas savienojums tiek lietots, apsveriet CILPA SAVIENOJUMA vaicājuma atgādinājumu spēkā ligzdota cikla savienojuma vaicājuma. Vaicājumu, izmantojot cilpa pievienoties izpildes laiks ir mazāk nekā, vai pat nedaudz lielāka hash pievienoties izpildes laiku, ja cikls savienojums var būt labāks risinājums, ja dators ir liels atmiņas un centrālā Procesora lietojums. Samazinot uzsvaru uz resursu sastrēgums (centrālā Procesora un atmiņas), var uzlabot kopējo sistēmas veiktspēju. Plašāku informāciju par vaicājumu atgādinājumu CILPA pievienoties skatiet SQL Server 7.0 tiešsaistes grāmatas tēmu "(T-SQL) ATLASIET".

  • Grupēt SQL Profiler izsekošanas notikumu klase:

    1. Izvēlnē Fails noklikšķiniet uz
      Rekvizītus.

    2. Noklikšķiniet uz Datu kolonnas cilnes un pēc tam sadaļā grupu , līdz pārvietot
      Notikumu klase un Notikumu klase virs teksta . Noklikšķiniet uz leju noņemt visas citas kolonnas sadaļā grupu .

    3. Noklikšķiniet uz cilnes notikumi un pārliecinieties, vai ir iekļauti visi notikumi.

    4. Noklikšķiniet uz Labi.

Notikumu veidi

Lai redzētu, kāda veida notikumi notiek datorā, kurā darbojas SQL serveris, un cik bieži notikumi, grupas Notikumu klase kolonnas. Meklēt šajā kolonnā šādi notikumi:

  • MISC: sagatavot SQL Exec sagatavota SQL; KURSORU: Cursorprepare Sagatavotu SQL notikumu norāda, ka SQL priekšraksts tika sagatavota izmantošanai ar noklusējuma rezultātu kopa (klienta puses kursoru) SQLPrepare/SQLExecute (ODBC) sistēmas vai ICommandText::Prepare/ICommandText::Execute (tikai OLE DB) noklusējuma kursoru iespējas: uz priekšu tikai lasīt tikai rindkopu lielums = 1. Cursorprepare notikumu norāda, tika sagatavota servera puses kursoru uz SQL priekšraksta ICommandText::Prepare/ICommandText::Execute (tikai OLE DB) vai SQLPrepare/SQLExecute (ODBC) tikai viens no iepriekšējās kursoru opcijas iestatiet nav noklusējuma vērtību. Exec sagatavota SQL notikumu norāda kādu no iepriekšējā veida esošā sagatavoti pārskati tika izpildīta. Ja šie notikumi bieži gadījumi, programmu izmanto sagatavot/izpildes modelis atverot rezultātu kopu. Šādā gadījumā jānosaka, vai lietojat modelis sagatavot/izpildīt pareizi.

    Ideālā gadījumā programmu sagatavo SQL priekšraksta vienreiz un tā izpilda daudzas reizes tāpēc, ka optimizators sastādīt jaunu plānu ikreiz, kad tiek izpildīta paziņojumu. Katru reizi, kad palaižat sagatavots paziņojums, saglabājot vaicājumu apkopošanas izmaksas. Ja vēlaties izpildīt vaicājumu vienreiz, Microsoft iesaka nav sagatavotu to. Sagatavošana un pēc tam izpildīt SQL priekšraksts prasa trīs tīkla roundtrips: vienu sagatavot paziņojumu, kādu izpildīt paziņojumu un viena unprepare paziņojumu. Servera puses kursoru sagatavošana ir nepieciešama vismaz piecas lidojumi turp un atpakaļ: vienu sagatavot kursoru, lai izpildītu vai atvērt, aizvērt vienu vai vairākus no tā, pēc viena, un, lai to unprepare. Izpildot vaicājumu nepieciešams tikai viens roundtrip.

    Lai uzzinātu, kā efektīvi sagatavot/izpildes modelis izmanto programmu, salīdziniet reižu šie divi notikumi (sagatavot un izpildīt) rodas. Exec sagatavota SQL notikumu skaits būtu lielāks par visu Sagatavotu SQL un CursorPrepare notikumu (vismaz trīs līdz piecas reizes lielāks ir labs novērtējums). Tas norāda, sagatavoti pārskati ir tiek atkārtoti pietiekami bieži, lai novērstu lielāku papildu atbalsts, lai tās izveidotu. Ja SQL sagatavotu un CursorPrepare notikumu skaits ir aptuveni Sagatavots SQL Exec notikumu skaitu, tas var norādīt, ka lietojumprogrammas neizmanto efektīvi sagatavot/izpildes modelis. Mēģināt sagatavot paziņojumu vienreiz un atkārtoti to pēc iespējas. Varat arī mainīt programmu sagatavot paziņojumus vienu reizi un atkārtoti izmantot šo priekšrakstu.

    Lietojumprogrammas īpaši jāraksta pielietošanu sagatavot/izpildes modelis. Turi līdz sagatavots paziņojums darbības kontrolē, cik ilgi ir jāuztur HSTMT ODBC vai OLE DB ICommandText objektu. Viena raksturīgi ir iegūt HSTMT, sagatavojiet SQL priekšraksta izpildes sagatavots paziņojums un tad bezmaksas HSTMT, tādējādi zaudē tura sagatavotu plānu. Ja tas ir izdarīts, nesaņem nekādu labumu no sagatavot/izpildes modelis. Turklāt var tikt parādīts veiktspēja degradācija dēļ papildu izmaksas tīkla roundtrips. Lietojumprogrammu ir jābūt HSTMT vai sagatavots paziņojums turi objekta kešatmiņu un tiem var piekļūt atkārtotai metode. Draiveri vai nodrošinātājs nevar izdarīt automātiski. lietojumprogramma ir atbildīga ieviešana, uzturēšana un izmantot šo informāciju. Ja lietojumprogramma nevarat to izdarīt, ieteicams izmantot parametru marķieri sagatavot/izpildes metodes.

  • Izmantojot parametru atzīmes Lietojumprogrammas var izmantot parametru marķieri optimizēt pats Transact-SQL paziņojums vairākas reizes ar citu ievades un izvades vērtības izmantošanu. Pirmo reizi tiek izpildīts vaicājums, tā ir paredzēta kā parametru vaicājumu un SQL Server izveido un kešatmiņas parametru vaicājumu plānu. Turpmākajiem zvaniem pašā vaicājumam vai nu pašā vai citā parametrus, izmantojot SQL Server nav izveidot jaunu vaicājumu plāns; SQL Server var atkārtoti izmantot esošo vaicājumu plāns, aizstājot pašreizējos parametrus.

    Ja lietojumprogramma izmanto parametru marķieri izsaukumus (ODBC) par SQLExecDirect vai ICommandText::Execute (tikai OLE DB), draiveris vai nodrošinātājs automātiski paketes SQL priekšrakstu un izpilda kā sp_executesql zvans. Paziņojumā nav sagatavo un izpilda atsevišķi. Saņemot aicinājumu sp_executesql, SQL Server to automātiski pārbauda procedūras kešatmiņas atbilstošu plānu un atkārtoti izmanto šo plānu vai izveido jaunu plānu.

    Lai noteiktu, ja programmu pašlaik izmanto parametru marķieri, var meklēt
    Teksta kolonnas SQL Profiler trasēšanas informāciju "sp_executesql". Tomēr sp_executesql var izsaukt tieši, jo ne visos gadījumos norāda parametru marķieri izmantošanu.

    Lai iegūtu papildinformāciju par sagatavot/izpildes modelis, skatiet tēmu "Izpildes plānu kešdarbe un atkārtoti" SQL Server 7.0 tiešsaistes grāmatās. Plašāku informāciju par parametru marķieri skatiet SQL Server 7.0 tiešsaistes grāmatas tēmu "Parametru atzīmes".

  • SP: pabeigta Dinamiskais SQL priekšrakstus ar komandu izpildes parādās kā SP: pabeigta notikumu ar tekstu "Dinamisko SQL." Izvērsiet SP: pabeigta notikumu un pēc tam meklējiet visus gadījumus, kas ir "Dinamisko SQL" kā teksts. Ja ir vairāk par šiem notikumiem, var uzlabot programmu, izmantojot sp_executesql priekšrakstu izpildes vietā. Sp_executesql saglabāta procedūra ļauj SQL Server atkārtoti izpildes plāns, ja tiek izpildīts vienu un to pašu vaicājumu vēlreiz, izmantojot citu parametru. Izmantojot priekšrakstu izpildes plāns nav parametru un netiks izmantots, ja vaicājumā tiek izpildīta vēlreiz, izmantojot to pašu parametriem.

    Noteikt vaicājumus vai darbības, kas veiktas ar izpildes paziņojumu dinamisku SQL notikumi, katrā gadījumā ņemiet vērā savienojuma ID un sāktu laikā. Atgrupēt izsekošana (noņemt Notikumu klase un teksta grupas nosaukumu). Pēc atgrupēt izsekošana, tas ir sakārtots hronoloģiskā secībā. Filtru trasēšanas savienojuma ID (cilnē filtri ) un pēc tam noņemiet notikumu klases, izņemot SP: sākuma un SP: visu notikumi lielāka lasīšanai. Pēc tam varat meklēt notikuma sākuma laiku (izvēlnē Rediģēt noklikšķiniet uz
    Atrast). Rezultātos tiek iekļauti uzsākot dinamisko SQL notikumu. Notikuma rašanās saglabātā procedūra, ja notikums tiek parādīts starp SP: sākuma un SP: pabeigta notikumi šai procedūrai. Notikumu vai nav novērojama saglabātā procedūra, ja tas tika izpildīts kā ad-hoc vaicājumu, un jūs varat izmantot citu datu kolonnas (Lietojumprogrammas nosaukums, NT lietotājvārduun citi), lai noteiktu, kur tika izpildīta komanda. Noteiktu tekstu komandu un kad tā tika veikta saistībā, varat arī pievienot notikumu klases SQL:BatchCompleted un SQL:RPCCompleted.

    Pēc tam, kad esat noteicis, kur tiek izmantota izpildes paziņojumu, jāņem vērā aizstājot ar aicinājumu sp_executesql. Piemēram, iedomājieties šādu situāciju izpildīt komandu izmantotais ar dinamisko SQL. Procedūra aizņem tabulas nosaukums, ID un idValue kā ievades parametri, un pēc tam ATLASIET paziņojumu izpilda tabulas ID vērtība atkarībā no. Izmantojot priekšrakstu izpildes, procedūra līdzinās šādu kodu:

    drop proc dynamicUsingEXECUTE
    go create proc dynamicUsingEXECUTE @table sysname, @idName varchar(10),
    @idValue varchar(10) as declare @query nvarchar(4000) -- Build query string
    with parameter. -- Notice the use of escape quotes. select @query = 'select *
    from ' + @table + ' where ' + @idName + ' = ''' + @idValue + '''' exec (@query)
    go

    Pieņemot, ka vaicājuma ir nevar automātiski parametru, ja, izpildot šo procedūru pret tabulas virsraksti parauga datu bāzē krodziņiem divreiz ar parametru @idValue atšķirīgus lielumus, ir jāizveido SQL Server atsevišķu vaicājumu plāns katrai izpildi. Piemērs:

    exec dynamicUsingEXECUTE
    'titles', 'title_id', 'MC2222' go exec dynamicUsingEXECUTE 'titles',
    'title_id', 'BU7832'

    Piezīme. Šajā piemērā ir tik vienkārši, SQL Server var automātiski parameterize to un faktiski atkārtoti izpildes plāns vaicājumu. Tomēr, ja tas ir sarežģīta vaicājumu, kas SQL Server nav iespējams automātiski parameterize, SQL Server var atkārtoti otrajā izpildes plāns mainot parametru @idValue . Šī vienkāršā vaicājumu ierobežo piemērs sarežģītības.

    Šo procedūru, lai izmantotu sp_executesql nevis priekšrakstu izpildes var pārrakstīt. Aizstāšanas parametru atbalsts ļauj sp_executesql efektivitāti, jo tas rada izpildes plāni, kas ir lielāka iespēja atkārtoti izmantot SQL Server. Piemērs:

    drop proc dynamicUsingSP_EXECUTESQL go create proc
    dynamicUsingSP_EXECUTESQL @table sysname, @idName varchar(10), @idValue
    varchar(10) as declare @query nvarchar(4000) -- Build query string with
    parameter select @query = 'select * from ' + @table + ' where ' + @idName + ' =
    @idValue' -- Now execute with parameter exec sp_executesql @query, N'@idValue
    varchar(10)', @idValue go exec dynamicUsingSP_EXECUTESQL 'titles', 'title_id',
    'MC2222' go exec dynamicUsingSP_EXECUTESQL 'titles', 'title_id',
    'BU7832'

    Šajā piemērā pirmo reizi tiek izpildīts sp_executesql paziņojumu, SQL Server izveido parametru plānu SELECT priekšrakstu no virsraksti ar title_id kā parametrs. Otrais izpildes SQL Server atkārtoti izmanto plāns ar jaunu parametru vērtību. Lai iegūtu papildinformāciju par sp_executesql, skatiet SQL Server 7.0 tiešsaistes grāmatas tēmu "Izmantojot sp_executesql" un "sp_executesql (T-SQL)".

  • SP:RECOMPILES Šo notikumu norāda, ka saglabātā procedūra tika recompiled izpildes laikā. Daudzi gadījumi recompile norāda, ka SQL Server izmanto resursu vaicājuma kompilēšanas nevis vaicājuma izpilde.

Ja neredzat kādu no šiem notikumiem, lietojumprogramma darbojas tikai ekspromta vaicājumus SQL Server. Ja SQL Server nosaka, ka tā var automātiski parameterize noteikti vaicājumi vai atkārtoti izmanto to pašu parametriem, katru vaicājumu, kas tiek izpildīts nepieciešams SQL Server, lai izveidotu jaunu izpildes plānu. SQL servera veiktspējas pārraugu, vajadzētu parādīties daudz SQL kompilāciju sek. Tas var būt CPU intensīvi izmanto daudz vienlaicīgi lietotājiem. Lai novērstu šo problēmu, atrodiet lielākā daļa bieži izpilda vaicājumu un veidojiet iekļautajām procedūrām šie pieprasījumi, izmantojot parametru marķieri vai izmantojot sp_executesql.

Atsauces

Lai iegūtu papildinformāciju par pārraudzība un SQL servera veiktspējas problēmu novēršanu, noklikšķiniet uz šiem rakstu numuriem un lasiet Microsoft zināšanu bāzes rakstus:

Kā novērst lietojumprogrammu veiktspēju, Microsoft SQL Server 224587

224453 INF: izpratne un SQL Server 7.0 vai 2000 bloķēšanas problēmu novēršana

243586 saglabāta problēmu novēršanas procedūras recompilation

243589 kā novērst lēna vaicājumu SQL Server 7.0 vai jaunāka versija

251004 INF: kā kontrolēt SQL Server 7.0 bloķēšana

Vai nepieciešama papildu palīdzība?

Paplašiniet savas prasmes
Iepazīties ar apmācību
Esiet pirmais, kas saņem jaunās iespējas
Pievienoties Microsoft Insider

Vai šī informācija bija noderīga?

Cik lielā mērā esat apmierināts ar valodas kvalitāti?
Kas ietekmēja jūsu pieredzi?

Paldies par jūsu atsauksmēm!

×