{"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\/hu\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej","title":{"rendered":"Adatb\u00e1zis-lek\u00e9rdez\u00e9sek optimaliz\u00e1l\u00e1sa egy B2B szolg\u00e1ltat\u00e1s p\u00e9ld\u00e1j\u00e1n \u00e9p\u00edtkez\u0151k sz\u00e1m\u00e1ra","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hogyan lehet t\u00edzszeres\u00e9re n\u00f6velni az adatb\u00e1zis-lek\u00e9rdez\u00e9sek sz\u00e1m\u00e1t an\u00e9lk\u00fcl, hogy nagyobb teljes\u00edtm\u00e9ny\u0171 szerverre kellene v\u00e1ltani, mik\u00f6zben a rendszer m\u0171k\u00f6d\u0151k\u00e9pess\u00e9g\u00e9t meg\u0151rizz\u00fck? Elmondom, hogyan k\u00fczd\u00f6tt\u00fcnk az adatb\u00e1zisunk teljes\u00edtm\u00e9nycs\u00f6kken\u00e9s\u00e9vel, \u00e9s hogyan optimaliz\u00e1ltuk az SQL lek\u00e9rdez\u00e9seket \u00fagy, hogy min\u00e9l t\u00f6bb felhaszn\u00e1l\u00f3t szolg\u00e1lhassunk ki an\u00e9lk\u00fcl, hogy n\u00f6veln\u00e9nk a sz\u00e1m\u00edt\u00e1si er\u0151forr\u00e1sokra ford\u00edtott k\u00f6lts\u00e9geket.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n\u00c9n egy szolg\u00e1ltat\u00e1st k\u00e9sz\u00edtek az \u00e9p\u00edt\u0151ipari v\u00e1llalatok \u00fczleti folyamataik kezel\u00e9s\u00e9re. K\u00f6r\u00fclbel\u00fcl 3000 c\u00e9g dolgozik vel\u00fcnk. T\u00f6bb mint 10 000 ember haszn\u00e1lja naponta a rendszer\u00fcnket 4-10 \u00f3r\u00e1n kereszt\u00fcl. K\u00fcl\u00f6nb\u00f6z\u0151 feladatokat old meg, mint p\u00e9ld\u00e1ul tervez\u00e9s, \u00e9rtes\u00edt\u00e9s, figyelmeztet\u00e9s, \u00e9s valid\u00e1l\u00e1s\u2026 A PostgreSQL 9.6-ot haszn\u00e1ljuk. Az adatb\u00e1zisunkban k\u00f6r\u00fclbel\u00fcl 300 t\u00e1bla tal\u00e1lhat\u00f3, \u00e9s naponta ak\u00e1r 200 milli\u00f3 lek\u00e9rdez\u00e9s \u00e9rkezik (10 ezer k\u00fcl\u00f6nb\u00f6z\u0151). \u00c1tlagosan 3-4 ezer lek\u00e9rdez\u00e9s\u00fcnk van m\u00e1sodpercenk\u00e9nt, a legakt\u00edvabb id\u0151szakokban pedig t\u00f6bb mint 10 ezer lek\u00e9rdez\u00e9s m\u00e1sodpercenk\u00e9nt. A lek\u00e9rdez\u00e9sek nagy r\u00e9sze OLAP jelleg\u0171. Az \u00faj adatok hozz\u00e1ad\u00e1sa, m\u00f3dos\u00edt\u00e1sa \u00e9s t\u00f6rl\u00e9se sokkal kevesebb, teh\u00e1t az OLTP terhel\u00e9s viszonylag kicsi. Mindezeket a sz\u00e1mokat az\u00e9rt hoztam, hogy fel tudja m\u00e9rni a projekt\u00fcnk m\u00e9ret\u00e9t \u00e9s meg\u00e9rthesse, milyen hasznos lehet a tapasztalatunk az \u00d6n sz\u00e1m\u00e1ra.<\/p>\n<h3>Els\u0151 k\u00e9p. L\u00edrai<\/h3>\n<p>\nAmikor elkezdt\u00fck a fejleszt\u00e9st, nem k\u00fcl\u00f6n\u00f6sebben foglalkoztunk azzal, hogy mekkora terhel\u00e9s nehezedik az adatb\u00e1zisra, \u00e9s hogy mit fogunk tenni, ha a szerver nem b\u00edrja a terhel\u00e9st. Az adatb\u00e1zis tervez\u00e9sekor a \u00e1ltal\u00e1nos aj\u00e1nl\u00e1sokat k\u00f6vett\u00fck, \u00e9s igyekezt\u00fcnk elker\u00fclni a saj\u00e1t magunk ellen elk\u00f6vetett hib\u00e1kat, de ezen t\u00falmen\u0151en, olyan \u00e1ltal\u00e1nos tan\u00e1csok mint p\u00e9ld\u00e1ul az, hogy \u201ene haszn\u00e1lj mint\u00e1t, <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Entity%E2%80%93attribute%E2%80%93value_model\">Entity Attribute Values<\/a><\/noindex> nem ment\u00fcnk tov\u00e1bb. A normaliz\u00e1l\u00e1s elveit figyelembe v\u00e9ve tervezt\u00fcnk, elker\u00fclve az adatduplik\u00e1l\u00f3d\u00e1st, \u00e9s nem t\u00f6r\u0151dt\u00fcnk a k\u00fcl\u00f6nb\u00f6z\u0151 lek\u00e9rdez\u00e9sek gyors\u00edt\u00e1s\u00e1val. Ahogy meg\u00e9rkeztek az els\u0151 felhaszn\u00e1l\u00f3k, a teljes\u00edtm\u00e9nnyel kapcsolatos probl\u00e9m\u00e1val tal\u00e1lkoztunk. Mint mindig, teljesen felk\u00e9sz\u00fcletlen\u00fcl \u00e1lltunk a helyzethez. Az els\u0151 probl\u00e9m\u00e1k viszonylag egyszer\u0171ek voltak. \u00c1ltal\u00e1ban \u00faj indexek hozz\u00e1ad\u00e1s\u00e1val oldottuk meg \u0151ket. De el\u00e9rkezett az id\u0151, amikor az egyszer\u0171 megold\u00e1sok meg\u00e1lltak. Felismerve, hogy a tapasztalataink hi\u00e1nyoznak \u00e9s egyre nehezebb meg\u00e9rteni a probl\u00e9m\u00e1k ok\u00e1t, szak\u00e9rt\u0151ket h\u00edvtunk, akik seg\u00edtettek nek\u00fcnk megfelel\u0151en be\u00e1ll\u00edtani a szervert, csatlakoztatni a megfigyel\u00e9st, \u00e9s megmutatt\u00e1k, hov\u00e1 \u00e9rdemes figyelni, hogy <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/9.6\/pgstatstatements.html\">statisztik\u00e1t<\/a><\/noindex>.<\/p>\n<h3>m\u00e1sodik k\u00e9p. Statisztikai<\/h3>\n<p>\nTeh\u00e1t naponta k\u00f6r\u00fclbel\u00fcl 10 ezer k\u00fcl\u00f6nb\u00f6z\u0151 lek\u00e9rdez\u00e9s fut a rendszer\u00fcnk adatb\u00e1zis\u00e1ban. Ezek k\u00f6z\u00fcl a 10 ezer k\u00f6z\u00fcl vannak \u00f3ri\u00e1sok, amelyek 2-3 milli\u00f3 alkalommal futnak, \u00e1tlagosan 0,1-0,3 ms v\u00e9grehajt\u00e1si id\u0151vel, \u00e9s vannak olyan lek\u00e9rdez\u00e9sek, amelyeknek az \u00e1tlagos v\u00e9grehajt\u00e1si ideje 30 m\u00e1sodperc, \u00e9s napi 100 alkalommal h\u00edvj\u00e1k meg \u0151ket.<\/p>\n<p>Mivel lehetetlen volt optimaliz\u00e1lni az \u00f6sszes 10 ezer lek\u00e9rdez\u00e9st, \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy megtudjuk, hov\u00e1 ir\u00e1ny\u00edtsuk az er\u0151fesz\u00edt\u00e9seinket a megfelel\u0151 adatb\u00e1zis teljes\u00edtm\u00e9ny jav\u00edt\u00e1sa \u00e9rdek\u00e9ben. N\u00e9h\u00e1ny iter\u00e1ci\u00f3 ut\u00e1n elkezdt\u00fck a lek\u00e9rdez\u00e9seket t\u00edpusok szerint kategoriz\u00e1lni.<\/p>\n<h4>TOP lek\u00e9rdez\u00e9sek<\/h4>\n<p>\nEzek a legnehezebb lek\u00e9rdez\u00e9sek, amelyek a legt\u00f6bb id\u0151t (teljes id\u0151) ig\u00e9nylik. Ezek olyan lek\u00e9rdez\u00e9sek, amelyeket vagy nagyon gyakran h\u00edvnak meg, vagy nagyon hossz\u00fa ideig futnak (a hossz\u00fa \u00e9s gyakori lek\u00e9rdez\u00e9seket m\u00e1r az els\u0151 iter\u00e1ci\u00f3k sor\u00e1n optimaliz\u00e1ltuk a sebess\u00e9g n\u00f6vel\u00e9se \u00e9rdek\u00e9ben). Ennek eredm\u00e9nyek\u00e9nt a szerver \u00f6sszess\u00e9g\u00e9ben a legt\u00f6bb id\u0151t ezek v\u00e9grehajt\u00e1s\u00e1ra ford\u00edtja. Fontos megk\u00fcl\u00f6nb\u00f6ztetni a TOP lek\u00e9rdez\u00e9seket a teljes v\u00e9grehajt\u00e1si id\u0151 \u00e9s az IO id\u0151 alapj\u00e1n. Az ilyen lek\u00e9rdez\u00e9sek optimaliz\u00e1l\u00e1s\u00e1nak m\u00f3dszerei kiss\u00e9 elt\u00e9r\u0151ek.<\/p>\n<p>Minden c\u00e9g szok\u00e1sos gyakorlata a TOP lek\u00e9rdez\u00e9sek kezel\u00e9se. Ezekb\u0151l van n\u00e9h\u00e1ny, egyetlen lek\u00e9rdez\u00e9s optimaliz\u00e1l\u00e1sa ak\u00e1r 5-10% -os er\u0151forr\u00e1st is felszabad\u00edthat. Azonban a projekt \u201e\u00e9letkor\u00e1val\u201d az ilyen lek\u00e9rdez\u00e9sek optimaliz\u00e1l\u00e1sa egyre bonyolultabb feladatt\u00e1 v\u00e1lik. Minden egyszer\u0171 megold\u00e1st m\u00e1r alkalmaztak, \u00e9s a leg \u201eneh\u00e9z\u201d lek\u00e9rdez\u00e9s is csak 3-5% -os er\u0151forr\u00e1st ig\u00e9nyel. Ha a TOP lek\u00e9rdez\u00e9sek \u00f6sszesen kevesebb mint 30-40% -ot haszn\u00e1lnak, akkor val\u00f3sz\u00edn\u0171leg m\u00e1r tett er\u0151fesz\u00edt\u00e9seket, hogy gyorsan m\u0171k\u00f6djenek, \u00e9s itt az ideje \u00e1tt\u00e9rni a k\u00f6vetkez\u0151 csoport lek\u00e9rdez\u00e9seinek optimaliz\u00e1l\u00e1s\u00e1ra.<br \/>\nM\u00e9g v\u00e1laszolni kell a k\u00e9rd\u00e9sre, h\u00e1ny fels\u0151 lek\u00e9rdez\u00e9st \u00e9rdemes belevonni ebbe a csoportba. \u00c1ltal\u00e1ban nem kevesebb mint 10, de nem t\u00f6bb mint 20 lek\u00e9rdez\u00e9st szoktam figyelembe venni. Megpr\u00f3b\u00e1lom \u00fagy alak\u00edtani, hogy az els\u0151 \u00e9s az utols\u00f3 a TOP csoportban ne t\u00e9rjen el 10-szeresn\u00e9l t\u00f6bbel. Teh\u00e1t, ha a lek\u00e9rdez\u00e9sek v\u00e9grehajt\u00e1si ideje dr\u00e1maian cs\u00f6kken az 1. helyr\u0151l a 10. helyre, akkor a TOP-10-be sorolom, ha a cs\u00f6kken\u00e9s fokozatosabb, akkor a csoport m\u00e9ret\u00e9t 15-re vagy 20-ra n\u00f6velem.<br \/>\n<img decoding=\"async\" alt=\"Adatb\u00e1zis-lek\u00e9rdez\u00e9sek optimaliz\u00e1l\u00e1sa egy B2B szolg\u00e1ltat\u00e1s p\u00e9ld\u00e1j\u00e1n \u00e9p\u00edtkez\u0151k sz\u00e1m\u00e1ra\" src=\"\/wp-content\/uploads\/2019\/08\/2a9d9e6053d1aebb71aa213757bd2393.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>K\u00f6z\u00e9ps\u0151k (medium)<\/h4>\n<p>\nEzek azok a lek\u00e9rdez\u00e9sek, amelyek k\u00f6zvetlen\u00fcl a TOP ut\u00e1n k\u00f6vetkeznek, kiv\u00e9ve az utols\u00f3 5-10%-ot. \u00c1ltal\u00e1ban ezek a lek\u00e9rdez\u00e9sek optimaliz\u00e1l\u00e1sa rejti mag\u00e1ban a szerver teljes\u00edtm\u00e9ny\u00e9nek jelent\u0151s n\u00f6vel\u00e9s\u00e9nek lehet\u0151s\u00e9g\u00e9t. Ezek a lek\u00e9rdez\u00e9sek ak\u00e1r 80%-ot is \u201enyomhatnak\u201d. De m\u00e9g ha a r\u00e9szar\u00e1nyuk meghaladja az 50%-ot is, akkor ideje r\u00e1juk figyelmesebben n\u00e9zni.<\/p>\n<h4>Farok (tail)<\/h4>\n<p>\nAhogy mondtuk, ezek a lek\u00e9rdez\u00e9sek a v\u00e9g\u00e9n vannak, \u00e9s 5-10%-ot ig\u00e9nyelnek az id\u0151b\u0151l. R\u00e1juk csak akkor lehet elfelejteni, ha nem haszn\u00e1l automatikus lek\u00e9rdez\u00e9selemz\u0151 eszk\u00f6z\u00f6ket, akkor az optimaliz\u00e1l\u00e1s is olcs\u00f3n megoldhat\u00f3.<\/p>\n<p>Hogyan \u00e9rt\u00e9kelj\u00fcnk minden egyes csoportot?<\/p>\n<p>SQL lek\u00e9rdez\u00e9st haszn\u00e1lok, amely seg\u00edt az ilyen \u00e9rt\u00e9kel\u00e9s elk\u00e9sz\u00edt\u00e9s\u00e9ben PostgreSQL eset\u00e9n (biztos vagyok benne, hogy sok m\u00e1s DBMS-hez is \u00edrhat\u00f3 hasonl\u00f3 lek\u00e9rdez\u00e9s).<\/p>\n<p><b class=\"spoiler_title\">SQL lek\u00e9rdez\u00e9s a TOP-MEDIUM-TAIL csoportok m\u00e9ret\u00e9nek \u00e9rt\u00e9kel\u00e9s\u00e9re.<\/b><\/p>\n<pre><code class=\"sql\">SELECT sum(time_top) AS sum_top, sum(time_medium) AS sum_medium, sum(time_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>A lek\u00e9rdez\u00e9s eredm\u00e9nye h\u00e1rom oszlop, amelyek mindegyike tartalmazza a lek\u00e9rdez\u00e9sek kezel\u00e9s\u00e9re ford\u00edtott id\u0151 sz\u00e1zal\u00e9k\u00e1t ebb\u0151l a csoportb\u00f3l. A lek\u00e9rdez\u00e9sen bel\u00fcl k\u00e9t sz\u00e1m tal\u00e1lhat\u00f3 (az \u00e9n esetemben ez 20 \u00e9s 800), amelyek elv\u00e1lasztj\u00e1k az egyik csoport lek\u00e9rdez\u00e9seit a m\u00e1sikt\u00f3l.<\/p>\n<p>\u00cdgy k\u00f6r\u00fclbel\u00fcl \u00edgy ar\u00e1nylanak a lek\u00e9rdez\u00e9sek ar\u00e1nyai az optimaliz\u00e1l\u00e1si munk\u00e1k megkezd\u00e9sekor \u00e9s most.<\/p>\n<p><img decoding=\"async\" alt=\"Adatb\u00e1zis-lek\u00e9rdez\u00e9sek optimaliz\u00e1l\u00e1sa egy B2B szolg\u00e1ltat\u00e1s p\u00e9ld\u00e1j\u00e1n \u00e9p\u00edtkez\u0151k sz\u00e1m\u00e1ra\" src=\"\/wp-content\/uploads\/2019\/08\/9c70ad9aba8b835c94729c9dda656eab.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA diagramr\u00f3l l\u00e1tszik, hogy a TOP lek\u00e9rdez\u00e9sek ar\u00e1nya \u00e9lesen cs\u00f6kkent, viszont n\u00f6vekedtek a \u201ek\u00f6z\u00e9ps\u0151k\u201d.<br \/>\nKezdetben a TOP lek\u00e9rdez\u00e9sek k\u00f6z\u00e9 nyilv\u00e1nval\u00f3 hib\u00e1k ker\u00fcltek. Id\u0151vel a gyermekbetegs\u00e9gek elt\u0171ntek, a TOP lek\u00e9rdez\u00e9sek ar\u00e1nya cs\u00f6kkent, egyre nagyobb er\u0151fesz\u00edt\u00e9seket kellett tenn\u00fcnk a neh\u00e9z lek\u00e9rdez\u00e9sek felgyors\u00edt\u00e1s\u00e1hoz. <\/p>\n<p><b class=\"spoiler_title\">A lek\u00e9rdez\u00e9sek sz\u00f6veg\u00e9nek lek\u00e9r\u00e9s\u00e9re a k\u00f6vetkez\u0151 lek\u00e9rdez\u00e9st haszn\u00e1ljuk:<\/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>\u00cdme a leggyakrabban haszn\u00e1lt m\u00f3dszerek list\u00e1ja, amelyek seg\u00edtettek nek\u00fcnk a TOP lek\u00e9rdez\u00e9sek felgyors\u00edt\u00e1s\u00e1ban:<\/p>\n<ul>\n<li>A rendszer \u00fajratervez\u00e9se, p\u00e9ld\u00e1ul a hirdet\u00e9si logika \u00fajraszervez\u00e9se \u00fczenetkezel\u0151n kereszt\u00fcl ahelyett, hogy id\u0151szakos lek\u00e9rdez\u00e9seket v\u00e9gezn\u00e9nk az adatb\u00e1zison.<\/li>\n<li>Indexek hozz\u00e1ad\u00e1sa vagy m\u00f3dos\u00edt\u00e1sa.<\/li>\n<li>ORM lek\u00e9rdez\u00e9sek \u00e1t\u00edr\u00e1sa tiszta SQL-re.<\/li>\n<li>A k\u00e9sleltetett adatok bet\u00f6lt\u00e9s\u00e9nek logik\u00e1j\u00e1nak \u00e1t\u00edr\u00e1sa.<\/li>\n<li>Adatok denormaliz\u00e1l\u00e1s\u00e1n kereszt\u00fcli caching. P\u00e9ld\u00e1ul van egy kapcsolat a t\u00e1bl\u00e1k k\u00f6z\u00f6tt: Sz\u00e1ll\u00edt\u00e1s -&gt; Sz\u00e1mla -&gt; Lek\u00e9rdez\u00e9s -&gt; K\u00e9relem. Azaz minden sz\u00e1ll\u00edt\u00e1s kapcsol\u00f3dik a k\u00e9relemhez m\u00e1s t\u00e1bl\u00e1kon kereszt\u00fcl. Annak \u00e9rdek\u00e9ben, hogy ne kelljen minden lek\u00e9rdez\u00e9sben \u00f6sszekapcsolni az \u00f6sszes t\u00e1bl\u00e1t, a k\u00e9relmet a Sz\u00e1ll\u00edt\u00e1s t\u00e1bl\u00e1ban is duplik\u00e1ltuk.<\/li>\n<li>A statikus t\u00e1bl\u00e1k gyors\u00edt\u00f3t\u00e1raz\u00e1sa a program mem\u00f3ri\u00e1j\u00e1ban l\u00e9v\u0151 ad\u00f3kkal \u00e9s ritk\u00e1n v\u00e1ltoz\u00f3 t\u00e1bl\u00e1kkal.<\/li>\n<\/ul>\n<p>\nN\u00e9ha a v\u00e1ltoztat\u00e1sok jelent\u0151s \u00e1talak\u00edt\u00e1st ig\u00e9nyeltek, de 5-10%-os rendszerleterhel\u00e9st eredm\u00e9nyeztek, \u00edgy igazolt\u00e1k magukat. Id\u0151vel a haszon egyre cs\u00f6kkent, \u00e9s az \u00e1talak\u00edt\u00e1s egyre komolyabb\u00e1 v\u00e1lt.<\/p>\n<p>Ekkor figyelt\u00fcnk fel a m\u00e1sodik k\u00e9rd\u00e9scsoport, a k\u00f6z\u00e9pszer\u0171ek csoportj\u00e1ra. Sokkal t\u00f6bb k\u00e9rd\u00e9s volt benne, \u00e9s \u00fagy t\u0171nt, hogy az eg\u00e9sz csoport elemz\u00e9s\u00e9re rengeteg id\u0151 fog elmenni. Azonban a legt\u00f6bb k\u00e9rd\u00e9s nagyon egyszer\u0171 volt az optimaliz\u00e1l\u00e1s szempontj\u00e1b\u00f3l, \u00e9s sok probl\u00e9ma t\u00f6bbsz\u00f6r is el\u0151fordult k\u00fcl\u00f6nb\u00f6z\u0151 vari\u00e1ci\u00f3kban. \u00cdme, n\u00e9h\u00e1ny tipikus optimaliz\u00e1ci\u00f3s p\u00e9lda, amelyet hasonl\u00f3 k\u00e9rd\u00e9sek tucatjaira alkalmaztunk, mindegyik optimaliz\u00e1lt k\u00e9rd\u00e9scsoport 3-5%-kal cs\u00f6kkentette az adatb\u00e1zis terhel\u00e9s\u00e9t.<\/p>\n<ul>\n<li> A COUNT haszn\u00e1lata helyett a rekordok megl\u00e9t\u00e9nek ellen\u0151rz\u00e9s\u00e9re az EXISTS haszn\u00e1lat\u00e1ra v\u00e1ltottunk.\n <\/li>\n<li>Megszabadultunk a DISTINCT-t\u0151l (nincs \u00e1ltal\u00e1nos recept, de n\u00e9ha k\u00f6nny\u0171 lemondani r\u00f3la, \u00e9s ezzel 10-100-szor gyors\u00edtani a lek\u00e9rdez\u00e9st).\n<p>P\u00e9ld\u00e1ul a nagym\u00e9ret\u0171 DELIVERY t\u00e1bl\u00e1b\u00f3l az \u00f6sszes sof\u0151r kiv\u00e1laszt\u00e1s\u00e1ra sz\u00e1nt lek\u00e9rdez\u00e9s helyett. <\/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>\na RELATIVELY SMALL PERSON t\u00e1bl\u00e1ra \u00e1ll\u00edtottuk a lek\u00e9rdez\u00e9st.<\/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>\n\u00dagy t\u0171nik, hogy korrel\u00e1l\u00f3 alm\u0171veket haszn\u00e1ltunk, de ez t\u00f6bb mint 10-szer gyorsabb eredm\u00e9nyt ad.\n <\/li>\n<li>Sok esetben teljesen lemondtunk a COUNT-r\u00f3l \u00e9s <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.citusdata.com\/blog\/2016\/10\/12\/count-performance\/#dup_counts_estimated_filtered\">helyette egy k\u00f6zel\u00edt\u0151 \u00e9rt\u00e9k sz\u00e1m\u00edt\u00e1s\u00e1t alkalmaztuk.<\/a><\/noindex>\n <\/li>\n<li>$CI_COMMIT_TAG\n<pre><code class=\"sql\">UPPER(s) LIKE JOHN%\u2019 \n<\/code><\/pre>\n<p>\nhaszn\u00e1lunk <\/p>\n<pre><code class=\"sql\">s ILIKE 'John%'\n<\/code><\/pre>\n<p>\n <\/li>\n<\/ul>\n<p>\nMinden egyes konkr\u00e9t lek\u00e9rdez\u00e9snek siker\u00fclt olykor 3-1000-szer gyorsabb\u00e1 tenni. A leny\u0171g\u00f6z\u0151 mutat\u00f3k ellen\u00e9re kezdetben nem t\u0171nt \u00e9rtelmesnek egy olyan lek\u00e9rdez\u00e9s optimaliz\u00e1l\u00e1sa, amely 10 ms-ot vesz ig\u00e9nybe, a legnehezebb lek\u00e9rdez\u00e9sek harmadik sz\u00e1zad\u00e1nak r\u00e9sze, \u00e9s az adatb\u00e1zis \u00f6sszes terhel\u00e9s\u00e9nek csup\u00e1n ezredm\u00e1sodperc\u00e9t k\u00e9pviseli. De ugyanazt a receptet alkalmazva hasonl\u00f3 lek\u00e9rdez\u00e9sek csoportjaira, n\u00e9h\u00e1ny sz\u00e1zal\u00e9kot nyert\u00fcnk. An\u00e9lk\u00fcl, hogy id\u0151t pazaroltunk volna az \u00f6sszes sz\u00e1z lek\u00e9rdez\u00e9s k\u00e9zi \u00e1tn\u00e9z\u00e9s\u00e9re, \u00edrtunk n\u00e9h\u00e1ny egyszer\u0171 szkriptet, amelyek regul\u00e1ris kifejez\u00e9sekkel azonos\u00edtott\u00e1k a hasonl\u00f3 lek\u00e9rdez\u00e9seket. V\u00e9g\u00fcl az automatikus lek\u00e9rdez\u00e9scsoportra vonatkoz\u00f3 keres\u00e9s m\u00e9g ink\u00e1bb n\u00f6velte a teljes\u00edtm\u00e9ny\u00fcnket, csek\u00e9ly er\u0151fesz\u00edt\u00e9ssel.<\/p>\n<p>M\u00e1r h\u00e1rom \u00e9ve dolgozunk ugyanazon a hardveren. Az \u00e1tlagos napi terhel\u00e9s k\u00f6r\u00fclbel\u00fcl 30%, a cs\u00facsok sor\u00e1n 70%-ig is el\u00e9rheti. A lek\u00e9rdez\u00e9sek sz\u00e1ma \u00e9s a felhaszn\u00e1l\u00f3k sz\u00e1ma k\u00f6r\u00fclbel\u00fcl t\u00edzszeres\u00e9re n\u0151tt. Mindez a TOP-MEDIUM lek\u00e9rdez\u00e9si csoportok folyamatos figyel\u00e9s\u00e9nek k\u00f6sz\u00f6nhet\u0151. Amint \u00faj lek\u00e9rdez\u00e9s jelenik meg a TOP csoportban, azonnal elemezz\u00fck \u00e9s pr\u00f3b\u00e1ljuk felgyors\u00edtani. A MEDIUM csoportot hetente egyszer, lek\u00e9rdez\u00e9s-elemz\u0151 szkriptek seg\u00edts\u00e9g\u00e9vel n\u00e9zz\u00fck \u00e1t. Ha \u00faj lek\u00e9rdez\u00e9seket tal\u00e1lunk, amelyeket m\u00e1r tudunk optimaliz\u00e1lni, akkor gyorsan v\u00e1ltoztatunk rajtuk. N\u00e9ha \u00faj optimaliz\u00e1l\u00e1si m\u00f3dokat tal\u00e1lunk, amelyeket t\u00f6bb lek\u00e9rdez\u00e9sre is azonnal alkalmazhatunk. <\/p>\n<p>A becsl\u00e9seink szerint a jelenlegi szerver k\u00e9pes a felhaszn\u00e1l\u00f3k sz\u00e1m\u00e1nak 3-5-sz\u00f6r\u00f6s n\u00f6veked\u00e9s\u00e9t elviselni. Igaz, hogy van m\u00e9g egy \u00fct\u0151lap a kez\u00fcnkben - m\u00e9g mindig nem \u00e1ll\u00edtottuk \u00e1t a SELECT lek\u00e9rdez\u00e9seket t\u00fckr\u00f6z\u00e9sre, ahogy javasolj\u00e1k. De ezt sz\u00e1nd\u00e9kosan nem tessz\u00fck, mert el\u0151sz\u00f6r ki akarjuk akn\u00e1zni a 'intelligens' optimaliz\u00e1l\u00e1s lehet\u0151s\u00e9geit, miel\u0151tt bevezetn\u00e9nk a 'neh\u00e9z t\u00fcz\u00e9rs\u00e9get'.<br \/>\nA munk\u00e1nk kritikus szeml\u00e9l\u00e9se arra utalhat, hogy \u00e9rdemes lenne f\u00fcgg\u0151leges sk\u00e1l\u00e1z\u00e1st alkalmazni. Er\u0151sebb szervert venni, ahelyett, hogy id\u0151t pazaroln\u00e1nk a szakembereinkre. Egy szerver nem felt\u00e9tlen\u00fcl dr\u00e1ga, tekintettel arra, hogy a f\u00fcgg\u0151leges sk\u00e1l\u00e1z\u00e1s hat\u00e1rai m\u00e9g nincsenek kihaszn\u00e1lva. Azonban csak a lek\u00e9rdez\u00e9sek sz\u00e1ma n\u0151tt t\u00edzszeres\u00e9re. Az \u00e9vek sor\u00e1n a rendszer funkcionalit\u00e1sa is n\u0151tt, \u00e9s most m\u00e1r t\u00f6bbf\u00e9le lek\u00e9rdez\u00e9s l\u00e9tezik. Az a funkcionalit\u00e1s, ami kor\u00e1bban volt, a gyors\u00edt\u00f3t\u00e1raz\u00e1s r\u00e9v\u00e9n kevesebb, de hat\u00e9konyabb lek\u00e9rdez\u00e9seket ig\u00e9nyel. Teh\u00e1t mondhatjuk, hogy b\u00e1tran szorozhatjuk m\u00e9g 5-tel, hogy megkapjuk a val\u00f3s sebess\u00e9gn\u00f6vel\u00e9si ar\u00e1nyt. \u00cdgy a legmodestabb sz\u00e1m\u00edt\u00e1saink szerint a sebess\u00e9gn\u00f6vel\u00e9s 50 \u00e9s t\u00f6bb szoros lehetett. A szervert 50-szer felfel\u00e9 sk\u00e1l\u00e1zni sokkal dr\u00e1g\u00e1bb lett volna. K\u00fcl\u00f6n\u00f6sen figyelembe v\u00e9ve, hogy egyszer v\u00e9grehajtott optimaliz\u00e1l\u00e1s folyamatosan m\u0171k\u00f6dik, m\u00edg a b\u00e9relt szerver sz\u00e1ml\u00e1ja minden h\u00f3napban \u00e9rkezik.<br \/>\n<br \/>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\udd47Az adatb\u00e1zis lek\u00e9rdez\u00e9sek optimaliz\u00e1l\u00e1sa egy B2B szolg\u00e1ltat\u00e1s p\u00e9ld\u00e1j\u00e1n kereszt\u00fcl \u00e9p\u00edt\u0151k sz\u00e1m\u00e1ra | ProHoster","description":"Hogyan n\u00f6vekedj\u00fcnk meg 10-szer a DB-hez jelentkez\u0151 lek\u00e9rdez\u00e9sek sz\u00e1m\u00e1ban, an\u00e9lk\u00fcl hogy feleln\u00e9nk a teljes\u00edtm\u00e9nyorient\u00e1lt szerverre \u00e9s meg\u0151rizz\u00fck a rendszer m\u0171k\u00f6d\u0151k\u00e9pess\u00e9g\u00e9t?","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/optimizatsiya-zaprosov-bazy-dannyh-na-primere-b2b-servisa-dlya-stroitelej","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/36704","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=36704"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/36704\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/27493"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=36704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=36704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=36704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}