» »

Počasen API na MS SQL

Počasen API na MS SQL

prowb ::

Rad bi ugotovil, kaj povroča zelo počasno delovanje API.

Najprej disklejmer: nisem razvijalec api ali niti ne arhitekt sistema, ki ga bom opisal, rad bi samo seznam opornih točk po katerih bi našel problem.

Sistem:

fizični server z dvema virtualkama (hyperv):
1. virtualka z bazo
2. virtualka z api programom

Klic api ja (recimo trivialni GET po številki naročila) traja 20+ sec.
Ni razlike ali naredim GET "od zunaj", znotraj omrežja, ali celo na localhost.

Največ časa se porabi, ko virtualka z API pokliče virtualko z SQL.

Kako se lahko lotim iskanja napake?

Tody ::

Torej traja klic v bazo oz poizvedba v bazi. Klic je lahko simple, kaj more baza narediti za to da naredi to pa je druga stvar. Če je miljone zapisov pa ni indexov potem zna trajat da najde pravega. Lahko je povezanih še n tabel zdraven da dobi vse podatke ven. Lahko vam zmankuje rama, lahko je procesor zabasan. Brez dostopa do SQL boš težko karkoli naredil. Ko pa si enkrat tam pa lahko isti klic narediš "na roko" pa boš videl kako in kaj.

AndrejS ::

Vzrokov je lahko več:
- manjkajoči indexi na DB.
- problem povezave med DB in API
- slaba arhitektura DB
- ...

Prvo bi preveril CPU in memory usage za DB.
Preveri če lahko na DB vklopiš slow query log.

1x sem imal na bazi problem , ker ni resolval hostname in je bil prvi connection počasen - mislim da je bilo to na mySQL

Zgodovina sprememb…

  • spremenil: AndrejS ()

prowb ::

AndrejS je izjavil:


Prvo bi preveril CPU in memory usage za DB.


Tole sem že preveril - nobena virtualka ali fizična mašina "niti ne trzne", ko naredim request.

Če zaženem management studio sicer ne znam ponovit requesta kot je iz api (ker pač ne vidim kaj v resnici on kliče v ozadju), lahko pa naredim kak "brezvezni" select top 1000 ipd. nad raznimi tabelami.

Tudi tukaj traja precej časa, ko prvič poženem.

no comment ::

Potem, glede na to, da gre očitno za MS SQL server, z MS SQL Profilerjem (če seveda imaš zadostne pravice) poglej kakšna je poizvedba, kdaj pride poizvedba na bazo...

AndrejS ::

Kolko ima Virtualka za MSSQL RAM-a ? Vsi SQL servirje se počutijo bolje z velikimi količinami RAMa.

Zgodovina sprememb…

  • spremenil: AndrejS ()

mm&r ::

Za začetek naredi en osnovni query po številki naročila pa boš hitro videl, če je indeks gor bi moralo bit instantno, če ni se loti raziskovanja.

Verjetno pa bi blo najbolje, da tole pogleda nekdo z ustreznim znanjem, mu bo vzelo manj časa kot, da ti tukaj piše navodila za debuging :)

prowb ::

AndrejS je izjavil:

Kolko ima Virtualka za MSSQL RAM-a ? Vsi SQL servirje se počutijo bolje z velikimi količinami RAMa.

32GB

mm&r je izjavil:

Za začetek naredi en osnovni query po številki naročila pa boš hitro videl, če je indeks gor bi moralo bit instantno, če ni se loti raziskovanja.


Baza je kar precej "čudna" ni ravno šolsko postavljena, kjer bi iz imena tabele in stolpca lahko kaj pametnega izvedel - ampak ja - konec koncev lahko iščem po čemer koli...

mm&r je izjavil:


Verjetno pa bi blo najbolje, da tole pogleda nekdo z ustreznim znanjem, mu bo vzelo manj časa kot, da ti tukaj piše navodila za debuging :)

Verjetno - tak je tudi plan za naslednji teden - vmes pa bi rad sam kaj ugotovil in se naučil :)

Zgodovina sprememb…

  • spremenilo: prowb ()

Goran's Blog ::

Z SQL profilerjem ulovi GET klic ali pa še lahko skozi Management Studio to simuliraš( lahko že enostaven select tega koliko časa dela). Če loviš z Profilerjem je dovolj, da vključiš SQL BatchCompeted in RPC Completed in se morda omejiš še na ta dva strežnika.
Nato v Management studiju lahko vključiš tudi live query statistic kjer poženeš omenjeni queri oziroma klic in ti bo morda že on predlagal Index (ponavadi piše tudi koliko impacta je če narediš ta index, če je številka manj kot 30 brezveze ga delati in so čudno qeuriji spisani).

OracleDev ::

Sproži SQL direktno na bazi. Koliko časa traja? Če tukaj traja 20 sekund je problem seveda SQLu.

kuall ::

prowb je izjavil:

Če zaženem management studio sicer ne znam ponovit requesta kot je iz api (ker pač ne vidim kaj v resnici on kliče v ozadju), lahko pa naredim kak "brezvezni" select top 1000 ipd. nad raznimi tabelami.

