{"id":87954,"date":"2020-07-12T01:42:48","date_gmt":"2020-07-11T23:42:48","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/unlocking-the-postgres-lock-manager-bryus-momzhian"},"modified":"2020-07-12T01:42:48","modified_gmt":"2020-07-11T23:42:48","slug":"unlocking-the-postgres-lock-manager-bryus-momzhian","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/unlocking-the-postgres-lock-manager-bryus-momzhian","title":{"rendered":"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bruce Momjian 2020-as jelent\u00e9se: \"Unlocking the Postgres Lock Manager\".<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/1f75fbb0cb41c306c33c823ef55f7238.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>(Megjegyz\u00e9s: Minden SQL lek\u00e9rdez\u00e9st a di\u00e1kb\u00f3l ezen a linken kaphat: <noindex><a rel=\"nofollow\" href=\"http:\/\/momjian.us\/main\/writings\/pgsql\/locking.sql\">http:\/\/momjian.us\/main\/writings\/pgsql\/locking.sql<\/a><\/noindex>)<\/p>\n<p><\/p>\n<p>Hell\u00f3! Csod\u00e1latos \u00fajra Oroszorsz\u00e1gban lenni. Eln\u00e9z\u00e9st k\u00e9rek, hogy tavaly nem tudtam elj\u00f6nni, de id\u00e9n Ivan-nal nagy terveink vannak. Rem\u00e9lem, sokkal gyakrabban tudok itt lenni. Im\u00e1dom Oroszorsz\u00e1got l\u00e1togatni. Tyumenbe \u00e9s Tverbe fogok utazni. Nagyon \u00f6r\u00fcl\u00f6k, hogy ezekben a v\u00e1rosokban is j\u00e1rhatok. <\/p>\n<p><\/p>\n<p>Bruce Momjian vagyok. Az EnterpriseDB-n\u00e9l dolgozom \u00e9s t\u00f6bb mint 23 \u00e9ve foglalkozom a Postgres-szel. Philadelphia v\u00e1ros\u00e1ban \u00e9lek az Egyes\u00fclt \u00c1llamokban. \u00c9ves szinten k\u00f6r\u00fclbel\u00fcl 90 napot utazom, \u00e9s k\u00f6r\u00fclbel\u00fcl 40 konferenci\u00e1n veszek r\u00e9szt. Az \u00e9n <noindex><a rel=\"nofollow\" href=\"https:\/\/momjian.us\/\">weboldalam<\/a><\/noindex>, amely tartalmazza azokat a diak\u00e9peket, amelyeket most megmutatok \u00d6n\u00f6knek. Teh\u00e1t a konferencia ut\u00e1n le tudj\u00e1k t\u00f6lteni azokat a szem\u00e9lyes weboldalamr\u00f3l. Ott k\u00f6r\u00fclbel\u00fcl 30 prezent\u00e1ci\u00f3 is tal\u00e1lhat\u00f3. Ezen k\u00edv\u00fcl vannak vide\u00f3k \u00e9s rengeteg blogbejegyz\u00e9s, t\u00f6bb mint 500. Ez egy meglehet\u0151sen tartalmas er\u0151forr\u00e1s, \u00e9s ha \u00e9rdekli ez az anyag, szeretettel invit\u00e1lom, hogy haszn\u00e1lja. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>R\u00e9gebben tan\u00e1r voltam, professzor, miel\u0151tt elkezdtem volna a Postgres-szel dolgozni. Nagyon \u00f6r\u00fcl\u00f6k, hogy most elmondhatom \u00d6n\u00f6knek azt, amit terveztem. Ez az egyik leg\u00e9rdekesebb prezent\u00e1ci\u00f3m, amely 110 di\u00e1t tartalmaz. A legegyszer\u0171bb dolgokkal fogunk kezdeni, \u00e9s a v\u00e9g\u00e9re a mondanival\u00f3 egyre bonyolultabb\u00e1 v\u00e1lik, \u00e9s el\u00e9g neh\u00e9z lesz.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/9c2e95851f3d8dc92d2ca40b5f29cd52.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez egy meglehet\u0151sen kellemetlen besz\u00e9lget\u00e9s. A z\u00e1rak nem a legn\u00e9pszer\u0171bb t\u00e9ma. Szeretn\u00e9nk, ha ez elt\u0171nne valahov\u00e1. Olyan, mint fogorvoshoz menni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/bbb2bf8495d458c5bc4a162880a807bb.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ol>\n<li>A z\u00e1rak probl\u00e9m\u00e1t jelentenek sokak sz\u00e1m\u00e1ra, akik adatb\u00e1zisokkal foglalkoznak, \u00e9s ahol egyszerre t\u00f6bb folyamat fut. Sz\u00fcks\u00e9g\u00fck van a z\u00e1rakra. Teh\u00e1t ma alapvet\u0151 ismereteket fogok adni \u00d6n\u00f6knek a z\u00e1rakr\u00f3l. <\/li>\n<li>Tranzakci\u00f3s azonos\u00edt\u00f3k. Ez egy meglehet\u0151sen unalmas r\u00e9sze a prezent\u00e1ci\u00f3nak, de meg kell \u00e9rteni \u0151ket.<\/li>\n<li>Ezut\u00e1n a z\u00e1rak t\u00edpusair\u00f3l fogunk besz\u00e9lni. Ez egy el\u00e9g mechanikus r\u00e9sz. <\/li>\n<li>Majd p\u00e9ld\u00e1kat mutatunk be a z\u00e1rakr\u00f3l. Ez pedig el\u00e9g nehezen \u00e9rthet\u0151 lesz. <\/li>\n<\/ol>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/7261d9ed162b7f582ec91d6aa98fac01.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Besz\u00e9lj\u00fcnk a z\u00e1rakr\u00f3l.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/13664632ed5ce42ea3ae20830117931e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A terminol\u00f3gia el\u00e9g bonyolult n\u00e1lunk. H\u00e1nyan tudj\u00e1k, honnan sz\u00e1rmazik ez a r\u00e9szlet? K\u00e9t ember. Ez egy j\u00e1t\u00e9kb\u00f3l sz\u00e1rmazik, amit \"Kolossz\u00e1lis kaland a barlangban\"-nak h\u00edvnak. Ez egy sz\u00f6veges sz\u00e1m\u00edt\u00f3g\u00e9pes j\u00e1t\u00e9k volt az 80-as \u00e9vekben, ha j\u00f3l eml\u00e9kszem. Bement\u00e9l a barlangba, a labirintusba, \u00e9s a sz\u00f6veg v\u00e1ltozott, de a tartalom nagyj\u00e1b\u00f3l ugyanaz maradt minden alkalommal. \u00cdgy eml\u00e9kszem erre a j\u00e1t\u00e9kra. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/8e8b88cb4d3fabc9d60bacb771a6ea38.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Itt l\u00e1tjuk a blokkol\u00e1sok nev\u00e9t, amelyek az Oracle-t\u0151l sz\u00e1rmaznak. Haszn\u00e1ljuk \u0151ket. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/37941629c5bde0c387fcd34565e99a9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Itt olyan kifejez\u00e9seket l\u00e1tok, amelyek zavarba ejtenek. P\u00e9ld\u00e1ul SHARE UPDATE EXCLUSIVE. Tov\u00e1bb\u00e1 SHARE RAW EXCLUSIVE. \u0150szint\u00e9n sz\u00f3lva, ezek a megnevez\u00e9sek nem igaz\u00e1n \u00e9rthet\u0151ek. Megpr\u00f3b\u00e1ljuk r\u00e9szletesebben megvizsg\u00e1lni \u0151ket. N\u00e9h\u00e1ny tartalmazza a \"share\" sz\u00f3t, ami elv\u00e1l\u00e1st jelent. N\u00e9h\u00e1ny tartalmazza az \"exclusive\" sz\u00f3t - ekskluz\u00edv. Van, amelyik mindk\u00e9t sz\u00f3t tartalmazza. Szeretn\u00e9m elkezdeni azzal, hogyan m\u0171k\u00f6dnek ezek a blokkol\u00e1sok. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/dffa5b94dc39bd00b5abc1ef1db9c334.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Szint\u00e9n nagyon fontos a \"hozz\u00e1f\u00e9r\u00e9s\" - access sz\u00f3. \u00c9s a \"row\" - sor sz\u00f3. Teh\u00e1t a hozz\u00e1f\u00e9r\u00e9s eloszt\u00e1sa, a sorok eloszt\u00e1sa. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/1caf91a69510d21c74700bfdcf6f7f46.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egy m\u00e1sik probl\u00e9ma, amelyet meg kell \u00e9rteni a Postgres-ben, a MVCC, sajn\u00e1latos m\u00f3don err\u0151l a besz\u00e9demben nem tudok besz\u00e9lni. Van egy k\u00fcl\u00f6n el\u0151ad\u00e1som err\u0151l a t\u00e9m\u00e1r\u00f3l a weboldalamon. \u00c9s ha \u00fagy gondolod, hogy ez az el\u0151ad\u00e1s bonyolult, akkor a MVCC val\u00f3sz\u00edn\u0171leg a legbonyolultabb. \u00c9s ha \u00e9rdekel, megn\u00e9zheted a weboldalon. N\u00e9zd meg a vide\u00f3t. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/cbaecfa1a74340ad497b080dfc577eb2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egy m\u00e1sik szempont, amit meg kell \u00e9rten\u00fcnk, az a tranzakci\u00f3 azonos\u00edt\u00f3k. Sok tranzakci\u00f3 nem tud m\u0171k\u00f6dni egyedi azonos\u00edt\u00f3k n\u00e9lk\u00fcl. Itt pedig a tranzakci\u00f3k jelent\u00e9se ker\u00fcl magyar\u00e1zatba. A Postgres-ben k\u00e9t tranzakci\u00f3sz\u00e1moz\u00e1si rendszer van. Tudom, hogy ez nem a legszebb megold\u00e1s. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/52d603a076ce0e74f39c00bdf6b06ef5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Arra is figyeljetek, hogy a di\u00e1ink el\u00e9g bonyolultak lesznek, ez\u00e9rt a pirossal kiemelt r\u00e9szekre kell figyelni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/df937b924ec12772447269e01cdf7cf9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/momjian.us\/main\/writings\/pgsql\/locking.sql\">http:\/\/momjian.us\/main\/writings\/pgsql\/locking.sql<\/a><\/noindex><\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck. A pirossal kiemelt a tranzakci\u00f3s sz\u00e1m. Itt a SELECT pg_back funkci\u00f3 l\u00e1that\u00f3. Ez visszaadja az \u00e9n tranzakci\u00f3mat \u00e9s ennek az azonos\u00edt\u00f3j\u00e1t. <\/p>\n<p><\/p>\n<p>Egy m\u00e1sik dolog, ha tetszik ez a bemutat\u00f3, \u00e9s szeretn\u00e9 be\u00e1ll\u00edtani az adatb\u00e1zis\u00e1ban, akkor az al\u00e1bbi r\u00f3zsasz\u00ednnel kiemelt linkre kattintva let\u00f6ltheti a SQL-t ehhez a bemutat\u00f3hoz. Csak futtassa a PSQL-j\u00e9ben, \u00e9s az eg\u00e9sz bemutat\u00f3 azonnal megjelenik az \u00d6n k\u00e9perny\u0151j\u00e9n. Nem fog sz\u00edneket tartalmazni, de legal\u00e1bb l\u00e1thatjuk.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/aeaeecc16029e5fa54583223069578d1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ebben az esetben l\u00e1tjuk a tranzakci\u00f3s azonos\u00edt\u00f3t. Ez az a sz\u00e1m, amit hozz\u00e1rendelt\u00fcnk. Van egy m\u00e1sik t\u00edpus\u00fa tranzakci\u00f3s azonos\u00edt\u00f3 is a Postgresben, amely a virtu\u00e1lis tranzakci\u00f3s azonos\u00edt\u00f3.<\/p>\n<p><\/p>\n<p>\u00c9s ezt meg kell \u00e9rten\u00fcnk. Nagyon fontos, k\u00fcl\u00f6nben nem tudjuk meg\u00e9rteni a Postgres blokkol\u00e1st.<\/p>\n<p><\/p>\n<p>A virtu\u00e1lis tranzakci\u00f3s azonos\u00edt\u00f3 olyan tranzakci\u00f3s azonos\u00edt\u00f3, amely nem tartalmaz \u00e1lland\u00f3 \u00e9rt\u00e9keket. P\u00e9ld\u00e1ul, ha egy SELECT parancsot futtatok, akkor val\u00f3sz\u00edn\u0171leg nem fogom megv\u00e1ltoztatni az adatb\u00e1zist, semmi sem fog blokkolni. Teh\u00e1t amikor egyszer\u0171 SELECT-et futtatunk, nem adunk ennek a tranzakci\u00f3nak \u00e1lland\u00f3 azonos\u00edt\u00f3t. Csak virtu\u00e1lis azonos\u00edt\u00f3t adunk neki.<\/p>\n<p><\/p>\n<p>Ez n\u00f6veli a Postgres teljes\u00edtm\u00e9ny\u00e9t, jav\u00edtja a tiszt\u00edt\u00e1si lehet\u0151s\u00e9geket, ez\u00e9rt a virtu\u00e1lis tranzakci\u00f3s azonos\u00edt\u00f3 k\u00e9t sz\u00e1mjegyb\u0151l \u00e1ll. Az els\u0151 sz\u00e1m a perem\u00e9n tal\u00e1lhat\u00f3 \u2013 ez a h\u00e1tt\u00e9r azonos\u00edt\u00f3. Jobbra egyszer\u0171en egy sz\u00e1ml\u00e1l\u00f3 l\u00e1that\u00f3.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/8813ab1f15f71ce4fbb5448bde2cfba6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez\u00e9rt, ha lek\u00e9rdez\u00e9st futtatok, azt mondja, hogy a h\u00e1tt\u00e9r azonos\u00edt\u00f3 \u2013 2. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/b6f4e3a2ad8d6801af2716b0bd3bf75a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha pedig egy sor ilyen tranzakci\u00f3t futtatok, l\u00e1thatjuk, hogy a sz\u00e1ml\u00e1l\u00f3 minden alkalommal n\u00f6vekszik, amikor lek\u00e9rdez\u00e9st futtatok. P\u00e9ld\u00e1ul, amikor a lek\u00e9rdez\u00e9st futtatom 2\/10, 2\/11, 2\/12 stb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/0b5fbb897233ff3dd07b807af4d4e0d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne feledje, hogy itt k\u00e9t oszlop van. Bal oldalon l\u00e1tjuk a virtu\u00e1lis tranzakci\u00f3s azonos\u00edt\u00f3t \u2013 2\/12. Jobbra \u00e1lland\u00f3 tranzakci\u00f3s azonos\u00edt\u00f3nk van. Ez a mez\u0151 \u00fcres. Ez a tranzakci\u00f3 nem m\u00f3dos\u00edtja az adatb\u00e1zist. Ez\u00e9rt nem rendeltem hozz\u00e1 \u00e1lland\u00f3 tranzakci\u00f3s azonos\u00edt\u00f3t.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/e8ab3dc34ce6036eedfb87e56f41d01a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Amint futtatom az ANALYZE parancsot, ugyanaz a lek\u00e9rdez\u00e9s \u00e1lland\u00f3 tranzakci\u00f3s azonos\u00edt\u00f3t ad nekem. N\u00e9zze meg, hogyan v\u00e1ltozott ez. Kor\u00e1bban nem volt ilyen azonos\u00edt\u00f3m, most pedig van.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/ca546a3006bfc0881ef1c7e7fe878c7a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teh\u00e1t itt van m\u00e9g egy lek\u00e9rdez\u00e9s, m\u00e9g egy tranzakci\u00f3. A virtu\u00e1lis tranzakci\u00f3s sz\u00e1m \u2013 2\/13. \u00c9s ha megk\u00e9rem az \u00e1lland\u00f3 tranzakci\u00f3s azonos\u00edt\u00f3t, akkor amikor a lek\u00e9rdez\u00e9st futtatom, megkapom azt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/69bf4082be1832504a823f6420d62609.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teh\u00e1t m\u00e9g egyszer. Van virtu\u00e1lis tranzakci\u00f3s azonos\u00edt\u00f3nk \u00e9s \u00e1lland\u00f3 tranzakci\u00f3s azonos\u00edt\u00f3nk. Csak \u00e9rts\u00fck meg ezt a szempontot, hogy meg\u00e9rts\u00fck a Postgres viselked\u00e9s\u00e9t.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/ecc70c44ceee36dab9c98bcfcebf4c8f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c1t\u00e9r\u00fcnk a harmadik r\u00e9szre. Itt k\u00fcl\u00f6nb\u00f6z\u0151 z\u00e1rol\u00e1si t\u00edpusokat fogunk \u00e1ttekinteni a Postgresben. Ez nem t\u00fal izgalmas. Az utols\u00f3 r\u00e9sz sokkal \u00e9rdekesebb lesz. De el\u0151bb meg kell vizsg\u00e1lnunk az alapvet\u0151 dolgokat, mert k\u00fcl\u00f6nben nem fogjuk \u00e9rteni, mi fog k\u00f6vetkezni. <\/p>\n<p><\/p>\n<p>\u00c1tmegy\u00fcnk ezen a r\u00e9szen, megn\u00e9zz\u00fck az egyes z\u00e1rol\u00e1si t\u00edpusokat. Megmutatom, hogyan \u00e1ll\u00edtj\u00e1k be \u0151ket, hogyan m\u0171k\u00f6dnek, \u00e9s n\u00e9h\u00e1ny lek\u00e9rdez\u00e9st is bemutatok, amelyeket haszn\u00e1lhatsz, hogy l\u00e1sd, hogyan m\u0171k\u00f6dik a z\u00e1rol\u00e1s a Postgresben.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/2074b6c82ff77525090c868d0c9f09f5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A lek\u00e9rdez\u00e9s l\u00e9trehoz\u00e1s\u00e1hoz \u00e9s a Postgresben t\u00f6rt\u00e9n\u0151 esem\u00e9nyek megfigyel\u00e9s\u00e9hez ki kell adnunk egy lek\u00e9rdez\u00e9st a rendszer n\u00e9zet\u00e9ben. Ebben az esetben a pg_lock van kiemelve piros sz\u00ednnel. A pg_lock egy rendszer t\u00e1bl\u00e1zat, amely megmondja nek\u00fcnk, hogy aktu\u00e1lisan milyen z\u00e1rol\u00e1sok haszn\u00e1latosak a Postgresben.<\/p>\n<p><\/p>\n<p>Mindazon\u00e1ltal nagyon neh\u00e9z a pg_lock-ot \u00f6n\u00e1ll\u00f3an megmutatni, mert el\u00e9g bonyolult. Ez\u00e9rt l\u00e9trehoztam egy n\u00e9zetet, amely a pg_locks-ot mutatja. Ez a n\u00e9zet egy\u00fattal seg\u00edt nekem abban, hogy jobban meg\u00e9rtsem a dolgokat. Teh\u00e1t kiz\u00e1rja az \u00e9n z\u00e1rol\u00e1saimat, az \u00e9n saj\u00e1t munkamenetemet stb. Ez egyszer\u0171en standard SQL, \u00e9s seg\u00edt, hogy jobban megmutassam, mi zajlik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/8372fff8ded76ace47591850b74db860.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00e9g egy probl\u00e9ma, hogy ez a n\u00e9zet nagyon sz\u00e9les, ez\u00e9rt l\u00e9tre kellett hoznom egy m\u00e1sodik \u2013 lockview2.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/559745d390f99d7d28199be76d3abc18.png\" style=\"display:block;margin: 0 auto;\" \/> Ez tov\u00e1bbi oszlopokat mutat meg nekem a t\u00e1bl\u00e1zatb\u00f3l. \u00c9s van m\u00e9g egy m\u00e1sik, amely a t\u00f6bbi oszlopot mutatja. Ez el\u00e9g bonyolult, ez\u00e9rt igyekeztem a lehet\u0151 legegyszer\u0171bben bemutatni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/48d69895241e1f58ac5ef0e385a67644.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teh\u00e1t l\u00e9trehoztunk egy t\u00e1bl\u00e1zatot, amelynek neve Lockdemo. Ezen l\u00e9trehoztunk egy sort. Ez a p\u00e9ldat\u00e1bl\u00e1zatunk. Szegmenseket fogunk l\u00e9trehozni, hogy egyszer\u0171en p\u00e9ld\u00e1kat mutassunk be a z\u00e1rol\u00e1sokr\u00f3l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/2c5a64d5488c1eef7def91a5e0657519.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teh\u00e1t egy sor, egy oszlop. Az els\u0151 z\u00e1rol\u00e1si t\u00edpus neve ACCESS SHARE. Ez a legiskev\u00e9sb\u00e9 korl\u00e1toz\u00f3 z\u00e1rol\u00e1s. Ez azt jelenti, hogy gyakorlatilag nem \u00fctk\u00f6zik a t\u00f6bbi z\u00e1rol\u00e1ssal.<\/p>\n<p><\/p>\n<p>Ha kifejezetten meg akarjuk hat\u00e1rozni a z\u00e1rol\u00e1st, akkor futtatjuk a \"lock table\" parancsot. Ez egy\u00e9rtelm\u0171en z\u00e1rolni fog, teh\u00e1t ACCESS SHARE m\u00f3dban futtatjuk a lock table-t. Ha \u00e9n a PSQL-t a h\u00e1tt\u00e9rben futtatom, akkor \u00edgy elind\u00edtok egy m\u00e1sodik munkamenetet az els\u0151 munkamenetemb\u0151l. Teh\u00e1t mit teszek itt? Megyek egy m\u00e1sik munkamenetre, \u00e9s azt k\u00e9rem, hogy \"mutassa meg a lockview-t ehhez a lek\u00e9rdez\u00e9shez\". Itt AccessShareLock van ebben a t\u00e1bl\u00e1ban. \u00c9ppen ezt k\u00e9rtem. Azt mondja, hogy a z\u00e1rol\u00e1s hozz\u00e1rendel\u00e9se megt\u00f6rt\u00e9nt. Nagyon egyszer\u0171. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/458adfcb7fb0de3f4b23bc703a78534e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tov\u00e1bb\u00e1, ha a m\u00e1sodik oszlopra n\u00e9z\u00fcnk, ott semmi sincs. \u00dcresek. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/f3b848f3c9bfaf1a41273effeb0965e1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha futtatom a \"SELECT\" parancsot, akkor ez egy implicit (\u00e9rtelmes) m\u00f3dja az AccessShareLock k\u00e9r\u00e9s\u00e9nek. Ez\u00e9rt kiadom a t\u00e1bl\u00e1mat, \u00e9s futtatok egy lek\u00e9rdez\u00e9st, amely visszaad n\u00e9h\u00e1ny sor, \u00e9s az egyik sorban l\u00e1tjuk az AccessShareLock-ot. \u00cdgy a SELECT AccessShareLock-ot h\u00edv el\u0151 a t\u00e1bl\u00e1ban. Szinte semmivel sem \u00fctk\u00f6zik, mivel ez egy alacsony szint\u0171 z\u00e1rol\u00e1s. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/0d9526dbea91b5e5f4e0e05a20b16d38.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi van, ha futtatom a SELECT-et, \u00e9s h\u00e1rom k\u00fcl\u00f6nb\u00f6z\u0151 t\u00e1bl\u00e1m van? Kor\u00e1bban csak egy t\u00e1bl\u00e1t futtattam, most h\u00e1rom: pg_class, pg_namespace \u00e9s pg_attribute.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/415be5bb7cb7cbbe6bbfd0ab1b9b2d3e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Most, amikor r\u00e1n\u00e9zek a lek\u00e9rdez\u00e9sre, 9 AccessShareLock-ot l\u00e1tok h\u00e1rom t\u00e1bl\u00e1ban. Mi\u00e9rt? K\u00e9k sz\u00ednnel kiemelve h\u00e1rom t\u00e1bla: pg_attribute, pg_class, pg_namespace. De azt is l\u00e1tja, hogy minden index, amely ezekkel a t\u00e1bl\u00e1kkal van defini\u00e1lva, szint\u00e9n AccessShareLock-ot kapott.<\/p>\n<p><\/p>\n<p>Ez a z\u00e1rol\u00e1s szinte nem \u00fctk\u00f6zik m\u00e1sokkal. Amit csin\u00e1l, az egyszer\u0171en megakad\u00e1lyozza, hogy vissza\u00e1ll\u00edtsuk a t\u00e1bl\u00e1t, am\u00edg azt kiv\u00e1lasztjuk. Ennek van \u00e9rtelme. Teh\u00e1t, ha kiv\u00e1lasztunk egy t\u00e1bl\u00e1t, az abban a pillanatban elt\u0171nik, az helytelen lenne, ez\u00e9rt <strong>AccessShare - ez egy alacsony szint\u0171 z\u00e1rol\u00e1s, amely azt mondja nek\u00fcnk: \"ne t\u00f6r\u00f6lje ezt a t\u00e1bl\u00e1t, am\u00edg dolgozom\"<\/strong>. L\u00e9nyeg\u00e9ben ez az eg\u00e9sz, amit csin\u00e1l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/99c896a5a57f7d64077fad9368f9b41a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A ROW SHARE egy kicsit elt\u00e9r\u0151 z\u00e1rol\u00e1s. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/bbd833128a83fba3b7271f89e6115425.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg a p\u00e9ld\u00e1t. <strong>A SELECT ROW SHARE a z\u00e1rol\u00e1s m\u00f3dja, amely minden egyes sort k\u00fcl\u00f6n-k\u00fcl\u00f6n z\u00e1rol.<\/strong>. \u00cdgy senki sem tudja t\u00f6r\u00f6lni vagy m\u00f3dos\u00edtani \u0151ket, am\u00edg n\u00e9zz\u00fck. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/7f7384d5c4c04ffc771192359d785c43.png\" style=\"display:block;margin: 0 auto;\" \/>Teh\u00e1t, mit is csin\u00e1l a SHARE LOCK? L\u00e1tjuk, hogy a tranzakci\u00f3s azonos\u00edt\u00f3 681 a SELECT-hoz. Ez \u00e9rdekes. Mi is t\u00f6rt\u00e9nt itt? El\u0151sz\u00f6r l\u00e1tunk egy sz\u00e1mot a \u201eLock\u201d mez\u0151ben. Elvessz\u00fck a tranzakci\u00f3 azonos\u00edt\u00f3t, \u00e9s azt mondja, hogy exkluz\u00edv m\u00f3dban z\u00e1rolja. Amit ez t\u00e9nylegesen jelent, hogy van egy sor, ami technikailag valahol a t\u00e1bl\u00e1ban z\u00e1rolva van. De nem mondja meg, hogy hol pontosan. K\u00e9s\u0151bb r\u00e9szletesebben is megn\u00e9zz\u00fck ezt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/284a303fd34c167d453facb46e207067.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Itt elmondjuk, hogy a z\u00e1rol\u00e1st mi haszn\u00e1ljuk.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/12a2be61a2f406fc125dcab11983e9c6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teh\u00e1t, az exkluz\u00edv z\u00e1rol\u00e1s egy\u00e9rtelm\u0171en (explicit) azt mondja, hogy exkluz\u00edv. \u00c9s ha t\u00f6r\u00f6lsz egy sort ebben a t\u00e1bl\u00e1ban, akkor ez val\u00f3ban meg fog t\u00f6rt\u00e9nni, ahogy azt l\u00e1thatod. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/23ed127ff4a033a6f51c0b5566fd6a7c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>A SHARE EXCLUSIVE egy hosszabb z\u00e1rol\u00e1s.<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/12e6b0217c528ef5034eb328553fefe9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez (ANALYZE) az elemz\u0151 parancs, amelyet haszn\u00e1lni fogunk.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/d11480b90b74c8165a60bd73cf24a683.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>SHARE LOCK \u2013 kifejezetten z\u00e1rolhatod megoszt\u00e1si m\u00f3dban.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/ee2a5ad8d0da5fb94865abe3cfa70fa7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egyedi indexet is l\u00e9trehozhatsz. Ott l\u00e1thatod a SHARE LOCK-ot, ami annak a r\u00e9sze. \u00c9s ez z\u00e1rolja a t\u00e1bl\u00e1t, \u00e9s be\u00e1ll\u00edt r\u00e1 egy SHARE LOCK-ot.<\/p>\n<p><\/p>\n<p><strong>Alap\u00e9rtelmez\u00e9s szerint a SHARE LOCK a t\u00e1bl\u00e1n azt jelenti, hogy m\u00e1sok olvashatj\u00e1k a t\u00e1bl\u00e1t, de senki sem m\u00f3dos\u00edthatja. \u00c9s pontosan ez t\u00f6rt\u00e9nik, amikor egyedi indexet hozol l\u00e9tre.<\/strong><\/p>\n<p><\/p>\n<p>Ha egyedi p\u00e1rhuzamos indexet hozok l\u00e9tre, akkor m\u00e1s t\u00edpus\u00fa z\u00e1rol\u00e1som lesz, mert, ahogy eml\u00e9kszel, a p\u00e1rhuzamos indexek haszn\u00e1lata cs\u00f6kkenti a z\u00e1rol\u00e1si ig\u00e9nyt. \u00c9s ha norm\u00e1l z\u00e1rol\u00e1st haszn\u00e1lok, norm\u00e1l indexet, akkor ezzel megakad\u00e1lyozom a t\u00e1bl\u00e1zat index\u00e9be val\u00f3 \u00edr\u00e1st annak l\u00e9trehoz\u00e1sa sor\u00e1n. Ha p\u00e1rhuzamos indexet haszn\u00e1lok, akkor m\u00e1s t\u00edpus\u00fa z\u00e1rol\u00e1st kell haszn\u00e1lnom. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/5952ba48cda26f907d0d9265a933e880.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A SHARE ROW EXCLUSIVE \u2013 ezt is kifejezetten (explicit) be lehet \u00e1ll\u00edtani.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/5d780961d3a2e6aa0f82287fb4822782.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vagy l\u00e9trehozhatunk egy szab\u00e1lyt, azaz vegy\u00fcnk egy bizonyos esetet, amelyben haszn\u00e1lva lesz.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/7b0f44c4b44426a8dd7999387b245783.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az EXCLUSIVE z\u00e1rol\u00e1s azt jelenti, hogy m\u00e1s senki nem tudja megv\u00e1ltoztatni a t\u00e1bl\u00e1t. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/0b59c38455eb973a10be32c2cae0d2aa.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Itt l\u00e1tunk k\u00fcl\u00f6nb\u00f6z\u0151 t\u00edpus\u00fa z\u00e1rol\u00e1sokat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/5ec2fc9ae765dfa28285b9f025212056.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az ACCESS EXCLUSIVE p\u00e9ld\u00e1ul egy z\u00e1rol\u00e1si parancs. P\u00e9ld\u00e1ul, ha v\u00e9gzel <code>CLUSTER table<\/code>, akkor ez azt fogja jelenteni, hogy senki nem tud oda \u00edrni. \u00c9s ez nemcsak mag\u00e1t a t\u00e1bl\u00e1zatot z\u00e1rolja, hanem az indexeket is.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/9290594355c0b8cef5a07be3a94f6c24.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez az ACCESS EXCLUSIVE z\u00e1rol\u00e1s m\u00e1sodik oldala, ahol konkr\u00e9tan l\u00e1tjuk, hogy mit z\u00e1rol a t\u00e1bl\u00e1zatban. Ez a t\u00e1bl\u00e1zat k\u00fcl\u00f6nb\u00f6z\u0151 sorait z\u00e1rolja, ami el\u00e9g \u00e9rdekes.<\/p>\n<p><\/p>\n<p>Ez az \u00f6sszes alapvet\u0151 inform\u00e1ci\u00f3, amit meg akartam osztani. Besz\u00e9lt\u00fcnk a blokkokr\u00f3l, a tranzakci\u00f3s azonos\u00edt\u00f3kr\u00f3l, a virtu\u00e1lis tranzakci\u00f3s azonos\u00edt\u00f3kr\u00f3l \u00e9s a tart\u00f3s tranzakci\u00f3s azonos\u00edt\u00f3kr\u00f3l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/b9bc44aa88e6760c11a7d0fe247b4b33.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Most pedig n\u00e9h\u00e1ny p\u00e9lda blokkokra k\u00f6vetkezik. Ez a leg\u00e9rdekesebb r\u00e9sz. Nagyon \u00e9rdekes eseteket vizsg\u00e1lunk meg. Az \u00e9n feladatom ebben a prezent\u00e1ci\u00f3ban, hogy a lehet\u0151 legjobb k\u00e9pet adjak arr\u00f3l, hogy a Postgres val\u00f3j\u00e1ban mit csin\u00e1l, amikor blokkolni pr\u00f3b\u00e1l bizonyos dolgokat. \u00dagy t\u0171nik, hogy nagyon j\u00f3l tudja kezelni az egyes r\u00e9szek blokkol\u00e1s\u00e1t. <\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg bizonyos p\u00e9ld\u00e1kat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/566ecc5ef289e8fdfa5a96bd8b3daa80.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kezdj\u00fck a t\u00e1bl\u00e1zatokkal \u00e9s egy sorral a t\u00e1bl\u00e1zatban. Amikor beillesztek valamit, megjelenik az ExclusiveLock, a tranzakci\u00f3s azonos\u00edt\u00f3 \u00e9s az ExclusiveLock a t\u00e1bl\u00e1zaton. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/840b23a8b942211c93e233006fd3fe4b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi t\u00f6rt\u00e9nik, ha m\u00e9g k\u00e9t sort illesztek be? Most a t\u00e1bl\u00e1zatunkban h\u00e1rom sor van. Beillesztettem egy sort, \u00e9s ezt kaptam meg eredm\u00e9nyk\u00e9nt. Ha m\u00e9g k\u00e9t sort illesztek be, mi a furcsa itt? Furcsas\u00e1g van, mert h\u00e1rom sort adtam hozz\u00e1 ehhez a t\u00e1bl\u00e1zathoz, de a blokkolt t\u00e1bl\u00e1zatban m\u00e9g mindig csak k\u00e9t sor van. Ez l\u00e9nyeg\u00e9ben a Postgres alapvet\u0151 viselked\u00e9se.<\/p>\n<p><\/p>\n<p>Sokan \u00fagy gondolj\u00e1k, hogy ha a adatb\u00e1zisban 100 sort blokkolnak, akkor 100 blokkol\u00e1si bejegyz\u00e9st kell l\u00e9trehozni. Ha egyszerre 1 000 sort blokkolok, akkor 1 000 ilyen lek\u00e9rdez\u00e9sre lesz sz\u00fcks\u00e9gem. \u00c9s ha milli\u00f3t vagy milli\u00e1rdot kell blokkolnom. De ha \u00edgy csin\u00e1ljuk, az nem fog j\u00f3l m\u0171k\u00f6dni. Ha olyan rendszert haszn\u00e1lsz, amely blokkol\u00e1si bejegyz\u00e9seket k\u00e9sz\u00edt minden egyes sorra, l\u00e1tni fogod, hogy ez bonyolult. Mert meg kell hat\u00e1rozni egy blokkol\u00e1si t\u00e1bl\u00e1t, amely t\u00fal tud t\u00f6lteni, de a Postgres nem \u00edgy m\u0171k\u00f6dik. <\/p>\n<p><\/p>\n<p>Enn\u00e9l a di\u00e1n rendk\u00edv\u00fcl fontos, hogy vil\u00e1gosan bemutat\u00e1sra ker\u00fcl, hogy van m\u00e9g egy rendszer, amely az MVCC-n bel\u00fcl m\u0171k\u00f6dik, \u00e9s amely egyes sorokat blokkol. Teh\u00e1t amikor milli\u00e1rd sort blokkolsz, a Postgres nem k\u00e9sz\u00edt milli\u00e1rd k\u00fcl\u00f6n blokkparancsot. Ez nagyon j\u00f3t\u00e9konyan hat a teljes\u00edtm\u00e9nyre. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/09ee01fffbb9bd00c84f2ebce51458cc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi a helyzet a friss\u00edt\u00e9ssel? Jelenleg friss\u00edtek egy sort, \u00e9s \u00e9szreveheted, hogy r\u00f6gt\u00f6n k\u00e9t k\u00fcl\u00f6nb\u00f6z\u0151 m\u0171veletet v\u00e9grehajtott. Egyszerre z\u00e1rolta a t\u00e1bl\u00e1t, de z\u00e1rolta az indexet is. Z\u00e1rolnia kellett az indexet, mert vannak egyedi korl\u00e1toz\u00e1sok ezen a t\u00e1bl\u00e1n. Azt szeretn\u00e9nk biztos\u00edtani, hogy senki se m\u00f3dos\u00edtsa, ez\u00e9rt z\u00e1roljuk.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/3e72d68af2d5ae3cc062b6e8b6da343b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi t\u00f6rt\u00e9nik, ha k\u00e9t sort szeretn\u00e9k friss\u00edteni? \u00c9s l\u00e1tjuk, hogy ugyan\u00fagy viselkedik. K\u00e9tszer annyi friss\u00edt\u00e9st v\u00e9gz\u00fcnk, de ugyanannyi sor z\u00e1rol\u00e1st hajtunk v\u00e9gre. <\/p>\n<p><\/p>\n<p>Ha \u00e9rdekel, hogyan csin\u00e1lja ezt a Postgres, hallgatnod kell a MVCC-r\u0151l sz\u00f3l\u00f3 el\u0151ad\u00e1saimat, hogy megtudd, hogyan jel\u00f6li meg a Postgres bels\u0151leg azokat a sorokat, amelyeket megv\u00e1ltoztat. A Postgres-nek van egy m\u00f3dszere, amellyel ezt megteszi, de nem a t\u00e1bl\u00e1k z\u00e1rol\u00e1s\u00e1nak szintj\u00e9n, hanem egy alacsonyabb \u00e9s hat\u00e9konyabb szinten.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/7e119822b0fb7c5aa3c4a463841bc8e1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi van, ha valamit el akarok t\u00e1vol\u00edtani? Ha p\u00e9ld\u00e1ul elt\u00e1vol\u00edtok egy sort, \u00e9s m\u00e9g mindig van k\u00e9t z\u00e1rol\u00e1som, \u00e9s m\u00e9g ha mindet el akarom t\u00e1vol\u00edtani, akkor is ott maradnak.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/c329f9fbc478a25396ea04102715973e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00e9ld\u00e1ul, ha 1000 sort szeretn\u00e9k hozz\u00e1adni, majd elt\u00e1vol\u00edtani vagy \u00fajabb 1000 sort hozz\u00e1adni, akkor azok az egyedi sorok, amelyeket hozz\u00e1adok vagy m\u00f3dos\u00edtok, nem itt lesznek r\u00f6gz\u00edtve. Azok egy alacsonyabb szinten r\u00f6gz\u00edt\u0151dnek mag\u00e1ban a sorban. A MVCC-r\u0151l sz\u00f3l\u00f3 el\u0151ad\u00e1somban r\u00e9szletesen besz\u00e9ltem err\u0151l. De nagyon fontos, amikor elemzed a z\u00e1rol\u00e1sokat, hogy gy\u0151z\u0151dj meg arr\u00f3l, hogy van t\u00e1blaszint\u0171 z\u00e1rol\u00e1sod, \u00e9s hogy itt nem l\u00e1tod, hogyan r\u00f6gz\u00edtik az egyes sorokat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/5683ca83f5c17da7928fae96c307c2d6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi a helyzet az explicit z\u00e1rol\u00e1ssal?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/a1746f121884c898c91e3b5d2ef517b8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha r\u00e1kattintok a \u201efriss\u00edt\u00e9s\u201d gombra, akkor k\u00e9t z\u00e1rolt sorom van. \u00c9s ha mindkett\u0151t kijel\u00f6l\u00f6m, \u00e9s megnyomom a \u201efriss\u00edt\u00e9s mindenhol\u201d gombot, akkor m\u00e9g mindig k\u00e9t z\u00e1rol\u00e1s marad. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/5d5388e5d0aff39042a9cd69edc91eea.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nem hozunk l\u00e9tre k\u00fcl\u00f6n bejegyz\u00e9seket minden egyes sorra. Mert akkor cs\u00f6kkent a teljes\u00edtm\u00e9ny, \u00e9s lehet, hogy t\u00fal sok ilyet hozunk l\u00e9tre. \u00c9s kellemetlen helyzetbe ker\u00fclhet\u00fcnk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/54e88ed51e705701a8b3ddaa4a784d75.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ugyanez igaz, ha megosztott z\u00e1rol\u00e1st v\u00e9gz\u00fcnk, akkor ezt 30 alkalommal is megtehetj\u00fck. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/ab9c26e9be090d85b09070ec5ba0d64d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vissza\u00e1ll\u00edtjuk a t\u00e1bl\u00e1nkat, mindent elt\u00e1vol\u00edtunk, majd \u00fajra besz\u00farunk egy sort.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/2d0a5b75f5cd08dca97b61bbae6a6cbd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Egy m\u00e1sik viselked\u00e9sm\u00f3d, amit a Postgresben l\u00e1that, az a j\u00f3l ismert \u00e9s k\u00edv\u00e1natos viselked\u00e9s \u2013 hogy egyszerre v\u00e9gezhet UPDATE vagy SELECT m\u0171veletet. A SELECT nem blokkolja az UPDATE-et, \u00e9s ford\u00edtva is \u00edgy van. Ez azt jelenti, hogy a olvas\u00f3 nem blokkolja az \u00edr\u00f3kat, \u00e9s az \u00edr\u00f3k sem blokkolj\u00e1k az olvas\u00f3kat. <\/p>\n<p><\/p>\n<p>Megmutatom ennek egy p\u00e9ld\u00e1j\u00e1t. Most v\u00e1laszt\u00e1st fogok v\u00e9gezni. Majd INSERT-et v\u00e9gz\u00fcnk. Akkor l\u00e1thatja \u2013 694. Meg fogja l\u00e1tni a tranzakci\u00f3 azonos\u00edt\u00f3j\u00e1t, amelyik ezt a besz\u00far\u00e1st v\u00e9gezte. \u00cdgy m\u0171k\u00f6dik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/f80f3b68ef43a75a9590ff200741ce83.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha most megn\u00e9zem a backend ID-met, akkor ez most 695 lett. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/65bc487bbfd7b325aa5cffa7373a40a4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e1tom, hogy a 695 megjelenik a t\u00e1bl\u00e1zatomban. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/6ac586641f978615db4d021e85ef702a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha itt \u00edgy v\u00e9gzek egy friss\u00edt\u00e9st, akkor egy m\u00e1sik esetet kapok. Ebben az esetben a 695 - kiz\u00e1r\u00f3lagos z\u00e1rol\u00e1s, \u00e9s az UPDATE-nek is hasonl\u00f3 a viselked\u00e9se, de k\u00f6z\u00f6tt\u00fck nem mer\u00fcl fel konfliktus, ami meglehet\u0151sen szokatlan. <\/p>\n<p><\/p>\n<p>Megjegyezheti, hogy fent \u2013 ez egy ShareLock, alul pedig \u2013 ez egy ExclusiveLock. Mindk\u00e9t tranzakci\u00f3 megt\u00f6rt\u00e9nt.<\/p>\n<p><\/p>\n<p>Meg kell hallgatnia az MVCC el\u0151ad\u00e1somat, hogy meg\u00e9rtse, hogyan t\u00f6rt\u00e9nik mindez. De ez egy illusztr\u00e1ci\u00f3 arra, hogy ezeket egyszerre meg lehet csin\u00e1lni, azaz egy id\u0151ben v\u00e9gezhet SELECT-et \u00e9s UPDATE-et.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/3bcf43cdb9ee72ea75e17c3bf71f3407.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>T\u00f6r\u00f6lj\u00fck le \u00e9s v\u00e9gezz\u00fcnk el ism\u00e9t egy m\u0171veletet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/fdae265dbebb0fae66e47cd4eb4b1bd6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha megpr\u00f3b\u00e1l egyszerre k\u00e9t UPDATE-et futtatni ugyanazon a soron, akkor az z\u00e1rol\u00f3dik. Ne feledje, hogy azt mondtam, hogy az olvas\u00f3 nem blokkolja az \u00edr\u00f3t, az \u00edr\u00f3 pedig az olvas\u00f3t, de egy \u00edr\u00f3 blokkolja a m\u00e1sik \u00edr\u00f3t. Teh\u00e1t nem v\u00e9gezhet\u00fcnk el k\u00e9t friss\u00edt\u00e9st egy id\u0151ben ugyanazon a soron. V\u00e1rni kell, am\u00edg az egyik befejezi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/ef9adfe81107468dfea1c5a837b28aaa.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ennek illusztr\u00e1l\u00e1s\u00e1ra megn\u00e9zem a Lockdemo t\u00e1bl\u00e1zatot. Megn\u00e9zz\u00fck az egyik sort. A tranzakci\u00f3t 698.<\/p>\n<p><\/p>\n<p>Ezt friss\u00edtett\u00fck 2-re. 699 \u2013 ez az els\u0151 friss\u00edt\u00e9s. \u00c9s ez sikeresen v\u00e9gbement, vagy \u00e9ppen v\u00e1rakozik a tranzakci\u00f3ra, \u00e9s arra v\u00e1r, hogy j\u00f3v\u00e1hagyjuk vagy visszavonjuk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/9794811cdc204141a74f67ee98fca1f6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De n\u00e9zd meg a m\u00e1sikat \u2013 2\/51 \u2013 ez a mi els\u0151 tranzakci\u00f3nk, az els\u0151 \u00fcl\u00e9s\u00fcnk. 3\/112 \u2013 ez a m\u00e1sodik k\u00e9r\u00e9s, amely felmer\u00fclt, \u00e9s amely megv\u00e1ltoztatta ezt az \u00e9rt\u00e9ket 3-ra. Ha \u00e9szreveszed, a fels\u0151 \u00f6nmag\u00e1t blokkolta, ami 699. De a 3\/112 nem biztos\u00edtott blokkol\u00e1st. A Lock_mode oszlopban az \u00e1ll, hogy v\u00e1rakozik. A 699-re v\u00e1r. Ha megn\u00e9zed, hol van 699, az fent van. \u00c9s mit tett az els\u0151 \u00fcl\u00e9s? L\u00e9trehozott egy kiz\u00e1r\u00f3lagos blokkol\u00e1st a saj\u00e1t tranzakci\u00f3s ID-j\u00e9n. \u00cdgy m\u0171k\u00f6dik a Postgres. Az blokkolja a saj\u00e1t tranzakci\u00f3s ID-j\u00e9t. \u00c9s ha v\u00e1rni akarsz, am\u00edg valaki meger\u0151s\u00edti vagy visszavonja, akkor v\u00e1rni kell, am\u00edg van egy v\u00e1rakoz\u00f3 tranzakci\u00f3. Ez\u00e9rt l\u00e1thatunk egy furcsa sort. <\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg m\u00e9g egyszer. Balra l\u00e1tjuk a feldolgoz\u00f3 ID-nket. A m\u00e1sodik oszlopban l\u00e1tjuk a tranzakci\u00f3 virtu\u00e1lis ID-j\u00e1t, a harmadikban pedig a lock_type-ot. Mit jelent ez? L\u00e9nyeg\u00e9ben azt mondja, hogy blokkolja a tranzakci\u00f3s ID-t. De vedd \u00e9szre, hogy az als\u00f3 sorokban mindn\u00e9l a relation \u00edr\u00e1s szerepel. Ez\u00e9rt k\u00e9tf\u00e9le blokkol\u00e1s van a t\u00e1bl\u00e1zatban. Van relation blokkol\u00e1s. Ezen k\u00edv\u00fcl van transactionid blokkol\u00e1s is, ahol saj\u00e1t magunkat blokkoljuk, \u00e9ppen az t\u00f6rt\u00e9nik az els\u0151 sorban, vagy legalul, ahol a transactionid van, ahol arra v\u00e1runk, hogy a 699 befejezze a m\u0171velet\u00e9t. <\/p>\n<p><\/p>\n<p>N\u00e9zem, mi t\u00f6rt\u00e9nik itt. Itt egyszerre k\u00e9t dolog t\u00f6rt\u00e9nik. Te a tranzakci\u00f3s ID blokkra n\u00e9zel az els\u0151 sorban, ami mag\u00e1t blokkolja. \u00c9s mag\u00e1t blokkolja, hogy az embereket v\u00e1rakoztassa. <\/p>\n<p><\/p>\n<p>Ha megn\u00e9zed a 6. sort, az ugyanaz a bejegyz\u00e9s, mint az els\u0151. Ez\u00e9rt a 699-es tranzakci\u00f3 blokkol\u00f3dik. A 700 is \u00f6nmag\u00e1t blokkolja. Azt\u00e1n az als\u00f3 sorban l\u00e1tni fogod, hogy v\u00e1rakozunk, am\u00edg a 699 befejezi a m\u0171velet\u00e9t.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/e712a48cdb9ddc496e4e196eb3bb97c3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A lock_type, tuple-ban l\u00e1thatod a sz\u00e1mokat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/575245898d8455f00583659264b96ce9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e1thatod, hogy ez 0\/10. Ez az oldal sz\u00e1ma, \u00e9s az adott sor offset-je is. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/7059c7661fc81a7101b2d92d38b6f64c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e1tod, hogy 0\/11-re v\u00e1ltozik, amikor friss\u00edt\u00fcnk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/4572ef7afc0ba8c8bbf5706ce9415d65.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De val\u00f3j\u00e1ban ez 0\/10, mert a m\u0171velet v\u00e1rakoz\u00e1sa t\u00f6rt\u00e9nik. Lehet\u0151s\u00e9g van arra, hogy megn\u00e9zze, hogy ez az a sor, amelyre v\u00e1rok, hogy meger\u0151s\u00edtsem. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/9dc6fb0e3dee8c0b1ccbb724d0bb6c75.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Miut\u00e1n meger\u0151s\u00edtett\u00fck \u00e9s r\u00e1kattintottunk a commit gombra, \u00e9s miut\u00e1n a friss\u00edt\u00e9s befejez\u0151d\u00f6tt, ez az, amit \u00fajra kapunk. A 700-as tranzakci\u00f3 az egyetlen z\u00e1rol\u00e1s, m\u00e1r senkire sem v\u00e1r, mert elk\u00f6telezt\u00e9k. Csak azt v\u00e1rja, hogy a tranzakci\u00f3 befejez\u0151dj\u00f6n. Amint a 699 befejez\u0151dik, m\u00e1r semmire sem v\u00e1runk. Most a 700-as tranzakci\u00f3 azt mondja, hogy minden rendben van, az \u00f6sszes sz\u00fcks\u00e9ges z\u00e1rol\u00e1s benne van az \u00f6sszes enged\u00e9lyezett t\u00e1bl\u00e1ban. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/42bc10a0c5bbda9bcf3a40f0dd87bc6b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s hogy m\u00e9g bonyolultabb\u00e1 tegy\u00fck a dolgot, l\u00e9trehozunk egy \u00faj n\u00e9zetet, amely ez\u00fattal egy hierarchi\u00e1t ny\u00fajt nek\u00fcnk. Nem v\u00e1rom el, hogy meg\u00e9rtsd ezt a lek\u00e9rdez\u00e9st. De ez vil\u00e1gosabb k\u00e9pet ad arr\u00f3l, mi t\u00f6rt\u00e9nik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/855f6dd22cba114b051e4eaac106c0ea.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez egy rekurz\u00edv n\u00e9zet, amelynek van egy m\u00e1sik szekci\u00f3ja is. Ezut\u00e1n visszat\u00e9r az eg\u00e9szhez. Haszn\u00e1ljuk ezt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/fdb54fae54fb87131c13d67a2f66fae2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mi lenne, ha h\u00e1rom egyidej\u0171 friss\u00edt\u00e9st v\u00e9gezn\u00e9nk, \u00e9s azt mondan\u00e1nk, hogy a sor most h\u00e1rom. Kicser\u00e9lj\u00fck a 3-at 4-re. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/f28e0d58e223ef9ccca9ba0acab5b0ce.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s itt l\u00e1tjuk a 4-est. \u00c9s a tranzakci\u00f3s ID 702. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/49553b4dc4bb4c07db099fd26a6da22c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Azt\u00e1n kicser\u00e9lem a 4-et 5-re, az 5-\u00f6t 6-ra, a 6-ot 7-re. Sorba \u00e1ll\u00edtok embereket, akik v\u00e1rakozni fognak arra, hogy ez az egy tranzakci\u00f3 befejez\u0151dj\u00f6n.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/7f4a4fef1745ad9cdcd602aa0474f6ec.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s minden vil\u00e1goss\u00e1 v\u00e1lik. Mi az els\u0151 sor? Ez a 702. Ez a tranzakci\u00f3s ID, amely eredetileg ezt az \u00e9rt\u00e9ket adta. \u00c9s mit \u00edrtam a Granted oszlopba? Van feljegyz\u00e9sem <code>f<\/code>. Ezek az \u00e9n friss\u00edt\u00e9seim, amelyek (5, 6, 7) nem ker\u00fclhetnek j\u00f3v\u00e1hagy\u00e1sra, mert arra v\u00e1runk, hogy a tranzakci\u00f3s ID 702 befejez\u0151dj\u00f6n. Ott van a tranzakci\u00f3s ID z\u00e1rol\u00e1sa. \u00c9s \u00edgy 5 tranzakci\u00f3s z\u00e1rol\u00e1s ID keletkezik.<\/p>\n<p><\/p>\n<p>Ha megn\u00e9zel a 704-re, a 705-re, akkor ott m\u00e9g semmi sincs le\u00edrva, mert m\u00e9g nem tudj\u00e1k, mi t\u00f6rt\u00e9nik. Csak annyit \u00edrnak, hogy fogalmuk sincs, mi t\u00f6rt\u00e9nik. \u00c9s csak aludni fognak, mert v\u00e1rj\u00e1k, hogy valaki befejezze, \u00e9s fel\u00e9bressz\u00e9k \u0151ket, amikor lehet\u0151s\u00e9g lesz a sor m\u00f3dos\u00edt\u00e1s\u00e1ra. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/af97313e395a47e43d5ca9e6c78271af.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cdgy n\u00e9z ki. Vil\u00e1gos, hogy mindannyian a 12-es sorra v\u00e1rnak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/611f2d09dfbf78abe6659f794d4ad4f6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez az, amit itt l\u00e1ttunk. Itt van 0\/12. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/738d1d9b272c6ef2f6e8dffd9cd9c061.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teh\u00e1t, amint az els\u0151 tranzakci\u00f3 j\u00f3v\u00e1hagy\u00e1sra ker\u00fcl, itt l\u00e1thatod, hogyan m\u0171k\u00f6dik a hierarchia. \u00c9s most minden vil\u00e1goss\u00e1 v\u00e1lik. Mindannyian tiszt\u00e1k lesznek. Val\u00f3j\u00e1ban m\u00e9g mindig v\u00e1rakoznak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/7f53df10dd5de8776a07094e68acd195.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez t\u00f6rt\u00e9nik. 702 elk\u00f6telez\u0151dik. Most 703 blokkolja ezt a sort, \u00e9s azt\u00e1n 704 v\u00e1r arra, hogy 703 elk\u00f6telez\u0151dj\u00f6n. 705 is erre v\u00e1r. Amikor ez mind befejez\u0151dik, akkor magukat kitakar\u00edtj\u00e1k. Szeretn\u00e9m megjegyezni, hogy mindannyian sorba \u00e1llnak. Ez nagyon hasonl\u00edt a forgalmi dug\u00f3ra, amikor mindenki az els\u0151 aut\u00f3ra v\u00e1r. Az els\u0151 aut\u00f3 meg\u00e1llt, \u00e9s mindenki hossz\u00fa sorba \u00e1ll. Azt\u00e1n elindul, majd a k\u00f6vetkez\u0151 aut\u00f3 el\u0151rel\u00e9phet, \u00e9s megkaphatja a blokkj\u00e1t, \u00e9s \u00edgy tov\u00e1bb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/44d6e80e90fbaa3c726bec204ee10f1b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s ha ez nem t\u0171nt el\u00e9g bonyolultnak, most fogunk besz\u00e9lni a holtpontokr\u00f3l. Nem tudom, ki tapasztalt m\u00e1r ilyet. Ez egy el\u00e9g gyakori probl\u00e9ma az adatb\u00e1zis rendszerekben. A holtpontok az a helyzet, amikor az egyik munkamenet v\u00e1r arra, hogy valami v\u00e9grehajt\u00f3djon egy m\u00e1sik munkamenet \u00e1ltal. Ek\u00f6zben a m\u00e1sik munkamenet v\u00e1r arra, hogy az els\u0151 v\u00e9grehajtson valamit. <\/p>\n<p><\/p>\n<p>P\u00e9ld\u00e1ul, ha Iv\u00e1n azt mondja: \"Adj nekem valamit\", \u00e9n meg azt mondom: \"Nem, csak akkor adom, ha te adsz nekem valami m\u00e1st.\" \u0150 meg azt v\u00e1laszolja: \"Nem adom neked ezt, hacsak te nem adsz nekem valamit.\" \u00c9s \u00edgy holtpontra ker\u00fcl\u00fcnk. Biztos vagyok benne, hogy Iv\u00e1n nem \u00edgy fog tenni, de \u00e9rted a l\u00e9nyeget: k\u00e9t ember szeretne valamit kapni, de nem hajland\u00f3ak adni, am\u00edg a m\u00e1sik nem adja meg, amit akarnak. Itt nincs megold\u00e1s. <\/p>\n<p><\/p>\n<p>Alapvet\u0151en az adatb\u00e1zisodnak ezt fel kell ismernie. Azt\u00e1n meg kell sz\u00fcntetnie vagy lez\u00e1rnia kell az egyik munkamenetet, mert k\u00fcl\u00f6nben \u00f6r\u00f6kre ott maradnak. Ezt l\u00e1tjuk az adatb\u00e1zisokban, ezt l\u00e1tjuk az oper\u00e1ci\u00f3s rendszerekben. Mindenhol, ahol p\u00e1rhuzamos folyamatok vannak, ez el\u0151fordulhat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/6acee6bc304593cdd9e411882b5e3406.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Most k\u00e9pez\u00fcnk k\u00e9t holtpontot. Be\u00e1ll\u00edtjuk 50 \u00e9s 80-ra. Az els\u0151 sorban friss\u00edtem 50-r\u0151l 50-re. A tranzakci\u00f3s sz\u00e1mom 710 lesz. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/28a2a7fb4f91b8f8c6c78affb32d249c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Azt\u00e1n 80-at 81-re v\u00e1ltoztatom, \u00e9s 50-et 51-re. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/f6653c36f5a09934035f4838ff0fa380.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cdgy fog kin\u00e9zni. \u00cdgy 710 blokkolja a sort, m\u00edg 711 meger\u0151s\u00edt\u00e9sre v\u00e1r. Ezt l\u00e1ttuk, amikor friss\u00edtett\u00fck. 710 birtokolja a sorunkat. A 711 v\u00e1r arra, hogy 710 befejezze a tranzakci\u00f3t.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/99718717ffb2024f4cb92509c2f2b878.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s ott m\u00e9g az is fel van t\u00fcntetve, hogy melyik sorban t\u00f6rt\u00e9nik a holtpont. Itt kezd \u00e9rdekes lenni a dolog.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/423fc8973c29be1504d5bf8828beaa71.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Most friss\u00edtj\u00fck 80-at 80-ra. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/3a4b24e58f96205dbdfa8480fac2262a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s itt kezd\u0151dik a deadlock. A 710-es v\u00e1rakozik a 711-es v\u00e1lasz\u00e1ra, \u00e9s a 711-es v\u00e1rakozik a 710-esre. \u00c9s ennek nem lesz j\u00f3 v\u00e9ge. Nincs ki\u00fat ebb\u0151l. Egym\u00e1s v\u00e1lasz\u00e1ra fognak v\u00e1rni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/19394fa0b4a19991a4a4cc1e181c47e8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s ez mind k\u00e9slekedni fog. Ezt nem akarjuk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/94c86723b8b42861d682c75f0c54b552.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A Postgresban van m\u00f3d a figyel\u00e9sre, amikor ez megt\u00f6rt\u00e9nik. \u00c9s amikor ez megt\u00f6rt\u00e9nik, kap egy ilyen hib\u00e1t. \u00c9s ebb\u0151l vil\u00e1gos, hogy egy meghat\u00e1rozott folyamat SHARE LOCK-ot v\u00e1r egy m\u00e1sik folyamatt\u00f3l, amelyet a 711-es blokkol. Az a folyamat v\u00e1rta, hogy SHARE LOCK-ot kapjon egy adott tranzakci\u00f3s ID-ra, \u00e9s blokkolja valamilyen m\u00e1sik folyamat. Itt teh\u00e1t deadlock helyzetr\u0151l van sz\u00f3.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/88a499d8f03be3c9f5bc6c93aa39c9a6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De l\u00e9tezik h\u00e1romoldal\u00fa deadlock? Ez lehets\u00e9ges? Igen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/20fae4c504b794b678d265a0b1e9e33d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Be\u00edrjuk ezeket a sz\u00e1mokat a t\u00e1bl\u00e1zatba. Cser\u00e9lj\u00fck a 40-et 40-re, blokkolunk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/67b7302545781681b182d4f6ddc93d9f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cser\u00e9lj\u00fck a 60-at 61-re, a 80-at pedig 81-re. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/87aa9680b0160be0d798b2697a0f425d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Azt\u00e1n a 80-at m\u00f3dos\u00edtjuk, \u00e9s \u2013 bum! <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/dc6179e048dfb42e1e11b75f956182c1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Most a 714-es a 715-\u00f6sre v\u00e1r. A 716-os a 715-\u00f6sre v\u00e1r. Ezzel m\u00e1r nem lehet mit tenni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/e5e190437f420783f4fca26f4f04ecd3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Itt m\u00e1r nem csak k\u00e9t ember van, hanem h\u00e1rom. \u00c9n szeretn\u00e9k valamit t\u0151led, \u0151 szeretne valamit a harmadik embert\u0151l, a harmadik ember pedig szeretne valamit t\u0151lem. \u00cdgy h\u00e1rmas v\u00e1rakoz\u00e1sba ker\u00fcl\u00fcnk, mivel mindannyian arra v\u00e1runk, hogy a m\u00e1sik befejezze, amit tennie kell. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/fde8e3cb14dc05c520693ca2a99cf5f1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A Postgres tudja, hogy ez melyik sorban t\u00f6rt\u00e9nik. Ez\u00e9rt egy olyan \u00fczenetet ad ki, amely megmutatja, hogy probl\u00e9m\u00e1ja van, ahol a h\u00e1rom bejegyz\u00e9s egym\u00e1st blokkolja. Itt nincsenek korl\u00e1toz\u00e1sok. Ez el\u0151fordulhat olyan esetben, amikor 20 bejegyz\u00e9s blokkolja egym\u00e1st. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/a3dde7b6092b3d2e93c4927b6b42d795.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A k\u00f6vetkez\u0151 probl\u00e9ma a serializ\u00e1lhat\u00f3. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/9bff965bafaa03a160c0787bfa8606fb.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha speci\u00e1lis serializ\u00e1lhat\u00f3 z\u00e1r.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/db310da4461e647ed498e58b1e878fda.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Visszat\u00e9r\u00fcnk a 719-hez. Ennek teljesen norm\u00e1lis a kimenete. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/e7eca0a2191a62014ad949583a45bf2f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Gombra kattintva tranzakci\u00f3t v\u00e9gezhet serializ\u00e1lhat\u00f3 m\u00f3dba.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/4aa78f3e4d07b8ca48d860e8df2dacda.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s most m\u00e1r tudja, hogy van egy m\u00e1sik z\u00e1r t\u00edpusa SA \u2013 ez a serializ\u00e1lhat\u00f3. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/f9e79b9b6b1cc581b2178b0285bd3213.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/603dc15cdda0a128c82e87275ca8ba85.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez\u00e9rt van egy \u00faj z\u00e1r t\u00edpusunk, amely SARieadLock n\u00e9ven ismert, ez egy sorozatos z\u00e1r, \u00e9s lehet\u0151v\u00e9 teszi a sorozatok bevitel\u00e9t.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/ce2644b0e8d8b71035044c56a94621f4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ezenk\u00edv\u00fcl egyedi indexeket is be lehet illeszteni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/053a37128688fe22040a2c5a3d5ad477.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ebben a t\u00e1bl\u00e1zatban egyedi indexeink vannak.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/284e50ea2b0b64a9efda8b9224f466ae.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha ide be\u00edrok egy 2-t, akkor van egy 2-m. De a legfel\u00fcl m\u00e9g egy 2-t illesztek be. L\u00e1tja, hogy a 721-nek kiz\u00e1r\u00f3lagos z\u00e1ra van. De most a 722 v\u00e1r arra, hogy a 721 befejezze a m\u0171velet\u00e9t, mert nem tudja beilleszteni a 2-t, am\u00edg nem tudja, mi t\u00f6rt\u00e9nik a 721-gyel. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/ee01a45e1e16fe0ab10f5d172048f35f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha altranzakci\u00f3t hajtunk v\u00e9gre.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/58a67f29a50c5e90d3770492eb7a8fc4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Itt van a 723.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/6684b92639d48e62b6abf55bea86a951.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha meg\u0151rizz\u00fck a pontot, majd friss\u00edtj\u00fck, akkor \u00faj tranzakci\u00f3s ID keletkezik. Ez m\u00e9g egy viselked\u00e9si jellemz\u0151, amir\u0151l tudnod kell. Ha visszaadjuk ezt, akkor a tranzakci\u00f3s ID elt\u0171nik. A 724 elt\u0171nik. De most megjelenik a 725. <\/p>\n<p><\/p>\n<p>\u00c9s mit pr\u00f3b\u00e1lok itt csin\u00e1lni? P\u00e9ld\u00e1kat szeretn\u00e9k bemutatni a szokatlan z\u00e1rol\u00e1sokra, amelyeket tal\u00e1lhatsz: legyen sz\u00f3 serializable z\u00e1rol\u00e1sokr\u00f3l vagy SAVEPOINT-r\u00f3l \u2013 ezek k\u00fcl\u00f6nb\u00f6z\u0151 t\u00edpus\u00fa z\u00e1rol\u00e1sok, amelyek megjelennek a z\u00e1rol\u00e1si t\u00e1bl\u00e1ban. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/3e0b5d4b4e84ca18e0e33cb46013cd70.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez explicit (k\u00e9zi) z\u00e1rol\u00e1sok l\u00e9trehoz\u00e1sa, ahol pg_advisory_lock. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/2ce5ecd96cec5bcf0f757eb0093759c3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e1tod, hogy a z\u00e1rol\u00e1s t\u00edpusa itt tan\u00e1csad\u00f3nak van felt\u00fcntetve. Itt pedig pirossal van \u00edrva \u201eadvisory\u201d. Ezt egyszerre lehet z\u00e1rolni a pg_advisory_unlock seg\u00edts\u00e9g\u00e9vel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/5b5ae66d50ce9aaa779bbf47de00b1d7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s a befejez\u00e9s\u00fcl szeretn\u00e9k m\u00e9g egy \u00e9rdekes dolgot bemutatni. L\u00e9trehozok egy m\u00e1sik t\u00edpust. De \u00f6sszekapcsolom a pg_locks t\u00e1bl\u00e1t a pg_stat_activity t\u00e1bl\u00e1val. Mi\u00e9rt szeretn\u00e9m ezt csin\u00e1lni? Mert ez lehet\u0151v\u00e9 teszi sz\u00e1momra, hogy megn\u00e9zhessem \u00e9s l\u00e1thassam az \u00f6sszes akt\u00edv munkamenetet, \u00e9s megfigyelhessem, hogy milyen z\u00e1rol\u00e1sokra v\u00e1rnak. Ez el\u00e9gg\u00e9 \u00e9rdekes, amikor \u00f6sszegy\u0171jtj\u00fck a z\u00e1rol\u00e1si t\u00e1bl\u00e1t \u00e9s a lek\u00e9rdez\u00e9sek t\u00e1bl\u00e1j\u00e1t. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/3949e48d9626a7a030b033dd05e7f042.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Itt l\u00e9trehozzuk a pg_stat_view-t. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/2b3b7b34bb35f5a67ac5d4ed1328a910.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Friss\u00edtj\u00fck az egy sort egyel. Itt l\u00e1tjuk a 724-et. Majd friss\u00edtj\u00fck a sorunkat h\u00e1romra. Mit l\u00e1tsz most itt? Ezek a lek\u00e9rdez\u00e9sek, teh\u00e1t l\u00e1tod a bal oszlopban felsorolt \u00f6sszes lek\u00e9rdez\u00e9st. A jobb oldalon pedig l\u00e1thatod a z\u00e1rol\u00e1sokat \u00e9s azt, hogy mit hoznak l\u00e9tre. Esetleg \u00e9rthet\u0151bb\u00e9 v\u00e1lik sz\u00e1modra, hogy ne kelljen minden alkalommal visszat\u00e9rned minden munkamenethez, hogy megn\u00e9zd, sz\u00fcks\u00e9g van-e csatlakozni hozz\u00e1juk vagy sem. Ezt helyett\u00fcnk elv\u00e9gzik. <\/p>\n<p><\/p>\n<p>Egy m\u00e1sik nagyon hasznos funkci\u00f3 az <code>pg_blocking_pids<\/code>Val\u00f3sz\u00edn\u0171leg soha nem hallott r\u00f3la. Mit csin\u00e1l? Lehet\u0151v\u00e9 teszi sz\u00e1munkra, hogy megmondjuk, hogy az 11740-es munkamenethez milyen ID-procesei vannak elv\u00e1rva. \u00c9s l\u00e1thatja, hogy az 11740 724-et v\u00e1r. A 724 a legfels\u0151bb helyen van. Az 11306 pedig az \u00f6n ID-processzora. Alapvet\u0151en ez a funkci\u00f3 bej\u00e1rja a z\u00e1rol\u00e1si t\u00e1bl\u00e1j\u00e1t. Tudom, hogy ez egy kicsit bonyolult, de meg tudja ezt \u00e9rteni. Alapvet\u0151en ez a funkci\u00f3 v\u00e9gigmegy ezen a z\u00e1rol\u00e1si t\u00e1bl\u00e1n, \u00e9s pr\u00f3b\u00e1lja megtal\u00e1lni, hol van ez a process ID, figyelembe v\u00e9ve a z\u00e1rol\u00e1sokat, amelyeket v\u00e1r. \u00c9s megpr\u00f3b\u00e1lja kisz\u00e1molni, hogy melyik process ID-je van annak a folyamatnak, amelyik v\u00e1r a z\u00e1rol\u00e1sokra. Ez\u00e9rt elind\u00edthatja ezt a funkci\u00f3t. <code>pg_blocking_pids<\/code>.<\/p>\n<p><\/p>\n<p>Ez nagyon hasznos lehet. Ezt csak a 9.6-os verzi\u00f3 \u00f3ta adtuk hozz\u00e1, \u00edgy ez a funkci\u00f3 mind\u00f6ssze 5 \u00e9ves, de nagyon \u00e9s nagyon hasznos. Ugyanez vonatkozik a m\u00e1sodik k\u00e9r\u00e9sre is. Az pontosan azt mutatja, amit l\u00e1tni akarunk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/d1975be02ba0cf516ba7bce400228e08.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez az, amir\u0151l besz\u00e9lni akartam \u00f6nnel. Ahogy v\u00e1rtam, az \u00f6sszes id\u0151nket felhaszn\u00e1ltuk, mert annyi di\u00e1nk volt. A di\u00e1kat le lehet t\u00f6lteni. Szeretn\u00e9m megk\u00f6sz\u00f6nni, hogy itt volt. Biztos vagyok benne, hogy \u00e9lvezni fogja a konferencia h\u00e1tral\u00e9v\u0151 r\u00e9sz\u00e9t, nagyon k\u00f6sz\u00f6n\u00f6m!<\/p>\n<p><\/p>\n<p>K\u00e9rd\u00e9sek:<\/p>\n<p><\/p>\n<p><em>P\u00e9ld\u00e1ul, ha pr\u00f3b\u00e1lom friss\u00edteni a sorokat, m\u00edg a m\u00e1sodik munkamenet pr\u00f3b\u00e1lja t\u00f6r\u00f6lni az eg\u00e9sz t\u00e1bl\u00e1t. Amennyire tudom, ott kell lennie valaminek, mint egy sz\u00e1nd\u00e9kos z\u00e1rol\u00e1s. Van ilyen a Postgresben?<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/ffe86d27f8bc467aeb3884320258d032.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Visszat\u00e9rve az elej\u00e9re. Tal\u00e1n eml\u00e9kszik, hogy amikor b\u00e1rmit csin\u00e1l, p\u00e9ld\u00e1ul amikor SELECT-t haszn\u00e1l, kiadunk AccessShareLock-ot. Ez megakad\u00e1lyozza az eg\u00e9sz t\u00e1bla t\u00f6rl\u00e9s\u00e9t. Sz\u00f3val, ha p\u00e9ld\u00e1ul friss\u00edteni pr\u00f3b\u00e1l egy sort a t\u00e1bl\u00e1ban vagy t\u00f6r\u00f6lni egy sort, akkor valaki nem tudja egyszerre t\u00f6r\u00f6lni az eg\u00e9sz t\u00e1bl\u00e1t ezzel, mert rajta van ez az AccessShareLock az eg\u00e9sz t\u00e1bl\u00e1n \u00e9s azon a soron. \u00c9s amint befejezte, t\u00f6r\u00f6lhetik. De am\u00edg k\u00f6zvetlen\u00fcl valamit ott v\u00e1ltoztat, nem tudj\u00e1k megtenni.<\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg \u00fajra. T\u00e9rj\u00fcnk r\u00e1 a t\u00f6rl\u00e9s p\u00e9ld\u00e1j\u00e1ra. \u00c9s l\u00e1tja, hogy egy exkluz\u00edv z\u00e1rol\u00e1s van az eg\u00e9sz t\u00e1bl\u00e1n. <\/p>\n<p><\/p>\n<p><em>Ennek \u00edgy exkluz\u00edv z\u00e1rol\u00e1snak kell kin\u00e9znie, igaz?<\/em><\/p>\n<p><\/p>\n<p>Igen, ez \u00edgy n\u00e9z ki. \u00c9rtem, mir\u0151l besz\u00e9l. Azt mondja, hogy ha SELECT-et v\u00e9gzek, akkor ShareExclusive-re v\u00e1ltok, majd ha ezt Row Exclusive \u00e1llapotba helyezem, akkor ez probl\u00e9m\u00e1t jelent? De meglep\u0151 m\u00f3don ez nem okoz probl\u00e9m\u00e1t. Olyan, mintha megn\u0151ne a z\u00e1rol\u00e1s m\u00e9rt\u00e9ke, de l\u00e9nyeg\u00e9ben van egy z\u00e1rol\u00e1som, amely megakad\u00e1lyozza a t\u00f6rl\u00e9st. \u00c9s most, amikor ezt a z\u00e1rol\u00e1st er\u0151sebb\u00e9 teszem, m\u00e9g mindig megakad\u00e1lyozza a t\u00f6rl\u00e9st. Teh\u00e1t nem arr\u00f3l van sz\u00f3, hogy felfel\u00e9 haladok. Vagyis megakad\u00e1lyozta ezt, amikor m\u00e9g alacsonyabb szinten volt, ez\u00e9rt amikor felemelem a szintet, akkor is megakad\u00e1lyozza a t\u00e1bl\u00e1zat t\u00f6rl\u00e9s\u00e9t. <\/p>\n<p><\/p>\n<p>\u00c9rtem, mir\u0151l besz\u00e9l. Itt nincs olyan eset, amikor a z\u00e1rol\u00e1s m\u00e9rt\u00e9k\u00e9nek n\u00f6vel\u00e9se t\u00f6rt\u00e9nik, ahol megpr\u00f3b\u00e1lja feladni egy z\u00e1rol\u00e1st, hogy egy er\u0151sebbet vezessen be. Itt egyszer\u0171en mindenhol fokozza ezt a megakad\u00e1lyoz\u00e1st, ez\u00e9rt nem okoz konfliktust. De ez egy j\u00f3 k\u00e9rd\u00e9s. K\u00f6sz\u00f6n\u00f6m, hogy feltette!<\/p>\n<p><\/p>\n<p><em>Mit kell tenn\u00fcnk ahhoz, hogy elker\u00fclj\u00fck a deadlock helyzetet, amikor sok session \u00e9s sok felhaszn\u00e1l\u00f3 van?<\/em><\/p>\n<p><\/p>\n<p>A Postgres automatikusan \u00e9szleli a deadlock helyzeteket. \u00c9s automatikusan elt\u00e1vol\u00edt egy session-t. Az egyetlen m\u00f3dja annak, hogy elker\u00fclj\u00fck a holt z\u00e1rol\u00e1sokat, ha az embereket ugyanabban a sorrendben z\u00e1rjuk le. Teh\u00e1t amikor megn\u00e9zi az alkalmaz\u00e1s\u00e1t, gyakran a deadlock-ok oka\u2026 Tegy\u00fck fel, hogy k\u00e9t k\u00fcl\u00f6nb\u00f6z\u0151 dolgot szeretn\u00e9k z\u00e1rolni. Az egyik alkalmaz\u00e1s z\u00e1rolja az 1-es t\u00e1bl\u00e1zatot, a m\u00e1sik alkalmaz\u00e1s pedig a 2-est, majd az 1-est. A legegyszer\u0171bb m\u00f3dja a deadlock-ok elker\u00fcl\u00e9s\u00e9nek az, hogy megn\u00e9zze az alkalmaz\u00e1s\u00e1t, \u00e9s megpr\u00f3b\u00e1lja biztos\u00edtani, hogy a z\u00e1rol\u00e1s ugyanabban a sorrendben t\u00f6rt\u00e9njen minden alkalmaz\u00e1sban. Ez \u00e1ltal\u00e1ban elt\u00e1vol\u00edtja a probl\u00e9m\u00e1k 80%-\u00e1t, mert sokf\u00e9le ember \u00edrja ezeket az alkalmaz\u00e1sokat. Ha ugyanabban a sorrendben z\u00e1rolja \u0151ket, akkor nem fog tal\u00e1lkozni deadlock helyzettel.<\/p>\n<p><\/p>\n<p><em>Nagyon k\u00f6sz\u00f6n\u00f6m az el\u0151ad\u00e1s\u00e1t! Besz\u00e9lt a vacuum full-r\u00f3l, \u00e9s ha j\u00f3l \u00e9rtem, akkor a vacuum full deform\u00e1lja a rekordok sorrendj\u00e9t egyetlen t\u00e1rol\u00f3n bel\u00fcl, \u00edgy a jelenlegi rekordokat v\u00e1ltozatlanul tartja. Mi\u00e9rt ig\u00e9nyel a vacuum full kiz\u00e1r\u00f3lagos z\u00e1rol\u00e1st, \u00e9s mi\u00e9rt \u00fctk\u00f6zik a \u00edr\u00e1si m\u0171veletekkel?<\/em><\/p>\n<p><\/p>\n<p>Ez egy j\u00f3 k\u00e9rd\u00e9s. Az oka az, hogy a vacuum full el\u00e9r egy t\u00e1bl\u00e1t. L\u00e9nyeg\u00e9ben egy \u00faj verzi\u00f3t hozunk l\u00e9tre a t\u00e1bl\u00e1b\u00f3l. A t\u00e1bla \u00faj lesz. Teh\u00e1t ez tulajdonk\u00e9ppen egy teljesen \u00faj verzi\u00f3ja a t\u00e1bl\u00e1nak. A probl\u00e9ma az, hogy amikor ezt csin\u00e1ljuk, nem akarjuk, hogy az emberek olvass\u00e1k, mert szeretn\u00e9nk, ha l\u00e1tj\u00e1k az \u00faj t\u00e1bl\u00e1t. Ez\u00e9rt kapcsol\u00f3dik ez az el\u0151z\u0151 k\u00e9rd\u00e9shez. Ha egyszerre tudn\u00e1nk olvasni, akkor nem tudn\u00e1nk azt \u00e1thelyezni \u00e9s az embereket az \u00faj t\u00e1bl\u00e1hoz ir\u00e1ny\u00edtani. V\u00e1rnunk kellene, hogy mindenki befejezze a r\u00e9gi t\u00e1bla olvas\u00e1s\u00e1t, \u00e9s ez\u00e9rt l\u00e9nyeg\u00e9ben ez egy exkluz\u00edv z\u00e1r\u00e1si helyzet.<br \/>\nCsak annyit mondunk, hogy az elej\u00e9n z\u00e1roljuk, mert tudjuk, hogy a v\u00e9g\u00e9n exkluz\u00edv z\u00e1r\u00e1sra lesz sz\u00fcks\u00e9g\u00fcnk, hogy mindenkit \u00e1ttolhassunk az \u00faj p\u00e9ld\u00e1nyra. Ez\u00e9rt potenci\u00e1lisan enged\u00e9lyezhetj\u00fck. \u00cdgy csin\u00e1ljuk ezt p\u00e1rhuzamos indexel\u00e9s mellett. De ez sokkal nehezebb megval\u00f3s\u00edtani. Ez nagyon szoros \u00f6sszef\u00fcgg\u00e9sben \u00e1ll az el\u0151z\u0151 k\u00e9rd\u00e9s\u00e9vel az exkluz\u00edv z\u00e1rral kapcsolatban.<\/p>\n<p><\/p>\n<p><em>Lehets\u00e9ges locking timeoutot hozz\u00e1adni a Postgreshez? Az Oracle-ben p\u00e9ld\u00e1ul \u00edrhatom, hogy \u201ev\u00e1laszd az update-t\u201d, \u00e9s 50 m\u00e1sodpercig v\u00e1rok a friss\u00edt\u00e9sre. Ez j\u00f3l m\u0171k\u00f6d\u00f6tt az alkalmaz\u00e1s sz\u00e1m\u00e1ra. De a Postgresben vagy azonnal meg kell tennem, \u00e9s egy\u00e1ltal\u00e1n nem v\u00e1rhatok, vagy v\u00e1rnom kell egy bizonyos ideig.<\/em> <\/p>\n<p><\/p>\n<p>Igen, v\u00e1laszthat k\u00e9sleltet\u00e9st a z\u00e1rol\u00e1saihoz, a locks-hoz. Kiad\u00e1ssal olyan parancsot is adhat, ami \u2026, ha nem tud azonnal z\u00e1rolni. Teh\u00e1t vagy lock timeout, vagy valami m\u00e1s, ami lehet\u0151v\u00e9 teszi ezt. Ez nem a szintaktikai szinten t\u00f6rt\u00e9nik. Ez egy szerverv\u00e1ltoz\u00f3k\u00e9nt m\u0171k\u00f6dik. N\u00e9ha ezt nem lehet haszn\u00e1lni.<\/p>\n<p><\/p>\n<p><em>Meg tudod nyitni a 75-ik di\u00e1t?<\/em> <\/p>\n<p><\/p>\n<p>Igen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A Postgres Lock Manager felold\u00e1sa. Bruce Momjian\" src=\"\/wp-content\/uploads\/2020\/07\/5f0f3ee9ba29e0c231dd6e0eb66b4f6c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><em>A k\u00e9rd\u00e9sem a k\u00f6vetkez\u0151. Mi\u00e9rt v\u00e1r mindk\u00e9t friss\u00edt\u00e9si folyamat 703-ra?<\/em><\/p>\n<p><\/p>\n<p>Ez egy nagyszer\u0171 k\u00e9rd\u00e9s. Igaz\u00e1b\u00f3l nem \u00e9rtem, hogy mi\u00e9rt csin\u00e1lja ezt a Postgres. De amikor a 703-as l\u00e9trej\u00f6tt, akkor a 702-es volt a v\u00e1rakoz\u00e1sban. \u00c9s amikor a 704-es \u00e9s 705-\u00f6s megjelenik, \u00fagy t\u0171nik, hogy nem tudj\u00e1k, mit v\u00e1rnak, mert m\u00e9g semmi sincs ott. A Postgres \u00edgy csin\u00e1lja: amikor nem tudja megszerezni a z\u00e1rol\u00e1st, azt mondja, hogy 'Mi\u00e9rt is dolgozn\u00e1nk veled?', mert m\u00e1r \u00fagyis valakire v\u00e1rsz. Sz\u00f3val hagyjuk, hogy csak l\u00f3gjon a leveg\u0151ben, mert egy\u00e1ltal\u00e1n nem friss\u00edti ezt. De mi t\u00f6rt\u00e9nt itt? Amint a 702-es befejezte a folyamatot \u00e9s a 703-as megkapta a z\u00e1rol\u00e1s\u00e1t, a rendszer visszat\u00e9rt. Azt mondta, hogy most m\u00e1r van k\u00e9t ember, aki v\u00e1rakozik. Azt\u00e1n friss\u00edts\u00fck \u0151ket egy\u00fctt. \u00c9s jelezz\u00fck, hogy mindketten v\u00e1rakoznak. <\/p>\n<p><\/p>\n<p>Nem tudom, mi\u00e9rt csin\u00e1lja ezt a Postgres. De van egy probl\u00e9ma, amit f...-nak h\u00edvnak. Szerintem ez nem egy orosz kifejez\u00e9s. Ez az, amikor mindenki ugyanarra a z\u00e1rol\u00e1sra v\u00e1r, m\u00e9g ha 20 p\u00e9ld\u00e1ny is v\u00e1rakozik a z\u00e1rol\u00e1sra. \u00c9s hirtelen mind egyszerre fel\u00e9brednek. \u00c9s mindenki pr\u00f3b\u00e1l reag\u00e1lni. De a rendszer \u00fagy csin\u00e1lja, hogy mindenki a 703-ra v\u00e1r. Mivel mindenki v\u00e1r, az \u00f6sszeset azonnal sorba \u00e1ll\u00edtjuk. \u00c9s ha meg\u00e9rkezik b\u00e1rmilyen \u00faj k\u00e9r\u00e9s, amelyet ezut\u00e1n adtak be, p\u00e9ld\u00e1ul a 707-es, akkor ott \u00fajra \u00fcress\u00e9g lesz. <\/p>\n<p><\/p>\n<p>Szerintem ezt az\u00e9rt csin\u00e1lj\u00e1k, hogy el lehessen mondani, hogy ezen a ponton a 702-es a 703-asra v\u00e1r, m\u00edg azoknak, akik ezut\u00e1n j\u00f6nnek, nem lesz bejegyz\u00e9s\u00fck ezen a mez\u0151n. De amint az els\u0151 v\u00e1rakoz\u00f3 t\u00e1vozik, \u00e9s mindenki, aki abban az id\u0151ben v\u00e1rt a friss\u00edt\u00e9s el\u0151tt, megkapja ugyanazt a jelet. Ez\u00e9rt \u00fagy gondolom, hogy ezt az\u00e9rt csin\u00e1lt\u00e1k, hogy sorban tudjuk \u0151ket kezelni, hogy helyesen legyenek rendezve. <\/p>\n<p><\/p>\n<p>Mindig is egy el\u00e9g furcsa jelens\u00e9gk\u00e9nt tekintettem r\u00e1. Mert itt p\u00e9ld\u00e1ul egy\u00e1ltal\u00e1n nem soroljuk fel \u0151ket. De \u00fagy \u00e9rzem, hogy mindig, amikor \u00faj z\u00e1rol\u00e1st adunk, megn\u00e9zz\u00fck az \u00f6sszes v\u00e1rakoz\u00f3 folyamatot. Akkor mindannyiukat sorba \u00e1ll\u00edtjuk. \u00c9s azt\u00e1n b\u00e1rmely \u00faj, aki j\u00f6n, csak akkor ker\u00fcl a sorba, amikor a k\u00f6vetkez\u0151 ember befejezte a feldolgoz\u00e1st. Nagyon j\u00f3 k\u00e9rd\u00e9s. K\u00f6sz\u00f6n\u00f6m sz\u00e9pen a k\u00e9rd\u00e9st!<\/p>\n<p><\/p>\n<p><em>Szerintem logikusabb lenne, ha a 705-\u00f6s a 704-esre v\u00e1rna.<\/em> <\/p>\n<p><\/p>\n<p>A probl\u00e9ma itt a k\u00f6vetkez\u0151. Technikailag fel\u00e9breszthetj\u00fck ezt az egyet vagy azt a m\u00e1sikat. \u00c9ppen ez\u00e9rt fel fogjuk \u00e9breszteni ezt vagy azt. De mi t\u00f6rt\u00e9nik a rendszer m\u0171k\u00f6d\u00e9s\u00e9ben? L\u00e1tja, hogy 703 a legfels\u0151 r\u00e9szen blokkolta a saj\u00e1t tranzakci\u00f3s ID-j\u00e1t. \u00cdgy m\u0171k\u00f6dik a Postgres. \u00c9s 703 a saj\u00e1t tranzakci\u00f3s ID-j\u00e1t\u00f3l blokkolva van, ez\u00e9rt ha valaki v\u00e1rni akar, akkor v\u00e1rni fog 703-ra. \u00c9s l\u00e9nyeg\u00e9ben 703 befejezi. Csak miut\u00e1n befejez\u0151d\u00f6tt, valamelyik folyamat \u00e9bred fel. \u00c9s nem tudjuk, pontosan melyik folyamat lesz az. Ezut\u00e1n fokozatosan mindent feldolgozunk. De nem vil\u00e1gos, hogy melyik folyamat \u00e9bred fel el\u0151sz\u00f6r, mert b\u00e1rmelyik ezek k\u00f6z\u00fcl lehet. L\u00e9nyeg\u00e9ben volt egy \u00fctemez\u0151nk, amely azt mondta, hogy most \u00e9bressz\u00fck fel azon folyamatok b\u00e1rmelyik\u00e9t. Csak v\u00e9letlenszer\u0171en v\u00e1lasztunk egyet. Ez\u00e9rt mindkett\u0151t meg kell jel\u00f6lni, mert b\u00e1rmelyiket fel tudjuk \u00e9breszteni. <\/p>\n<p><\/p>\n<p>A probl\u00e9ma az, hogy nek\u00fcnk CP-v\u00e9gtelen\u00edt\u00e9s\u00fcnk van. \u00c9s ez\u00e9rt val\u00f3sz\u00edn\u0171leg fel\u00e9breszthet\u00fcnk egy k\u00e9s\u0151bbit. Ha p\u00e9ld\u00e1ul a k\u00e9s\u0151bbit \u00e9bresztj\u00fck fel, akkor arra fogunk v\u00e1rni, aki \u00e9ppen blokkol\u00e1st kapott, \u00e9s ez\u00e9rt nem tudjuk meghat\u00e1rozni, ki lesz az, aki el\u0151sz\u00f6r \u00e9bred fel. Csak egy ilyen helyzetet teremt\u00fcnk, \u00e9s a rendszer v\u00e9letlenszer\u0171 rendben fogja fel\u00e9breszteni \u0151ket. <\/p>\n<p><\/p>\n<p><em>Van <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/erogov\/posts\/\">cikkek a z\u00e1rol\u00e1sokr\u00f3l Jegor Rogovt\u00f3l<\/a><\/noindex>. N\u00e9zze, ezek is \u00e9rdekesek \u00e9s hasznosak. A t\u00e9ma term\u00e9szetesen borzaszt\u00f3an bonyolult. Nagyon k\u00f6sz\u00f6n\u00f6m, Bruce!<\/em><\/p>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/510322\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2020 \u0433\u043e\u0434\u0430 \u0411\u0440\u044e\u0441\u0430 \u041c\u043e\u043c\u0436\u0438\u0430\u043d\u0430 &quot;Unlocking the Postgres Lock Manager&quot;. (\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0412\u0441\u0435 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438\u0437 \u0441\u043b\u0430\u0439\u0434\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435: http:\/\/momjian.us\/main\/writings\/pgsql\/locking.sql) \u041f\u0440\u0438\u0432\u0435\u0442! \u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u043e\u0432\u0430 \u0431\u044b\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u0432 \u0420\u043e\u0441\u0441\u0438\u0438. \u042f \u043f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u044f \u043d\u0435 \u0441\u043c\u043e\u0433 \u043f\u0440\u0438\u0435\u0445\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0433\u043e\u0434\u0443, \u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u0443 \u0418\u0432\u0430\u043d\u0430 \u0438 \u0443 \u043c\u0435\u043d\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u043b\u0430\u043d\u044b. \u042f, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87955,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87954","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=\"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2020 \u0433\u043e\u0434\u0430 \u0411\u0440\u044e\u0441\u0430 \u041c\u043e\u043c\u0436\u0438\u0430\u043d\u0430 &quot;Unlocking the Postgres Lock Manager&quot;.\" \/>\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\/unlocking-the-postgres-lock-manager-bryus-momzhian\" \/>\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\udd47Unlocking the Postgres Lock Manager. \u0411\u0440\u044e\u0441 \u041c\u043e\u043c\u0436\u0438\u0430\u043d | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2020 \u0433\u043e\u0434\u0430 \u0411\u0440\u044e\u0441\u0430 \u041c\u043e\u043c\u0436\u0438\u0430\u043d\u0430 &quot;Unlocking the Postgres Lock Manager&quot;.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/unlocking-the-postgres-lock-manager-bryus-momzhian\" \/>\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-07-11T23:42:48+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-11T23:42:48+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\udd47A Postgres Lock Manager felold\u00e1sa. Bruce Momjian | ProHoster","description":"A 2020-es Bruce Momjian el\u0151ad\u00e1s\u00e1nak \"Az PostgreSQL Lock Manager felold\u00e1sa\" c\u00edm\u0171 \u00e9rtekez\u00e9se.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/unlocking-the-postgres-lock-manager-bryus-momzhian","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\udd47Unlocking the Postgres Lock Manager. \u0411\u0440\u044e\u0441 \u041c\u043e\u043c\u0436\u0438\u0430\u043d | ProHoster","og:description":"\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 2020 \u0433\u043e\u0434\u0430 \u0411\u0440\u044e\u0441\u0430 \u041c\u043e\u043c\u0436\u0438\u0430\u043d\u0430 &quot;Unlocking the Postgres Lock Manager&quot;.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/unlocking-the-postgres-lock-manager-bryus-momzhian","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-07-11T23:42:48+00:00","article:modified_time":"2020-07-11T23:42:48+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87954","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 13:40:34","updated":"2022-09-27 23:56:25","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\/87954","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=87954"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/87954\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/87955"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=87954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=87954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=87954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}