{"id":79028,"date":"2020-04-23T19:43:19","date_gmt":"2020-04-23T17:43:19","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb"},"modified":"2020-04-23T19:43:19","modified_gmt":"2020-04-23T17:43:19","slug":"pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb","title":{"rendered":"Kirjutame PostgreSQL-is valguskiirusel: 1 host, 1 p\u00e4ev, 1TB","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hiljuti r\u00e4\u00e4kisin, kuidas on v\u00f5imalik kasutada t\u00fc\u00fcpilisi retsepte <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/492694\/\">SQL-p\u00e4ringute lugemise tulemuslikkuse suurendamiseks<\/a><\/noindex> PostgreSQL-andmebaasist. T\u00e4na r\u00e4\u00e4gime sellest, kuidas <b>saab andmete kirjutamist<\/b> andmebaasi muuta efektiivsemaks, ilma et oleks vaja kasutada mingisuguseid \"nuppe\" konfiguratsioonis \u2014 lihtsalt korraldades andmevooge \u00f5igesti.<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is valguskiirusel: 1 host, 1 p\u00e4ev, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/cbebbe0ed0e9a6590a4e8dd144f82f40.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>#1. \u0421\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>\nArtikkel sellest, kuidas ja miks tuleks korraldada <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">rakenduslikku sektsioonimist \u201eteoorias\u201d<\/a><\/noindex> on juba olemas, siin r\u00e4\u00e4gime aga m\u00f5ningate l\u00e4henemiste rakendamisest meie <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487380\/\">PostgreSQL-serverite sajade j\u00e4lgimise teenuse<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>\u201eM\u00f6\u00f6dunud p\u00e4evade lood...\u201c<\/h4>\n<p>\nAlgul, nagu iga MVP puhul, k\u00e4ivitus meie projekt suhteliselt v\u00e4ikese koormuse all \u2014 j\u00e4lgimine toimus vaid k\u00fcmne t\u00e4htsama serveri jaoks, k\u00f5ik tabelid olid suhteliselt kompaktsed... Kuid aeg l\u00e4ks edasi, j\u00e4lgitavate hostide arv kasvas ja \u00fcritades j\u00e4lle midagi teha \u00fchega <b>tabelitest, mille suurus on 1,5 TB<\/b>, m\u00f5istsime, et elu nii j\u00e4tkata on k\u00fcll v\u00f5imalik, kuid v\u00e4ga ebamugav.<\/p>\n<p>Ajad olid peaaegu m\u00fc\u00fctilised, toona olid aktuaalsed erinevad PostgreSQL 9.x variandid, seega tuli kogu sektsioonimine teha \"k\u00e4sitsi\" \u2014 l\u00e4bi <b>tabelite p\u00e4rimise ja trigerite<\/b> d\u00fcnaamilise suunamisega. <code>TEOSTA<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is valguskiirusel: 1 host, 1 p\u00e4ev, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/a480e75ccec73080aa2d0be1435d2a2e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSaadud lahendus osutus piisavalt universaalseks, et seda saaks rakendada k\u00f5igi tabelite jaoks:<\/p>\n<ul>\n<li>K\u00e4ivitasime t\u00fchi \"pealkirja\" vanematabeli, millel olid k\u00f5ik <b>vajalikud indeksid ja triggarid.<\/b>.<\/li>\n<li>Klient saadab kirje \"juurtabelisse\", seestpoolt aga l\u00e4bi <b>suunava triggeri<\/b> <code>BEFORE INSERT<\/code> salvestus \u201ef\u00fc\u00fcsiliselt\u201c sisestati vajalikku sektsiooni. Kui sellist ei olnud veel \u2014 p\u00fc\u00fcdsime erandi ja ...<\/li>\n<li>... abiga <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/492464\/\"><code>CREATE TABLE ... (LIKE ... INCLUDING ...)<\/code><\/a><\/noindex> moodustati <b>sektor soovitud kuup\u00e4eva piiranguga<\/b>, et andmete v\u00e4ljav\u00f5tmise ajal toimuks lugemine ainult seal.<\/li>\n<\/ul>\n<p><\/p>\n<h4>PG10: esimene katse<\/h4>\n<p>\nKuid p\u00e4rimise kaudu sektsioonimine ei olnud ajaloos v\u00e4ga kohandatud aktiivse kirjutusvoo v\u00f5i suure arvu alamsektsioonide jaoks. N\u00e4iteks v\u00f5ib meenutada, et vajaliku sektsiooni valimise algoritm oli <b>ruudulise keerukusega<\/b>, mis 100+ sektsiooni puhul t\u00f6\u00f6tab, nagu aru saate....<\/p>\n<p>PG10-s optimeeriti seda olukorda oluliselt, rakendades toe <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/ddl-partitioning\">natiivsele sektsioonimisele.<\/a><\/noindex>. Seet\u00f5ttu proovisime seda kohe rakendada p\u00e4rast salvestuse migreerimist, kuid\u2026<\/p>\n<p>Kuidas selgus p\u00e4rast manuaali uurimist, ei toeta selle versiooni kohandatud sektsioneeritud tabel:<\/p>\n<ul>\n<li>ei toeta indeksite kirjeldust<\/li>\n<li>ei toeta sellel triggerite olemasolu<\/li>\n<li>ei saa olla kellelegi \u00abj\u00e4reltulijaks\u00bb<\/li>\n<li>ei toeta <code>INSERT ... ON CONFLICT<\/code><\/li>\n<li>ei oska automaatselt sektsiooni luua<\/li>\n<\/ul>\n<p>\nP\u00e4rast peaga vastu hambaid saamist m\u00f5istsime, et ilma rakenduse modifitseerimiseta ei saa ikka hakkama ja l\u00fckkasime edasi edasised uuringud kuueks kuuks.<\/p>\n<h4>PG10: teine v\u00f5imalus<\/h4>\n<p>\nNii hakkasime probleeme j\u00e4rk-j\u00e4rgult lahendama:<\/p>\n<ol>\n<li>Kuna triggerid ja <code>ON CONFLICT<\/code> olid meil siiski vajalikud, koostasime vahendustabeli <b>proxy-tabeli<\/b>.<\/li>\n<li><b>Vabastasime end \u00abroutimisest\u00bb<\/b> triggerites\u2014ehk siis <code>TEOSTA<\/code>.<\/li>\n<li>Tootsime eraldi <b>\u0161abloontabeli k\u00f5igi indeksitega<\/b>, et need isegi proxy-tabelis puuduksid.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is valguskiirusel: 1 host, 1 p\u00e4ev, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/db3118798357575568489f6b575373b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nL\u00f5puks, p\u00e4rast kogu seda teed, saime kohandatud sektsiooniga peamise tabeli l\u00f5plikult k\u00fclge. Uue sektsiooni loomine j\u00e4i rakenduse vastutada.<\/p>\n<h4>\u00abLaitseme\u00bb s\u00f5nastikke<\/h4>\n<p>\nNagu igas anal\u00fc\u00fcsis\u00fcsteemis, olid meil ka <b>\u00abfaktid\u00bb ja \u00abl\u00f5ike\u00bb<\/b> (s\u00f5nastikud). Meie puhul oli n\u00e4ideteks n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/5XKbFb-l5Do?t=2487\">\u0161ablooni \u00abkeha\u00bb<\/a><\/noindex> \u00fchtlastest aeglastest p\u00e4ringutest v\u00f5i p\u00e4ringu enda tekstist.<\/p>\n<p>\u00abFaktid\u00bb olid meil p\u00e4evaste j\u00e4rgi juba ammu sektsioneeritud, seega eemaldasin rahulikult aegunud osad, nad ei seganud meid (logid ju!). Kuid s\u00f5nastikega tekkis probleeme\u2026<\/p>\n<p>Ei saa \u00f6elda, et neid oleks v\u00e4ga palju olnud, kuid umbes <b>100 TB \u00abfaktide\u00bb kohta saime s\u00f5nastiku suuruseks 2,5 TB.<\/b>. Sellisest tabelist ei olnud mugav midagi eemaldada, aeglaselt ja t\u00f5husalt, ning isegi andmete sisestamine muutus j\u00e4rjest aeglasemaks.<\/p>\n<p>Nagu ka s\u00f5nastik\u2026 igal salvestusel peaks olema t\u00e4pselt \u00fcks kord olemas\u2026 ja see on \u00f5ige, kuid! Keegi ei takista meid omamast <b>erinevat s\u00f5nastikku iga p\u00e4eva kohta<\/b>! Jah, see toob kaasa teatud \u00fclem\u00e4\u00e4rasuse, kuid v\u00f5imaldab:<\/p>\n<ul>\n<li><b>kirjutada\/looda kiiremini<\/b> v\u00e4iksema osade suuruse t\u00f5ttu<\/li>\n<li><b>tarbida v\u00e4hem m\u00e4lu<\/b> kompaktsemate indeksitega t\u00f6\u00f6tamise t\u00f5ttu<\/li>\n<li><b>hoida v\u00e4hem andmeid<\/b> aegunud kiire eemaldamise v\u00f5imaluse t\u00f5ttu<\/li>\n<\/ul>\n<p>\nKogu tegevuste komplekti tulemusena <b>CPU koormus v\u00e4henes ~30% ja kettakoormus ~50%<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is valguskiirusel: 1 host, 1 p\u00e4ev, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/fd3a219a304dc46173a7eb435502fe02.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSamas j\u00e4tkasime andmebaasi kirjutamist t\u00e4pselt sama, lihtsalt v\u00e4iksema koormusega.<\/p>\n<h2>#2. \u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0411\u0414<\/h2>\n<p>\nNii et, me j\u00f5udsime j\u00e4reldusele, et meil on <b>iga p\u00e4eva jaoks oma sektsioon<\/b> andmetega. Tegelikult, <code>CHECK (dt = '2018-10-12'::date)<\/code> \u2014 ja see on sektsioneerimise v\u00f5ti ning tingimus, mille kohaselt kirje satuvad konkreetse sektsiooni.<\/p>\n<p>Kuna k\u00f5ik meie teenuse aruanded koostatakse konkreetse kuup\u00e4eva l\u00f5ikes, siis olid ka seadmed juba \"mitte-sektsioneeritud aegadel\" k\u00f5ik t\u00fc\u00fcpi <i>(Server, <b>Kuup\u00e4ev<\/b>, Plaani mall)<\/i>, <i>(Server, <b>Kuup\u00e4ev<\/b>, Plaani s\u00f5lm)<\/i>, <i>(<b>Kuup\u00e4ev<\/b>, Veaklass, Server)<\/i>,\u2026<\/p>\n<p>Aga n\u00fc\u00fcd elavad igas sektsioonis <u>oma eksemplarid<\/u> iga sellise seadme kohta... Ja iga sektsiooni raames <u>kuup\u00e4ev on konstant<\/u>\u2026 Tundub, et n\u00fc\u00fcd kirjutame igasse sellesse seadmesse <b>t\u00fc\u00fcpiliselt konstant<\/b> \u00fche v\u00e4ljana, mis t\u00f5stab nii selle mahtu kui ka otsimise aega, kuid ei too mingeid tulemusi. J\u00e4tame endale ise probleemi, ups\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is valguskiirusel: 1 host, 1 p\u00e4ev, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/c7644644b960c568c4adaeec57cfef2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOptimeerimise suund on ilmselge \u2014 lihtsalt <b>eemaldame v\u00e4ljad kuup\u00e4eva k\u00f5ikidest seadmetest<\/b> sektsioneeritud tabelites. Meie mahtude puhul on kokkuhoid umbes <b>1TB\/n\u00e4dalas<\/b>!<\/p>\n<p>Ja n\u00fc\u00fcd m\u00e4rkame, et see terabait tuleb ka kuidagi salvestada. See t\u00e4hendab, et me peame n\u00fc\u00fcd <b>kettalt v\u00e4hem koormust v\u00f5tma<\/b>! Sellel pildil on h\u00e4sti n\u00e4htav saadud efekt l\u00e4bi viidud puhastusest, millele p\u00fchendasime n\u00e4dala:<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is valguskiirusel: 1 host, 1 p\u00e4ev, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/f45e3b26337074a07751ea28961009bf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>#3. \u00ab\u0420\u0430\u0437\u043c\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u00bb \u043f\u0438\u043a\u043e\u0432\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443<\/h2>\n<p>\n\u00dcks suur probleem koormatud s\u00fcsteemides on <b>\u00fclem\u00e4\u00e4rane s\u00fcnkroonimine<\/b> m\u00f5nede toimingute osas, mis seda ei n\u00f5ua. M\u00f5nikord \"sest ei m\u00e4rganud\", m\u00f5nikord \"niimoodi oli lihtsam\", kuid varem v\u00f5i hiljem tuleb sellest vabaneda.<\/p>\n<p>Suurendame eelmist pilti \u2014 ja n\u00e4eme, et meie ketas <b>\"t\u00f5mbab\" koormust kahekordse amplituudiga<\/b> k\u00f5rvuti olevate m\u00f5\u00f5tmiste vahel, mis \"statistiliselt\" ei tohiks olla sellise tegevuste arvu juures:<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is valguskiirusel: 1 host, 1 p\u00e4ev, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/ac3f19213cba0f111864c6dbf9a73912.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSeda on piisavalt lihtne saavutada. Meie j\u00e4lgimisel oli juba <b>peaaegu 1000 serverit<\/b>, iga\u00fcks t\u00f6\u00f6deldakse eraldi loogilise vooguna ja iga voog edastab kogunenud teabe andmebaasi teatud perioodilisusega, umbes nii:<\/p>\n<pre><code class=\"javascript\">setInterval(sendToDB, interval)<\/code><\/pre>\n<p>\nProbleem peitub just selles, et <b>k\u00f5ik voogud k\u00e4ivitatakse peaaegu samal ajal<\/b>, seega nende saatmise hetked langevad peaaegu alati kokku \"punkti\". Ups nr 2\u2026<\/p>\n<p>\u00d5nneks on seda piisavalt lihtne parandada, <b>lisades \"juhuslikku\" hajutust<\/b> ajaliselt:<\/p>\n<pre><code class=\"javascript\">setInterval(sendToDB, interval * (1 + 0.1 * (Math.random() - 0.5)))<\/code><\/pre>\n<p><\/p>\n<h2>#4. \u041a\u044d\u0448\u0438\u0440\u0443\u0435\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043c\u043e\u0436\u043d\u043e<\/h2>\n<p>\nKolmas traditsiooniline probleem k\u00f5rge koormusega \u2014 <b>v\u00e4hem koodi<\/b> seal, kus see <i>saaksin<\/i> peaks olema.<\/p>\n<p>N\u00e4iteks oleme teinud v\u00f5imaluse anal\u00fc\u00fcsida plaanide s\u00f5lmede l\u00f5ikes (k\u00f5ik need <code>Seq Skannimine kasutajate peal<\/code>), kuid kohe m\u00f5elda, et need on massiliselt sarnased \u2014 unustasid.<\/p>\n<p>Ei, muidugi ei kirjutata andmebaasi midagi uuesti, see katkestab triggereid <code>INSERT ... ON CONFLICT DO NOTHING<\/code>. Kuid andmed j\u00f5uavad andmebaasi ikka, ning lisaks sellele on \u00fcleliigne <b>lugemine konflikti kontrollimiseks<\/b> tuleb ikkagi teha. Ups \u21163...<\/p>\n<p>Erinevus andmebaasi saadetud kirjeid arvestades enne\/peale vahem\u00e4lude aktiveerimist \u2014 on ilmne:<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is valguskiirusel: 1 host, 1 p\u00e4ev, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/37fa7e64a674f03a79f2765a79ec8138.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJa see \u2014 kaasnev koormuse langus salvestis:<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is valguskiirusel: 1 host, 1 p\u00e4ev, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/b2c563b4b41755211e77768d80f8702f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Kokkuv\u00f5ttes<\/h2>\n<p>\n\u00abTerabaidid-p\u00e4evas\u00bb k\u00f5lab hirmu\u00e4ratavalt. Kui teete k\u00f5ik \u00f5igesti, siis on see vaid <b>2^40 baiti \/ 86400 sekundit = ~12.5MB\/s<\/b>, mida suutsid isegi lauaarvuti IDE-kettad. \ud83d\ude42<\/p>\n<p>Aga t\u00f5siselt r\u00e4\u00e4kides, isegi k\u00fcmnekordse koormuse \u201ekaldumise\u201c korral p\u00e4evas, saate rahulikult j\u00e4\u00e4da t\u00e4nap\u00e4evaste SSD-de v\u00f5imaluste piiresse.<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is valguskiirusel: 1 host, 1 p\u00e4ev, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/6f3f8d4636ba50f3d5401bf4e456757f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497008\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u00ab\u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435\u00bb \u0438\u0437 PostgreSQL-\u0431\u0430\u0437\u044b. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0436\u0435 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0411\u0414 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u00ab\u043a\u0440\u0443\u0442\u0438\u043b\u043e\u043a\u00bb \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0432 \u043f\u043e\u0442\u043e\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. #1. \u0421\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u0442\u043e, \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c \u0441\u0442\u043e\u0438\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0435 \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u00ab\u0432 \u0442\u0435\u043e\u0440\u0438\u0438\u00bb [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":79029,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-79028","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=\"\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u00ab\u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435\u00bb \u0438\u0437.\" \/>\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\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb\" \/>\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\u041f\u0438\u0448\u0435\u043c \u0432 PostgreSQL \u043d\u0430 \u0441\u0443\u0431\u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0439: 1 host, 1 day, 1TB | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u00ab\u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435\u00bb \u0438\u0437.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb\" \/>\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=\"2020-04-23T17:43:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-23T17:43:19+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\udd47Kirjutame PostgreSQL-is subvalguses: 1 host, 1 p\u00e4ev, 1TB | ProHoster","description":"Hiljuti r\u00e4\u00e4kisin, kuidas tavaliste retseptide abil suurendada SQL-p\u00e4ringute \u201elugemise\u201d j\u00f5udlust.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb","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\u041f\u0438\u0448\u0435\u043c \u0432 PostgreSQL \u043d\u0430 \u0441\u0443\u0431\u0441\u0432\u0435\u0442\u043e\u0432\u043e\u0439: 1 host, 1 day, 1TB | ProHoster","og:description":"\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u00ab\u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435\u00bb \u0438\u0437.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pishem-v-postgresql-na-subsvetovoj-1-host-1-day-1tb","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":"2020-04-23T17:43:19+00:00","article:modified_time":"2020-04-23T17:43:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"79028","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:46:34","updated":"2022-10-01 20:30:41","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\/79028","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=79028"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/79028\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/79029"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=79028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=79028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=79028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}