zaženi sql profiler in ga omeji na sql userja, ki ga uporablja api. izvedi api klic. potem najdi query, ki ima največji duration in ga optimiziraš. optimiziraš pa tako: poženeš query, vključiš "include live query statistics" ali "include actual execution plan" in ti bo pokazal manjkajoče indexe, če je to problem.

Zgodovina sprememb…

  • spremenilo: kuall ()

WhiteAngel ::

OracleDev je izjavil:

Sproži SQL direktno na bazi. Koliko časa traja? Če tukaj traja 20 sekund je problem seveda SQLu.


^^ To. Šele potem vse ostalo.

prowb ::

WhiteAngel je izjavil:

OracleDev je izjavil:

Sproži SQL direktno na bazi. Koliko časa traja? Če tukaj traja 20 sekund je problem seveda SQLu.


^^ To. Šele potem vse ostalo.


Ugotavljam, da sem preglup, pa bi to znal naredit...

na virtualki z api, sem našel da se povezuje na ip,port, ime baze, un, pw...

Če grem na virtualko z bazo (ip kot piše v nastavitvah api),pa gor ne najdem te baze :D

Mislim, najdem datoteki z to bazo (.mdf in .ldf) - ampak iz management studia pa se ne znam do njih povezat...

Zgodovina sprememb…

  • spremenilo: prowb ()

OracleDev ::

Poglej če maš na virtualki kašnega klienta (program, npr. MS SQL Server manager al kateri je že njihov) za povezavo do baze. Če to maš, tam kreiraj konekcijo s temi podatki ki si jih navedel...

prowb ::

OracleDev je izjavil:

Poglej če maš na virtualki kašnega klienta (program, npr. MS SQL Server manager al kateri je že njihov) za povezavo do baze. Če to maš, tam kreiraj konekcijo s temi podatki ki si jih navedel...


Ko sm na virtualki z API zagnal management studio sem enostavno vrgel noter za server name ip in port, izbral sql sql server autentication, vpisal un in geslo in sem bil takoj gor.

če to delam na virtualki za bazo pa ne gre - ne najde serverja...

OracleDev ::

Se pravi na eni virtualki imaš klienta za dostop do baze. Že to je zaenkrat dovolj. Tam nato poženi tisti SQL. Point je da najprej probaš SQL ročno in ne preko nekih spisanih programov.

prowb ::

OracleDev je izjavil:

Se pravi na eni virtualki imaš klienta za dostop do baze. Že to je zaenkrat dovolj. Tam nato poženi tisti SQL. Point je da najprej probaš SQL ročno in ne preko nekih spisanih programov.


Točno enako ne morem, ker nevem kaj je notri... Pa imena so čudna :D Lahko pa na eni random tabeli poženem select top 1000 recimo.

Zadeva najprej malo "zašteka", potem pa v trenutku izpljune rezultat. Izgleda mi, kot da bi povezovanje trajalo kake 10 sec.
Če select ponovim je rezultat takojšen.
Če grem na neko drugo tabelo, pa spet malo traja in potem izpljune.

Če tudi api klic potrebuje nekih 10sec, da se "poveže", bi znal bit to problem?

Sedaj pa bi res rad videl, kako bi to izgledalo direkt na bazi!

mm&r ::

Na hitro lahko pogledaš tudi če imaš kakšne počasne querije preko Activity Monitorjy




Recent Expensive Queries
Active Expensive Queries

Imaš v enem stolpcu tudi avg duration pa boš videl kateri query-ji najdlje trajajo

no comment ::

prowb je izjavil:


Točno enako ne morem, ker nevem kaj je notri... Pa imena so čudna :D Lahko pa na eni random tabeli poženem select top 1000 recimo.

Preštej koliko ljudi ti je že svetovalo, da s profilerjem dobi TOČEN select. Mogoče se VSI ne motijo oz. povej zakaj si tako odločen ignorirati ta nasvet...

Ales ::

prowb je izjavil:

... Lahko pa na eni random tabeli poženem select top 1000 recimo.

Zadeva najprej malo "zašteka", potem pa v trenutku izpljune rezultat. Izgleda mi, kot da bi povezovanje trajalo kake 10 sec.
Če select ponovim je rezultat takojšen.

Ti DNS dela v redu?

CopiumRovte ::

windows eksperti radi klikajo po wizardih

nightrage ::

Premal podatkov podanih. Ni povedal, kako se obnaša API povezan na ms sql server, ko ga debug-ira. A so v tem primeru enako slabe performance?
Zdej predvidevam, da je bil API napisan v VS.net, ki ima diagnostic tools-e, sql profiler, odličen razhroščevalnik.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL "manager"

Oddelek: Programiranje
352227 (1336) Zimonem
»

[SQL] primary key inkrementalno dodajanje (strani: 1 2 )

Oddelek: Programiranje
515401 (4591) ejresnevem
»

Microsoftov SQL Server prihaja na Linux (strani: 1 2 3 )

Oddelek: Novice / Ostala programska oprema
12629465 (24150) noraguta
»

[MSSQL]Kopiranje tabele

Oddelek: Programiranje
91423 (1335) darkolord
»

Razvijalec MySQL-a izpodbija Oraclov nakup Suna

Oddelek: Novice / Nakupi / združitve / propadi
289137 (8106) AndrejS

Več podobnih tem