{"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 baasi p\u00e4ringute optimeerimine B2B teenuse n\u00e4itel ehitajatele","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Kuidas kasvatada B2B p\u00e4ringute arvu k\u00fcmme korda, kolimata j\u00f5udsamale serverile ja s\u00e4ilitades s\u00fcsteemi t\u00f6\u00f6v\u00f5ime? R\u00e4\u00e4gin, kuidas me v\u00f5itlesime andmebaasi j\u00f5udluse langusega, kuidas me optimeerisime SQL p\u00e4ringud nii, et teenindada v\u00f5imalikult palju kasutajaid ja mitte suurendada kulutusi arvutusressurssidele.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nTegelen teenuse loomisega \u00e4riprotsesside haldamiseks ehitusettev\u00f5tetes. Meiega t\u00f6\u00f6tab umbes 3000 ettev\u00f5tet. \u00dcle 10 000 inimese t\u00f6\u00f6tab igap\u00e4evaselt meie s\u00fcsteemis 4\u201310 tundi. See lahendab mitmesuguseid planeerimise, teavitamise, hoiatamise ja valideerimise \u00fclesandeid... Me kasutame PostgreSQL 9.6. Meie andmebaasis on umbes 300 tabelit ja iga p\u00e4ev laekub sinna kuni 200 miljonit p\u00e4ringut (10 000 erinevat). Keskmiselt on meil 3\u20134 tuhat p\u00e4ringut sekundis, k\u00f5ige aktiivsematel hetkedel \u00fcle 10 000 p\u00e4ringu sekundis. Suur osa p\u00e4ringutest on OLAP. Lisamised, muutmised ja kustutused on oluliselt v\u00e4hem, seega OLTP koormus on suhteliselt v\u00e4ike. K\u00f5iki neid numbreid t\u00f5in v\u00e4lja, et saaksite hinnata meie projekti ulatust ja m\u00f5ista, kui v\u00e4\u00e4rtuslik meie kogemus teie jaoks v\u00f5iks olla.<\/p>\n<h3>Esimene pilt. L\u00e4\u00e4neline<\/h3>\n<p>\nKui me arendust alustasime, ei m\u00f5elnud me eriti sellele, milline koormus langeb andmebaasile ja mida me teeme, kui server enam ei jaksaks. Andmebaasi projekteerimisel j\u00e4rgnesime \u00fcldistele soovitustele ja p\u00fc\u00fcdsime mitte endale jalga tulistada, kuid ei l\u00e4inud kaugemale \u00fcldistest n\u00f5uannetest 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> ,\" millega me ei olnud tuttavad. Projekteerisime normeerimise p\u00f5him\u00f5tetest l\u00e4htuvalt, v\u00e4ltides andmete liigset kopeerimist, ja ei tundnud muret erinevate p\u00e4ringute kiirususe p\u00e4rast. Kui esimesed kasutajad ilmusid, seisime silmitsi j\u00f5udlusprobleemidega. Nagu tavaliselt, olime selleks t\u00e4iesti ette valmistamata. Esimesed probleemid olid lihtsad. K\u00f5ik lahendati tavaliselt uue indeksi lisamisega. Kuid j\u00f5udis hetk, mil lihtsad lahendused enam ei t\u00f6\u00f6tanud. Teades, et meie kogemus ei ole piisav ja meil on \u00fcha keerulisem aru saada, mis probleemide p\u00f5hjuseks on, palkasime spetsialiste, kes aitasid meil serverit \u00f5igesti seadistada, \u00fchendada j\u00e4lgimisega ja n\u00e4itasid meile, kuhu vaadata, et saada <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/9.6\/pgstatstatements.html\">statistikat<\/a><\/noindex>.<\/p>\n<h3>Teine pilt. Statistiline<\/h3>\n<p>\nNii et meil on umbes 10 000 erinevat p\u00e4ringut, mis t\u00e4idetakse meie andmebaasis \u00f6\u00f6p\u00e4evas. Nendest 10 000 on koletised, mis t\u00e4idetakse 2-3 miljonit korda keskmise t\u00e4itmisajaga 0,1-0,3 ms, ja on p\u00e4ringud, mille keskmine t\u00e4itmise aeg on 30 sekundit, mida kutsutakse 100 korda p\u00e4evas.<\/p>\n<p>Kuna ei olnud v\u00f5imalik optimeerida k\u00f5iki 10 000 p\u00e4ringut, otsustasime m\u00f5ista, kuhu suunata oma j\u00f5upingutusi, et t\u00f5sta andmebaasi j\u00f5udlust \u00f5igesti. P\u00e4rast mitu iteratsiooni hakkasime p\u00e4ringud liigitama t\u00fc\u00fcpideks.<\/p>\n<h4>TOP p\u00e4ringud<\/h4>\n<p>\nNeed on k\u00f5ige raskemad p\u00e4ringud, mis v\u00f5tavad k\u00f5ige rohkem aega (kokku aega). Need on p\u00e4ringud, mida kas kutsutakse v\u00e4ga sageli v\u00f5i p\u00e4ringud, mis t\u00e4idetakse v\u00e4ga kaua (pikad ja sagedased p\u00e4ringud on optimeeritud juba varasemates iteratsioonides kiirusv\u00f5itluses). L\u00f5ppkokkuv\u00f5ttes kulutab server nende t\u00e4itmiseks k\u00f5ige rohkem aega. Samuti on oluline eristada tipup\u00e4ringud \u00fcldise t\u00e4itmise ajaga ja eraldi IO ajaga. Nende p\u00e4ringute optimeerimise viisid on veidi erinevad.<\/p>\n<p>Tavaline praktika k\u00f5igis ettev\u00f5tetes on t\u00f6\u00f6tada TOP p\u00e4ringutega. Neid on v\u00e4he, \u00fchegi p\u00e4ringu optimeerimine v\u00f5ib vabastada 5-10% ressursse. Kuid projekti \u201ekasvades\u201d muutub TOP p\u00e4ringute optimeerimine \u00fcha keerulisemaks. K\u00f5ik lihtsad meetodid on juba rakendatud ning isegi k\u00f5ige \u201eraske\u201d p\u00e4ring v\u00f5tab \u201evaid\u201d 3-5% ressursse. Kui TOP p\u00e4ringud kokku v\u00f5tavad alla 30-40% ajast, siis t\u00f5en\u00e4oliselt olete juba teinud j\u00f5upingutusi, et need t\u00f6\u00f6taksid kiirelt, ja on aeg liikuda j\u00e4rgmise grupi p\u00e4ringute optimeerimise juurde.<br \/>\nJ\u00e4\u00e4b vastata k\u00fcsimusele, kui palju \u00fclemisi p\u00e4ringuid sellesse gruppi lisada. Ma tavaliselt v\u00f5taksin mitte v\u00e4hem kui 10, kuid mitte rohkem kui 20. P\u00fc\u00fcan tagada, et TOP grupi esimese ja viimase t\u00e4itmise aeg ei erine rohkem kui 10 korda. See t\u00e4hendab, et kui p\u00e4ringute t\u00e4itmise aeg langeb j\u00e4rsult 1. kohalt 10. kohale, v\u00f5tan TOP-10, kui langus on sujuvam, siis suurendan grupi suurust 15 v\u00f5i 20-ni.<br \/>\n<img decoding=\"async\" alt=\"Andmete baasi 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 tulevad kohe p\u00e4rast TOP-i, v\u00e4lja arvatud viimased 5-10%. Tavalise optimeerimise puhul seisneb just nende p\u00e4ringute juures v\u00f5imalus oluliselt t\u00f5sta serveri j\u00f5udlust. Need p\u00e4ringud v\u00f5ivad \u201ekaaluda\u201d kuni 80%. Kuid isegi kui nende osakaal \u00fcletab 50%, on aeg vaadata neile l\u00e4hemalt.<\/p>\n<h4>Saba (tail)<\/h4>\n<p>\nNagu \u00f6eldud, tulevad need p\u00e4ringud l\u00f5pus ja nendele kulub 5-10% ajast. Neist v\u00f5ib unustada, kui te ei kasuta automaatseid anal\u00fc\u00fcsivahendeid, siis v\u00f5ib nende optimeerimine samuti olla odav.<\/p>\n<p>Kuidas hinnata iga gruppi?<\/p>\n<p>Kasutame SQL-p\u00e4ringut, mis aitab sellist hinnaandmist teha PostgreSQL jaoks (olen kindel, et paljude teiste andmebaasis\u00fcsteemide jaoks saab kirjutada sarnase p\u00e4ringu).<\/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 tulemus \u2013 kolm veergu, millest iga\u00fcks sisaldab protsent aega, mis kulub selle grupi p\u00e4ringute t\u00f6\u00f6tlemiseks. P\u00e4ringu sees on kaks numbrit (minu puhul need on 20 ja 800), mis eraldavad grupi \u00fchte t\u00fc\u00fcpi p\u00e4ringud teistest.<\/p>\n<p>Nii seondub p\u00e4ringute osakaal optimeerimise algusaegadel ja praegu.<\/p>\n<p><img decoding=\"async\" alt=\"Andmete baasi 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, aga \u201ckeskmike\u201d osakaal on suurenenud.<br \/>\nAlguses t\u00f5id TOP p\u00e4ringud sisse ilmseid vigu. Aja jooksul kadusid lapsehaigused, TOP p\u00e4ringute osakaal v\u00e4henes, 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 loetelu k\u00f5ige sagedamini kasutatud meetoditest, mis aitasid meil kiirendada TOP p\u00e4ringuid:<\/p>\n<ul>\n<li>S\u00fcsteemi \u00fcmberkujundamine, n\u00e4iteks teate loogika \u00fcmbersuunamine s\u00f5numite vahendajale perioodiliste p\u00e4ringute asemel andmebaasi.<\/li>\n<li>Indeksite lisamine v\u00f5i muutmine.<\/li>\n<li>ORM p\u00e4ringute \u00fcmberkirjutamine puhtaks SQL-iks.<\/li>\n<li>Laise andmete laadimise loogika \u00fcmberkirjutamine.<\/li>\n<li>K\u00fcpsetamine l\u00e4bi andmete denormaliseerimise. N\u00e4iteks on meil seos tabelite Transport -&gt; Arve -&gt; P\u00e4ring -&gt; Taotlus. Iga transport on seotud taotlusega teiste tabelite kaudu. Et mitte siduda iga p\u00e4ringuga k\u00f5iki tabeleid, kopeerisime viite taotlusele tabelisse Transport.<\/li>\n<li>Kohandatud staatiliste tabelite vahem\u00e4lu, kus on viidatud ja harva muudetud tabelid programmi m\u00e4lus.<\/li>\n<\/ul>\n<p>\nM\u00f5nikord t\u00f5id muudatused kaasa suure \u00fcmberkujundamise, kuid v\u00f5imaldasid s\u00fcsteemi koormuse v\u00e4hendamist 5-10% ja olid seega \u00f5igustatud. Aja jooksul t\u00f5usis v\u00e4ljund j\u00e4rjest v\u00e4hemaks, samas kui n\u00f5udmine t\u00f5sise \u00fcmberkujundamise j\u00e4rele kasvas.<\/p>\n<p>Siis p\u00f6\u00f6rasime t\u00e4helepanu teisele p\u00e4ringute r\u00fchmale \u2013 keskmike r\u00fchmale. Selles oli palju rohkem p\u00e4ringuid ja tundus, et terve grupi anal\u00fc\u00fcsimine v\u00f5tab kaua aega. Kuid enamik p\u00e4ringutest osutusid optimeerimiseks v\u00e4ga lihtsateks, ja paljud probleemid kordusid k\u00fcmnete erinevate variatsioonide kaudu. Siin on m\u00f5ned t\u00fc\u00fcpilised optimeerimised, mida kasutasime k\u00fcmnete sarnaste p\u00e4ringute jaoks, ja iga optimeeritud p\u00e4ringute grupp v\u00e4hendas andmebaasi koormust 3-5%.<\/p>\n<ul>\n<li> COUNT abil salvestuste olemasolu kontrollimise asemel hakkasime kasutama EXISTS.\n <\/li>\n<li>Vabandasime DISTINCT'i (\u00fcldreeglit ei ole, kuid m\u00f5nikord on v\u00f5imalik sellest h\u00f5lpsasti vabaneda, kiirendades p\u00e4ringut 10-100 korda).\n<p>N\u00e4iteks, suurte kohaletoimetamise tabelite (DELIVERY) p\u00f5hjal k\u00f5ikide juhtide valimise p\u00e4ringu asemel. <\/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\u00e4ikese PERSON tabeli p\u00f5hjal.<\/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 seotud alam-p\u00e4ringut, kuid see kiirus t\u00f5usis rohkem kui 10 korda.\n <\/li>\n<li>Paljude juhtumite korral loobusime \u00fcldse COUNT-st ja <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.citusdata.com\/blog\/2016\/10\/12\/count-performance\/#dup_counts_estimated_filtered\">asendasime selle ligikaudse v\u00e4\u00e4rtuse arvutamisega.<\/a><\/noindex>\n <\/li>\n<li>asemel\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 konkreetset p\u00e4ringut \u00f5nnestus m\u00f5nikord kiirendada 3-1000 korda. Hoolimata muljetavaldavatest tulemustest arvasime alguses, et p\u00e4ringu optimeerimine, mis kestab 10 ms, ei ole m\u00f5ttetu, olles kolmesaja k\u00f5ige raskema p\u00e4ringu seas ja andmebaasi koormuse \u00fcldises ajas kulutades sajandik protsenti. Kuid sama retsepti rakendamine sarnaste p\u00e4ringute r\u00fchmale t\u00f5i meile tagasi mitu protsenti. Aja raiskamise v\u00e4ltimiseks kogu sadu p\u00e4ringute k\u00e4sitsi \u00fclevaatamiseks kirjutasime v\u00e4lja m\u00f5ned lihtsad skriptid, mis regulaarsete avaldiste abil leidsid sarnased p\u00e4ringud. L\u00f5ppkokkuv\u00f5ttes v\u00f5imaldas automaatne p\u00e4ringute r\u00fchmade leidmine meil veelgi parandada oma efektiivsust, kulutades tagasihoidlikke j\u00f5upingutusi.<\/p>\n<p>Oleme juba kolm aastat t\u00f6\u00f6tanud sama riistvaraga. Keskmine koormus on umbes 30%, tipphetkel j\u00f5uab see kuni 70%. Taotluste arvu ja kasutajate arv on kasvanud umbes k\u00fcmme korda. Ja see k\u00f5ik on v\u00f5imalik pideva j\u00e4lgimise t\u00f5ttu nende TOP-MEDIUM p\u00e4ringute gruppide suhtes. Niipea, kui m\u00f5ni uus p\u00e4ring ilmub TOP gruppi, anal\u00fc\u00fcsime seda kohe ja \u00fcritame kiirusest maksimum v\u00f5tta. MEDIUM gruppi vaatame kord n\u00e4dalas p\u00e4ringute anal\u00fc\u00fcsi skriptide abil. Kui leiame uusi p\u00e4ringuid, mille optimeerimise viise juba teame, muudetakse neid kiiresti. M\u00f5nikord avastame uusi optimeerimise meetodeid, mida saab koheselt rakendada mitmele p\u00e4ringule. <\/p>\n<p>Meie prognooside kohaselt talub praegune server kasutajate arvu kasvu veel 3-5 korda. T\u00f5si, meil on veel \u00fcks trump varrukas\u2014me ei ole veel SELECT p\u00e4ringute peegeldust soovituslikult \u00fcmber l\u00fclitanud. Kuid me teeme seda teadlikult, kuna tahame esmalt t\u00e4ielikult \u00e4ra kasutada \"nutika\" optimeerimise v\u00f5imalusi, enne kui l\u00fclitame sisse \"raskema suurt\u00fcki\".<br \/>\nKriitiline vaade tehtud t\u00f6\u00f6le v\u00f5ib vihjata, et tasub kaaluda vertikaalset skaleerimist. Osta v\u00f5imsam server, selle asemel et spetsialistide aega raisata. Server ei pruugi olla nii kallis, arvestades, et meie vertikaalse skaleerimise piirangud ei ole veel ammendatud. Kuigi p\u00e4ringute arv on kasvanud k\u00fcmme korda. Aastate jooksul on s\u00fcsteemi funktsionaalsus suurenenud ja praegu on erinevaid p\u00e4ringute t\u00fc\u00fcpe rohkem. K\u00f5ik, mis oli olemas, t\u00e4itub v\u00e4hemate, kuid t\u00f5husamate p\u00e4ringute kaudu t\u00e4nu sisseseadmiseks. Seega, et saada reaalseid kiirusetegureid, v\u00f5ib julgelt korrutada veel viiega. Nii midagi v\u00e4hem ametlikku, v\u00f5ib \u00f6elda, et kiirus on suurenenud 50 ja rohkem korda. Serveri vertikaalne t\u00f5stmine 50 korda maksaks rohkem. Eriti arvestades, et \u00fcks kord teostatud optimeerimine t\u00f6\u00f6tab kogu aeg, samas kui renditud serveri arve tuleb igakuiselt.<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 5.0.1.1 - 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?\" \/>\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) 5.0.1.1\" \/>\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?\" \/>\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\udd47Andmetebaasi p\u00e4ringute optimeerimine B2B teenuse n\u00e4itel ehitajatele | ProHoster","description":"Kuidas saavutada 10-kordne kasv andmebaasi p\u00e4ringute arvus, \u00fcle minemata v\u00f5imsamale serverile ja s\u00e4ilitada s\u00fcsteemi t\u00f6\u00f6korrus?","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?","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}