{"id":36704,"date":"2019-10-31T22:13:15","date_gmt":"2019-10-31T19:13:15","guid":{"rendered":"https:\/\/prohoster.info\/blog\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej\/"},"modified":"2019-10-31T22:13:15","modified_gmt":"2019-10-31T19:13:15","slug":"optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej","title":{"rendered":"Andmete p\u00e4ringute optimeerimine B2B teenuse n\u00e4itel ehitajatele","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kuidas kasvatada andmebaasi p\u00e4ringute arvu k\u00fcmme korda, mitte liikudes j\u00f5udsamale serverile ja s\u00e4ilitada s\u00fcsteemi t\u00f6\u00f6v\u00f5ime? R\u00e4\u00e4gin, kuidas me v\u00f5itlesime andmebaasi j\u00f5udluse languse vastu, kuidas optimeerisime SQL-p\u00e4ringuid, et teenindada v\u00f5imalikult palju kasutajaid ja mitte suurendada arvutusressursside kulusid.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nMa teen teenuseid ehitusettev\u00f5tete \u00e4riprotsesside haldamiseks. Meiega t\u00f6\u00f6tab ligikaudu 3000 ettev\u00f5tet. Iga p\u00e4ev kasutab meie s\u00fcsteemi \u00fcle 10 000 inimese 4-10 tundi. See lahendab erinevaid \u00fclesandeid, sealhulgas planeerimine, teavitamine, hoiatamine, valideerimine jne. Me kasutame PostgreSQL 9.6. Andmebaasis on meil umbes 300 tabelit ja iga p\u00e4ev tuleb sinna kuni 200 miljonit p\u00e4ringut (10 000 erinevat). Keskmiselt on meil 3-4 tuhat p\u00e4ringut sekundis, k\u00f5ige aktiivsematel hetkedel \u00fcle 10 000 p\u00e4ringu sekundis. Suur osa p\u00e4ringutest on OLAP. Uute andmete lisamine, muudatused ja kustutamised on oluliselt v\u00e4hem, seega OLTP koormus on suhteliselt v\u00e4ike. K\u00f5iki neid numbreid olen v\u00e4lja toonud, et teil oleks v\u00f5imalik hinnata meie projekti ulatust ning m\u00f5ista, kui kasulik meie kogemus v\u00f5ib teile olla.<\/p>\n<h3>Esimene pilt. L\u00fc\u00fcriiline<\/h3>\n<p>\nKui me arenduse alustasime, ei m\u00f5elnud me eriti sellele, milline koormus langeb andmebaasile ja mida me teeme, kui server enam ei suuda. Andmebaasi projekteerimisel j\u00e4rgnesime \u00fcldistele soovitustele ja p\u00fc\u00fcdsime mitte endale jalga tulistada, kuid edasi liikudes olid \u00fcldised n\u00f5uanded, nagu \"\u00e4rge kasutage mustrit <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Entity%E2%80%93attribute%E2%80%93value_model\">Entity Attribute Values<\/a><\/noindex> Me ei olnudun. Me projekteerisime l\u00e4htudes normaliseerimise p\u00f5him\u00f5tetest, v\u00e4ltides andmete liigset kordumist ning ei muretsenud teatud p\u00e4ringute kiirendamise p\u00e4rast. Kui esimesed kasutajad tulid, kohtasime j\u00f5udlusprobleeme. Nagu tavaliselt, olime t\u00e4iesti selleks ette valmistamata. Esimesed probleemid olid lihtsad. Enamasti lahenesid asjad uue indeksi lisamisega. Kuid tuli hetk, mil lihtsad t\u00e4iendused enam ei t\u00f6\u00f6tanud. Teades, et meie kogemused ei piisa ja meil on \u00fcha raskem m\u00f5ista, mis probleemide p\u00f5hjused on, palkasime spetsialiste, kes aitasid meil serveri korralikult seadistada, monitorimise \u00fchendada ning n\u00e4itasid, kuhu vaadata, et saada. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/9.6\/pgstatstatements.html\">statistika<\/a><\/noindex>.<\/p>\n<h3>Teine pilt. Statistika<\/h3>\n<p>\nNii et meil on umbes 10 000 erinevat p\u00e4ringut, mis meie andmebaasis t\u00e4idetakse \u00f6\u00f6p\u00e4evas. Nendest 10 000-st on koletised, mida t\u00e4idetakse 2-3 miljonit korda keskmise t\u00e4itmisajaga 0,1-0,3 ms, ja on p\u00e4ringud, mille keskmine t\u00e4itmisaja on 30 sekundit ja mis kutsutakse esile 100 korda p\u00e4evas.<\/p>\n<p>Kuna 10 tuhat p\u00e4ringut polnud v\u00f5imalik optimeerida, otsustasime, kuhu suunata j\u00f5upingutused andmebaasi j\u00f5udluse t\u00f5stmiseks. P\u00e4rast mitmeid iteratsioone hakkasime p\u00e4ringud liigitama t\u00fc\u00fcpide j\u00e4rgi.<\/p>\n<h4>TOP p\u00e4ringud<\/h4>\n<p>\nNeed on k\u00f5ige raskemad p\u00e4ringud, mis v\u00f5tavad k\u00f5ige rohkem aega (kogu aeg). Need on p\u00e4ringud, mida kas kutsutakse v\u00e4ga sageli v\u00f5i p\u00e4ringud, mis vajavad v\u00e4ga pikka t\u00e4itmist (pikad ja sagedased p\u00e4ringud on juba varasematel iteratsioonidel kiirusv\u00f5itluses optimeeritud). Kokku kulutab server nende t\u00e4itmiseks k\u00f5ige rohkem aega. Oluline on eristada top p\u00e4ringud \u00fcldise t\u00e4itmise aja j\u00e4rgi ja eraldi IO aja j\u00e4rgi. Selliste p\u00e4ringute optimeerimise viisid on veidi erinevad.<\/p>\n<p>K\u00f5igi ettev\u00f5tete tavaline praktika on t\u00f6\u00f6tada TOP-p\u00e4ringutega. Need on v\u00e4he, \u00fche p\u00e4ringu optimeerimine v\u00f5ib vabastada 5-10% ressursse. Siiski, projekti \u201ek\u00fcpsemise\u201d k\u00e4igus muutub TOP-p\u00e4ringute optimeerimine j\u00e4rjest keerukamaks \u00fclesandeks. K\u00f5ik lihtsad meetodid on juba katsetatud ja isegi k\u00f5ige \u201eraske\u201d p\u00e4ring kasutab \u201eainult\u201d 3-5% ressursse. Kui TOP-p\u00e4ringud kokku kulutavad v\u00e4hem kui 30-40% ajast, siis olete t\u00f5en\u00e4oliselt juba pingutanud selle nimel, et need t\u00f6\u00f6taksid kiiresti, ja n\u00fc\u00fcd on aeg liikuda j\u00e4rgmise grupi p\u00e4ringute optimeerimisele.<br \/>\nJ\u00e4\u00e4b vastata k\u00fcsimusele, kui palju k\u00f5rgeid p\u00e4ringuid sellesse gruppi kuulutada. Ma v\u00f5tan tavaliselt mitte v\u00e4hem kui 10, kuid mitte rohkem kui 20. Proovin, et esimese ja viimase p\u00e4ringu aega TOP-grupis erineks mitte rohkem kui 10 korda. St kui p\u00e4ringute t\u00f6\u00f6tlemise aeg langeb j\u00e4rsult 1. kohalt 10. kohale, siis v\u00f5tan TOP-10, kui langus on sujuvam, siis suurendan grupi suurust 15 v\u00f5i 20-ni.<br \/>\n<img decoding=\"async\" alt=\"Andmete p\u00e4ringute optimeerimine B2B teenuse n\u00e4itel ehitajatele\" src=\"\/wp-content\/uploads\/2019\/08\/2a9d9e6053d1aebb71aa213757bd2393.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Keskmikud (medium)<\/h4>\n<p>\nNeed on k\u00f5ik p\u00e4ringud, mis l\u00e4hevad kohe TOP-i j\u00e4rel, v\u00e4lja arvatud viimased 5\u201310%. Just nende p\u00e4ringute optimeerimises peitub sageli v\u00f5imalus serveri j\u00f5udlust m\u00e4rgatavalt t\u00f5sta. Need p\u00e4ringud v\u00f5ivad moodustada kuni 80%. Kuid isegi kui nende osakaal \u00fcletab 50%, on aeg neile t\u00f5sisemalt pilk heita.<\/p>\n<h4>Sabap\u00e4ringud (tail)<\/h4>\n<p>\nNagu \u00f6eldud, l\u00e4hevad need p\u00e4ringud viimaste hulka ja nendele kulub 5\u201310% ajast. Nendest v\u00f5ib unustada ainult siis, kui te ei kasuta automaatseid anal\u00fc\u00fcsivahendeid; siis v\u00f5ib nende optimeerimine samuti odavalt k\u00e4ia.<\/p>\n<p>Kuidas hinnata iga gruppi?<\/p>\n<p>Kasutangi SQL-p\u00e4ringut, mis aitab sellist hindamist teha PostgreSQL-is (olen kindel, et paljudele muudele andmebaasis\u00fcsteemidele on v\u00f5imalik kirjutada sarnane p\u00e4ring).<\/p>\n<p><b class=\"spoiler_title\">SQL-p\u00e4ring TOP-MEDIUM-TAIL gruppide suuruse hindamiseks<\/b><\/p>\n<pre><code class=\"sql\">SELECT sum(time_top) AS sum_top, sum(time_medium) AS sum_medium, sum(time_tail) AS sum_tail\nFROM\n(\n  SELECT CASE WHEN rn  20 AND rn  800              THEN tt_percent ELSE 0 END AS time_tail\n  FROM (\n    SELECT total_time \/ (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query,\n    ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn\n    FROM pg_stat_statements\n    ORDER BY total_time DESC\n  ) AS t\n)\nAS ts\n<\/code><\/pre>\n<p>P\u00e4ringu tulemused - kolm veergu, millest iga\u00fcks sisaldab protsenti ajast, mis kulub selle grupi p\u00e4ringute t\u00f6\u00f6tlemiseks. P\u00e4ringu sees on kaks numbrit (minu juhtumi j\u00e4rgi on need 20 ja 800), mis eraldavad \u00fche grupi p\u00e4ringud teistest.<\/p>\n<p>Nii umbes jagunevad p\u00e4ringute osakaalid optimeerimise alguses ja praegu.<\/p>\n<p><img decoding=\"async\" alt=\"Andmete p\u00e4ringute optimeerimine B2B teenuse n\u00e4itel ehitajatele\" src=\"\/wp-content\/uploads\/2019\/08\/9c70ad9aba8b835c94729c9dda656eab.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDiagrammist on n\u00e4ha, et TOP p\u00e4ringute osakaal on j\u00e4rsult v\u00e4henenud, kuid \"keskmike\" osakaal on suurenenud.<br \/>\nAlguses sattusid TOP p\u00e4ringutesse ilmsed vead. Aja jooksul lastehaigused kadusid, TOP p\u00e4ringute osakaal v\u00e4henes ja tuli pingutada \u00fcha rohkem, et aeglaseid p\u00e4ringuid kiirendada. <\/p>\n<p><b class=\"spoiler_title\">P\u00e4ringute tekstide saamiseks kasutame j\u00e4rgmist p\u00e4ringut<\/b><\/p>\n<pre><code class=\"sql\">SELECT * FROM (\n  SELECT ROW_NUMBER () OVER (ORDER BY total_time DESC) AS rn, total_time \/ (SELECT sum(total_time) FROM pg_stat_statements) * 100 AS tt_percent, query\n  FROM pg_stat_statements\n  ORDER BY total_time DESC\n) AS T\nWHERE\nrn  20 AND rn  800  -- TAIL\n<\/code><\/pre>\n<p>Siin on nimekiri k\u00f5ige sagedamini kasutatud meetoditest, mis aitasid meil TOP p\u00e4ringute kiirus t\u00f5sta:<\/p>\n<ul>\n<li>S\u00fcsteemi \u00fcmberkujundamine, n\u00e4iteks teate loogika \u00fclekandmine s\u00f5numi vahemenetlusele, mitte perioodilised p\u00e4ringud andmebaasi.<\/li>\n<li>Indeksite lisamine v\u00f5i muutmine<\/li>\n<li>ORM p\u00e4ringute \u00fcmberkirjutamine puhtaks SQL-iks<\/li>\n<li>Andmete paindliku laadimise loogika \u00fcmberkirjutamine<\/li>\n<li>Andmete denormaliseerimise kaudu vahem\u00e4llu salvestamine. N\u00e4iteks, meil on tabelite seos Tarne -&gt; Arve -&gt; Taotlus -&gt; Soovitus. See t\u00e4hendab, et iga tarne on seotud taotlusega l\u00e4bi teiste tabelite. Et mitte siduda k\u00f5iki tabeleid igas p\u00e4ringus, oleme dubleerinud viite taotlusele Tarne tabelis.<\/li>\n<li>Staatiliste tabelite ja harva muutuvate tabelite vahem\u00e4llu salvestamine programmi m\u00e4lu.<\/li>\n<\/ul>\n<p>\nM\u00f5nikord t\u00f5id muudatused kaasa ulatusliku uuenduse, kuid andsid 5-10% s\u00fcsteemi koormuse v\u00e4henemist ja olid \u00f5igustatud. Aja jooksul sai tulu \u00fcha v\u00e4iksemaks ja uuendus muutus \u00fcha t\u00f5siseks.<\/p>\n<p>Siis p\u00f6\u00f6rasime t\u00e4helepanu teisele p\u00e4ringute grupile \u2013 keskmike grupp. Selles on palju rohkem p\u00e4ringuid ja tundus, et kogu grupi anal\u00fc\u00fcs v\u00f5ib v\u00f5tta v\u00e4ga palju aega. Siiski osutus enamik p\u00e4ringutest optimeerimiseks v\u00e4ga lihtsaks ja paljud probleemid kordusid k\u00fcmneid kordi erinevates variantides. Siin on m\u00f5ned t\u00fc\u00fcpilised optimeerimised, mida rakendasime k\u00fcmnetele sarnastele p\u00e4ringutele, ja iga optimeeritud p\u00e4ringute grupp v\u00e4hendas andmebaasi koormust 3-5%.<\/p>\n<ul>\n<li> Kasutame EXISTS-i, mitte COUNT-i ja t\u00e4ielikku tabeli skaneerimist.\n <\/li>\n<li>Vabanesime DISTINCT-ist (\u00fchtset retsepti pole, aga m\u00f5nikord on kerge sellest loobuda, kiirendades p\u00e4ringut 10\u2013100 korda).\n<p>N\u00e4iteks, kui soovime k\u00fcsida k\u00f5iki juhte suurel kohaletoimetamiste tabelil (DELIVERY). <\/p>\n<pre><code class=\"sql\">SELECT DISTINCT P.ID, P.FIRST_NAME, P.LAST_NAME\nFROM DELIVERY D JOIN PERSON P ON D.DRIVER_ID = P.ID\n<\/code><\/pre>\n<p>\ntegime p\u00e4ringu suhteliselt v\u00e4ikesele tabelile PERSON.<\/p>\n<pre><code class=\"sql\">SELECT P.ID, P.FIRST_NAME, P.LAST_NAME\nFROM PERSON\nWHERE EXISTS(SELECT D.ID FROM DELIVERY WHERE D.DRIVER_ID = P.ID)\n<\/code><\/pre>\n<p>\nTundub, et kasutasime korreleerivat alamk\u00fcsitlust, kuid see annab \u00fcle 10-kordse kiiruskasvu.\n <\/li>\n<li>Paljuski loobusime COUNT-ist t\u00e4ielikult ja <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.citusdata.com\/blog\/2016\/10\/12\/count-performance\/#dup_counts_estimated_filtered\">asendasime selle umbkaudse v\u00e4\u00e4rtuse arvutamisega.<\/a><\/noindex>\n <\/li>\n<li>asetatakse\n<pre><code class=\"sql\">UPPER(s) LIKE JOHN%\u2019 \n<\/code><\/pre>\n<p>\nkasutame <\/p>\n<pre><code class=\"sql\">s ILIKE \u201cJohn%\u201d\n<\/code><\/pre>\n<p>\n <\/li>\n<\/ul>\n<p>\nIga konkreetne p\u00e4ring suudeti m\u00f5nikord kiiruselt t\u00f5sta 3-1000 korda. Kuigi tulemused olid muljetavaldavad, tundus alguses, et pole m\u00f5tet optimeerida p\u00e4ringut, mis kestab 10 ms, kuulub kolmanda saja k\u00f5ige keerukama p\u00e4ringu hulka ja \u00fcldise koormuse ajal veedab andmebaasis ainult sajandik protsenti. Rakendades sama retsepti r\u00fchmale sarnastele p\u00e4ringutele suutsime saavutada mitme protsendi v\u00f5rra paremad tulemused. Aja s\u00e4\u00e4stmiseks k\u00f5igi sadade p\u00e4ringute k\u00e4sitsi l\u00e4bi vaatamist, kirjutasime m\u00f5ned lihtsad skriptid, mis regulaaravalduste abil leidsid sarnased p\u00e4ringud. L\u00f5puks v\u00f5imaldas automaatne p\u00e4ringute grupi otsing meil veelgi paremini oma tulemuslikkust t\u00f5sta, kulutades sellele tagasihoidlikult aega.<\/p>\n<p>Oleme juba kolm aastat t\u00f6\u00f6tanud sama riistvaraga. Keskmine koormus on umbes 30%, tipukoormuse ajal ulatub see 70%ni. K\u00fcsimuste ja kasutajate arv on kasvanud umbes k\u00fcmme korda. Ja see k\u00f5ik on t\u00e4nu pidevale nende TOP-MEDIUM p\u00e4ringugruppide j\u00e4lgimisele. Nii pea, kui m\u00f5ni uus p\u00e4ring ilmub TOP-gruppi, anal\u00fc\u00fcsime seda kohe ja p\u00fc\u00fcame kiirusest maksimumi v\u00f5tta. MEDIUM-gruppi vaatame kord n\u00e4dalas \u00fcle p\u00e4ringuanal\u00fc\u00fcsi skriptide abil. Kui leiame uusi p\u00e4ringuid, mida me juba teame, kuidas optimeerida, muudame neid kiiresti. M\u00f5nikord avastame uusi optimeerimise viise, mida saab rakendada kohe mitmele p\u00e4ringule. <\/p>\n<p>Meie prognooside kohaselt suudab praegune server taluda kasutajate arvu suurenemist veel 3-5 korda. T\u00f5si, meil on veel \u00fcks trump varrukas \u2013 me ei ole veel SELECT-p\u00e4ringuid peegeldusele viinud, nagu soovitatakse. Kuid me ei tee seda teadlikult, kuna soovime esmalt t\u00e4ielikult \u00e4ra kasutada \u201enutika\u201c optimeerimise v\u00f5imalusi, enne kui l\u00fclitame sisse \u201eraskema suured relvad\u201c.<br \/>\nKriitiline \u00fclevaade tehtud t\u00f6\u00f6st v\u00f5ib viidata, et tasub kaaluda vertikaalset skaleerimist. Osta v\u00f5imsam server, selle asemel et raisata spetsialistide aega. Server ei pruugi olla kallis, eriti kuna meie vertikaalse skaleerimise piirangud pole veel ammendunud. Siiski on k\u00fcmme korda kasvanud vaid p\u00e4ringute arv. Aastate jooksul on s\u00fcsteemi funktsionaalsus suurenenud ja n\u00fc\u00fcd on p\u00e4ringute variantide arv kasvanud. Funktsionaalsus, mis oli, saab t\u00e4iendava efektiivsuse t\u00e4nu vahem\u00e4llu, kasutades v\u00e4hem p\u00e4ringute arvu, kuid v\u00e4hem t\u00f5husate p\u00e4ringute asemel. Seega v\u00f5ib julgelt korrutada veel 5, et saada reaalne kiirusetegur. Seega v\u00f5ib k\u00f5ige tagasihoidlikumate arvutuste kohaselt \u00f6elda, et kiirusetegur on v\u00e4hemalt 50 korda. Serveri vertikaalne skaleerimine 50 korda oleks olnud kallim. Eriti arvestades, et kord tehtud optimeerimine t\u00f6\u00f6tab pidevalt, samas kui renditud serveri arve tuleb iga kuu.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/461071\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041a\u0430\u043a \u0432\u044b\u0440\u0430\u0441\u0442\u0438 \u0432 10 \u0440\u0430\u0437 \u043f\u043e\u0434 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0411\u0414 \u043d\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u044f \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b? \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u0431\u043e\u0440\u043e\u043b\u0438\u0441\u044c \u0441 \u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043d\u0435 \u043f\u043e\u0432\u044b\u0448\u0430\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u042f \u0434\u0435\u043b\u0430\u044e \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27493,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36704","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041a\u0430\u043a \u0432\u044b\u0440\u0430\u0441\u0442\u0438 \u0432 10 \u0440\u0430\u0437 \u043f\u043e\u0434 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0411\u0414 \u043d\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u044f \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b? \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u0431\u043e\u0440\u043e\u043b\u0438\u0441\u044c \u0441 \u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043d\u0435 \u043f\u043e\u0432\u044b\u0448\u0430\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u042f \u0434\u0435\u043b\u0430\u044e \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 B2B \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041a\u0430\u043a \u0432\u044b\u0440\u0430\u0441\u0442\u0438 \u0432 10 \u0440\u0430\u0437 \u043f\u043e\u0434 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0411\u0414 \u043d\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u044f \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b? \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u0431\u043e\u0440\u043e\u043b\u0438\u0441\u044c \u0441 \u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043d\u0435 \u043f\u043e\u0432\u044b\u0448\u0430\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u042f \u0434\u0435\u043b\u0430\u044e \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:13:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:13:15+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Andmebaasi p\u00e4ringute optimeerimine B2B teenuse n\u00e4itel ehitajatele | ProHoster","description":"Kuidas kasvada k\u00fcmme korda andmebaasi p\u00e4ringute arvu puhul, liikumatult \u00fcleminekuta v\u00f5imsamale serverile ja s\u00e4ilitada s\u00fcsteemi t\u00f6\u00f6v\u00f5ime? R\u00e4\u00e4gin, kuidas me v\u00f5itlesime oma andmebaasi j\u00f5udluse langemisega, kuidas optimeerisime SQL p\u00e4ringuid, et teenindada v\u00f5imalikult palju kasutajaid ja mitte suurendada arvutusressursside kulusid. Loon teenuse \u00e4ritegevuse protsesside haldamiseks.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 B2B \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435\u0439 | ProHoster","og:description":"\u041a\u0430\u043a \u0432\u044b\u0440\u0430\u0441\u0442\u0438 \u0432 10 \u0440\u0430\u0437 \u043f\u043e\u0434 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0411\u0414 \u043d\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u044f \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b? \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u0431\u043e\u0440\u043e\u043b\u0438\u0441\u044c \u0441 \u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043d\u0435 \u043f\u043e\u0432\u044b\u0448\u0430\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u042f \u0434\u0435\u043b\u0430\u044e \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:13:15+00:00","article:modified_time":"2019-10-31T19:13:15+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36704","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 04:30:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:40:22","updated":"2026-01-22 04:30:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/36704","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=36704"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/36704\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/27493"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=36704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=36704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=36704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}