{"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 subluminaalses re\u017eiimis: 1 host, 1 p\u00e4ev, 1TB","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hiljuti r\u00e4\u00e4kisin, kuidas kasutada t\u00fc\u00fcpretsepte <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/tensor\/blog\/492694\/\">SQL-p\u00e4ringute \u201elugemise\u201d efektiivsuse suurendamiseks<\/a><\/noindex> PostgreSQL-andmebaasist. T\u00e4na r\u00e4\u00e4gime aga sellest, kuidas <b>saab andmebaasi kirjutamist t\u00f5husamaks muuta<\/b> ilma igasuguste \u201enuppudeta\u201d konfigureerimises \u2014 lihtsalt korraldades andmevooge \u00f5igesti.<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is subluminaalses re\u017eiimis: 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 tasub korraldada <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/483170\/\">rakenduslikku jaotust \u201eteoorias\u201d<\/a><\/noindex> on juba olnud, n\u00fc\u00fcd r\u00e4\u00e4gime m\u00f5ningate l\u00e4henemiste praktilisest rakendamisest meie <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487380\/\">saja PostgreSQL-serveri j\u00e4lgimise teenuses<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>\u00abKaugete aastate lood&#8230;\u00bb<\/h4>\n<p>\nAlguses, nagu iga MVP, alustas meie projekt suhteliselt v\u00e4hese koormusega \u2014 j\u00e4lgimine toimus ainult k\u00f5ige kriitilisemate serverite osas, k\u00f5ik tabelid olid v\u00f5rreldes kompaktsetes\u2026 Kuid aeg m\u00f6\u00f6dus, j\u00e4lgitavate hostide arv kasvas pidevalt ja p\u00fc\u00fcdes taas midagi teha \u00fche <b>1.5TB suuruse tabeliga<\/b>, m\u00f5istsime, et niimoodi elada on v\u00f5imalik, kuid siiski \u00e4\u00e4rmiselt ebamugav.<\/p>\n<p>Ajalood olid peaaegu m\u00fctoloogilised, PostgreSQL 9.x erinevad variandid olid p\u00e4evakajalised, seet\u00f5ttu tuli kogu sektsioneerimine teha \"k\u00e4e j\u00e4rgi\" \u2014 l\u00e4bi <b>tabelite p\u00e4rimise ja triggereid<\/b> d\u00fcnaamilise roolimisega <code>EXECUTE<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is subluminaalses re\u017eiimis: 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\u00f5igile tabelitele:<\/p>\n<ul>\n<li>Deklariti t\u00fchine \"pealkirja\" vanemtabel, kus kirjeldati k\u00f5iki <b>vajalikke indekseid ja triggereid<\/b>.<\/li>\n<li>Kliendi vaates tehti kirje \"juhtivas\" tabelis ja selle sees l\u00e4bi <b>roolimise triggereid<\/b> <code>BEFORE INSERT<\/code> kanne \u00abf\u00fc\u00fcsiliselt\u00bb pandi vajaliku sektsiooni. Kui sellist veel polnud \u2014 p\u00fc\u00fcdsime erandi ja &#8230;<\/li>\n<li>... abiga <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/492464\/\"><code>CREATE TABLE ... (LIKE ... INCLUDING ...)<\/code><\/a><\/noindex> vanematabeli j\u00e4rgi loodi <b>sektsioon, millel on piirang vajaliku kuup\u00e4eva j\u00e4rgi<\/b>, et andmete v\u00e4ljav\u00f5tmisel toimuks lugemine ainult seal.<\/li>\n<\/ul>\n<p><\/p>\n<h4>PG10: esimene katse<\/h4>\n<p>\nKuid p\u00e4rimise teel sektsioneerimine ei olnud ajalooliselt v\u00e4ga kohandatud aktiivse kirjutusvoo v\u00f5i suurt hulka lapssektsioone t\u00f6\u00f6tama. N\u00e4iteks v\u00f5ib meenutada, et vajaliku sektsiooni valimise algoritm oli <b>ruutkompleksne<\/b>, et kuna 100+ sektsiooniga t\u00f6\u00f6tab, te m\u00f5istate, kuidas ...<\/p>\n<p>PG10 on seda olukorda m\u00e4rgatavalt parandanud, rakendades toe <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgresql\/10\/ddl-partitioning\">p\u00f5hisektsioonile<\/a><\/noindex>. Seet\u00f5ttu proovisime seda kohe p\u00e4rast salvestusruumi migratsiooni rakendada, kuid ...<\/p>\n<p>Nagu selgus p\u00e4rast juhendi p\u00f5hjalikku uurimist, ei toeta natiivne sektsioneeritud tabel selle versiooni puhul:<\/p>\n<ul>\n<li>indeksite kirjeldamist<\/li>\n<li>triggereid<\/li>\n<li>ei saa olla kellegi 'p\u00e4rijaks'<\/li>\n<li>tugi <code>INSERT ... ON CONFLICT<\/code><\/li>\n<li>ei oska automaatselt sektsiooni luua<\/li>\n<\/ul>\n<p>\nP\u00e4rast valusalt ninal\u00f6\u00f6giga saamist taipasime, et rakenduse modifitseerimiseta ei p\u00e4\u00e4se, ja l\u00fckkasime edasised uuringud kuue kuu v\u00f5rra edasi.<\/p>\n<h4>PG10: teine v\u00f5imalus<\/h4>\n<p>\nNii alustasime tekkinud probleemide j\u00e4rkj\u00e4rgulist lahendamist:<\/p>\n<ol>\n<li>Kuna triggerid ja <code>ON CONFLICT<\/code> leik nagu olid siiski vajalikud, tegime nende t\u00f6\u00f6tlemiseks vahepealse <b>proksi-tabeli<\/b>.<\/li>\n<li><b>Vabastasime end 'redigeerimisest'<\/b> triggereid \u2014 see t\u00e4hendab <code>EXECUTE<\/code>.<\/li>\n<li>T\u00f5ime v\u00e4lja eraldi <b>malltabeli k\u00f5igi indeksitega<\/b>, et need ei oleks isegi proksi-tabelis.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is subluminaalses re\u017eiimis: 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 k\u00f5ike seda, on peamine tabel juba loomulikult sektsioonideks jagatud. Uue sektsiooni loomine j\u00e4\u00e4b siiski rakenduse hooleks.<\/p>\n<h4>\u201eTeeme\u201c s\u00f5naraamatuid<\/h4>\n<p>\nNagu igas anal\u00fc\u00fctilises s\u00fcsteemis, olid ka meil <b>\u201efaktid\u201c ja \u201earvutused\u201c<\/b> (s\u00f5naraamatud). Meie puhul esindasid seda n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/5XKbFb-l5Do?t=2487\">\u201emalli\u201c keha<\/a><\/noindex> \u00fchesuguseid aeglaseid p\u00e4ringuid v\u00f5i p\u00e4ringu teksti ennast.<\/p>\n<p>\u201eFaktid\u201c olid meil juba ammu p\u00e4evade kaupa eraldatud, seega kustutasime vananenud sektsioone rahulikult ning need ei seganud meid (logid ju!). Kuid s\u00f5naraamatute puhul tekkis probleem ...<\/p>\n<p>Ei saa \u00f6elda, et neid oleks olnud v\u00e4ga palju, kuid umbes <b>100TB \u201efaktide\u201c kohta sai 2.5TB s\u00f5naraamat.<\/b>Sellisest tabelist pole mugav midagi kustutada ega kokku suruda m\u00f5istliku ajaga, ja salvestamine muutus j\u00e4rjest aeglasemaks.<\/p>\n<p>Nagu s\u00f5naraamat ... igas kirjes peaks olema esindatud t\u00e4pselt \u00fcks kord ... ja see on \u00f5ige, aga ...! Keegi ei takista meid omamast <b>iga\u00fche kohta eraldi s\u00f5naraamatut<\/b>Jah, see toob kaasa teatud \u00fclem\u00e4\u00e4rasuse, kuid samas v\u00f5imaldab:<\/p>\n<ul>\n<li><b>kiiremini kirjutada\/ lugeda<\/b> v\u00e4iksema sektsiooni suuruse t\u00f5ttu<\/li>\n<li><b>kasutada v\u00e4hem m\u00e4lu<\/b> kompaktsemate indeksite t\u00f6\u00f6tamise t\u00f5ttu<\/li>\n<li><b>hoida v\u00e4hem andmeid<\/b> vana kergesti kustutamise v\u00f5imaluse t\u00f5ttu<\/li>\n<\/ul>\n<p>\nKogu tegevuste kompleksi tulemusena <b>CPU koormus v\u00e4henes umbes 30% ja kettakoormus 50%<\/b>:<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is subluminaalses re\u017eiimis: 1 host, 1 p\u00e4ev, 1TB\" src=\"\/wp-content\/uploads\/2020\/04\/fd3a219a304dc46173a7eb435502fe02.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJa samas j\u00e4tkasime andmebaasi kirjutamist just sama palju, 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 peatusime seal, et meil on <b>iga p\u00e4ev oma sektsioon<\/b> andmete jaoks. Nimelt, <code>CHECK (dt = '2018-10-12'::date)<\/code> \u2014 ja see on sektsioneerimise v\u00f5ti ja tingimus, mille alusel kantakse kirje konkreetsetesse sektsioonidesse.<\/p>\n<p>Kuna k\u00f5ik meie teenuse aruanded koostatakse konkreetse kuup\u00e4eva j\u00e4rgi, siis olid indeksid juba \u201eno-sektsioneerimise aegadest\u201c k\u00f5ik sellised, <i>(Server, <b>Astra Linux Special Editioni v\u00e4ljaanne<\/b>, Plaani mall)<\/i>, <i>(Server, <b>Astra Linux Special Editioni v\u00e4ljaanne<\/b>, Plaani s\u00f5lm)<\/i>, <i>(<b>Astra Linux Special Editioni v\u00e4ljaanne<\/b>, Veaklass, Server)<\/i>,\u2026<\/p>\n<p>Aga n\u00fc\u00fcd elavad igas sektsioonis <u>oma eksemplarid<\/u> iga sellise indeksi\u2026 Ja igas sektsioonis <u>kuup\u00e4ev on konstant<\/u>\u2026 Tuleb v\u00e4lja, et n\u00fc\u00fcd kirjutame sellesse indeksisse <b>lihtsalt konstant<\/b> \u00fche v\u00e4li kui, mis suurendab nii selle mahtu kui ka otsingu aega, kuid ei anna mingit tulemust. J\u00e4tsime endale konksud, ups\u2026<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is subluminaalses re\u017eiimis: 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>eemime kuup\u00e4eva v\u00e4lja k\u00f5ikidest indeksitest<\/b> jaotatud tabelites. Meie mahutavusega on s\u00e4\u00e4st - umbes <b>1TB\/n\u00e4dal<\/b>!<\/p>\n<p>Ja n\u00fc\u00fcd m\u00e4rkame, et selline terabaid tuleb ka kuidagi salvestada. See t\u00e4hendab, et me peame <b>kettale n\u00fc\u00fcd v\u00e4hem koormust panema<\/b>! Sellel pildil on h\u00e4sti n\u00e4ha saavutatud efekt meie n\u00e4dalase koristust\u00f6\u00f6 tulemusena:<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is subluminaalses re\u017eiimis: 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 suuremaid muresid koormatud s\u00fcsteemides on <b>\u00fclem\u00e4\u00e4rane s\u00fcnkroniseerimine<\/b> m\u00f5nedele tegevustele, mis ei n\u00f5ua seda. M\u00f5nikord \u00absest ei m\u00e4rganud\u00bb, m\u00f5nikord \u00aboli lihtsam\u00bb, kuid varem v\u00f5i hiljem tuleb sellest lahti saada.<\/p>\n<p>Suureme oma eelmist pilti l\u00e4hemale - ja n\u00e4eme, et meie ketas <b>\u00abt\u00f5mbab\u00bb koormust kahekordse amplituudiga<\/b> naabrite vahepealsete m\u00f5\u00f5tmiste vahel, mis selgelt ei peaks olema \u00abstatistiliselt\u00bb sellise tegevuste hulga juures:<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is subluminaalses re\u017eiimis: 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\u00e4relevalvesse on juba <b>peaaegu 1000 serverit<\/b>, iga\u00fcks t\u00f6\u00f6tlemisel eraldi loogilise voona, ning iga voog eemaldab kogutud teabe saatmiseks andmebaasi kindla perioodsusega, enam-v\u00e4hem nii:<\/p>\n<pre><code class=\"javascript\">setInterval(sendToDB, interval)<\/code><\/pre>\n<p>\nProbleem peitub just selles, <b>k\u00f5ik voolud algavad umbes samal ajal<\/b>, seega on saatmishetked peaaegu alati \u00fchteaegu \"kuni punktini\". Ups nr 2\u2026<\/p>\n<p>\u00d5nneks on seda lihtne parandada, <b>lisades \"juhusliku\" hajutuse<\/b> aja jooksul:<\/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 koormuse puhul \u2014 <b>vahem\u00e4lu puudumine<\/b> seal, kus see <i>v\u00f5iks<\/i> olla.<\/p>\n<p>N\u00e4iteks oleme teinud anal\u00fc\u00fcsi v\u00f5imaliku plaani s\u00f5lmede l\u00f5ikes (k\u00f5ik need <code>Seq Scan on users<\/code>), kuid kohe m\u00f5tlema, et need on massiliselt sarnased \u2014 unustatud.<\/p>\n<p>Ei, loomulikult, andmeid ei kirjutata andmebaasi uuesti, see katkestab trigeri <code>INSERT ... ON CONFLICT DO NOTHING<\/code>. Kuid andmed j\u00f5uavad andmebaasi ikkagi, ja peame tegema \u00fcleliigset <b>lugemist konfliktide kontrollimiseks.<\/b> Ups nr 3\u2026<\/p>\n<p>Erinevus andmebaasi saadetavate rekordite arvus enne\/p\u00e4rast vahem\u00e4lu sissel\u00fclitamist \u2014 on ilmne:<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is subluminaalses re\u017eiimis: 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 kaasneva koormuse langus salvestusruumis:<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is subluminaalses re\u017eiimis: 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>Kokku<\/h2>\n<p>\n\"Terabait-p\u00e4evas\" k\u00f5lab lihtsalt hirmu\u00e4ratavalt. Kui teete k\u00f5ike \u00f5igesti, siis on see ainult <b>2^40 baiti \/ 86400 sekundit = ~12.5MB\/s<\/b>, mida suudavad isegi lauaarvutite IDE-kettad. \ud83d\ude42<\/p>\n<p>Ja kui t\u00f5siselt r\u00e4\u00e4kida, siis isegi k\u00fcmnekordse koormuse eba\u00fchtluse korral p\u00e4eva jooksul saate rahulikult osaleda t\u00e4nap\u00e4evaste SSD-de v\u00f5imalustes.<\/p>\n<p><img decoding=\"async\" alt=\"Kirjutame PostgreSQL-is subluminaalses re\u017eiimis: 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 4.9.10 - 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 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\" \/>\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) 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\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 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\" \/>\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-s \u00fcliosaliselt: 1 host, 1 p\u00e4ev, 1TB | ProHoster","description":"Hiljuti r\u00e4\u00e4kisin, kuidas t\u00fc\u00fcpiliste retseptide abil suurendada PostgreSQL andmebaasist p\u00e4ringute \"lugemise\" tulemuslikkust. T\u00e4na r\u00e4\u00e4gime sellest, kuidas teha andmete kirjutamine andmebaasi efektiivsemaks, ilma et kasutaksime mingeid \"nuppude keeramisi\" konfiguratsioonis \u2014 vaid \u00f5igesti korraldades andmevooge. #1. Sektsioneerimine Artikkel selle kohta, kuidas ja miks on m\u00f5istlik korraldada rakenduslikule sektsioneerimise \"teooria\".","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 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","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"},"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}]}}