{"id":33872,"date":"2019-10-31T21:55:09","date_gmt":"2019-10-31T18:55:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/postgresql-11-evolyutsiya-sektsionirovaniya-ot-postgres-9-6-do-postgres-11\/"},"modified":"2019-10-31T21:55:09","modified_gmt":"2019-10-31T18:55:09","slug":"postgresql-11-evolyutsiya-sektsionirovaniya-ot-postgres-9-6-do-postgres-11","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/postgresql-11-evolyutsiya-sektsionirovaniya-ot-postgres-9-6-do-postgres-11","title":{"rendered":"PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u015awietnego pi\u0105tku dla wszystkich! Coraz mniej czasu do rozpocz\u0119cia kursu. <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/CIBR\/\">\u201eRelacyjne bazy danych\u201d<\/a><\/noindex>, dlatego dzisiaj dzielimy si\u0119 t\u0142umaczeniem kolejnego przydatnego materia\u0142u na ten temat.<\/p>\n<p>W procesie rozwoju <noindex><a rel=\"nofollow\" href=\"https:\/\/www.2ndquadrant.com\/postgresql\/2ndquadrants-passion-postgresql\/contributions-postgresql-11\/\">PostgreSQL 11<\/a><\/noindex> zosta\u0142a wykonana imponuj\u0105ca praca nad popraw\u0105 sekcjonowania tabel. <b>Sekcjonowanie tabel<\/b> to funkcja, kt\u00f3ra istnia\u0142a w PostgreSQL przez do\u015b\u0107 d\u0142ugi czas, ale, \u017ceby tak to uj\u0105\u0107, w zasadzie nie by\u0142a obecna a\u017c do 10 wersji, w kt\u00f3rej sta\u0142a si\u0119 bardzo u\u017cyteczn\u0105 funkcj\u0105. Wcze\u015bniej twierdzili\u015bmy, \u017ce dziedziczenie tabel to nasza realizacja sekcjonowania, i to prawda. Tylko ten spos\u00f3b zmusza\u0142 ci\u0119 do wykonania wi\u0119kszo\u015bci pracy r\u0119cznie. Na przyk\u0142ad, je\u015bli chcia\u0142e\u015b, aby krotki by\u0142y wstawiane do sekcji podczas INSERT\u00f3w, musia\u0142e\u015b skonfigurowa\u0107 wyzwalacze, aby to za ciebie robi\u0142y. Sekcjonowanie przez dziedziczenie by\u0142o bardzo wolne i trudne w rozwoju dodatkowych funkcji na jego podstawie.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>W PostgreSQL 10 zobaczyli\u015bmy narodziny \u201edeklaratywnego sekcjonowania\u201d \u2013 funkcji zaprojektowanej, aby rozwi\u0105za\u0107 wiele problem\u00f3w, kt\u00f3re by\u0142y nierozwi\u0105zywalne przy u\u017cyciu starej metody opartej na dziedziczeniu. Doprowadzi\u0142o to do powstania znacznie pot\u0119\u017cniejszego narz\u0119dzia, kt\u00f3re umo\u017cliwia nam dzielenie danych w spos\u00f3b poziomy!<\/p>\n<p><b>Por\u00f3wnanie funkcji<\/b><\/p>\n<p>W PostgreSQL 11 pojawi\u0142 si\u0119 imponuj\u0105cy zestaw nowych funkcji, kt\u00f3re pomagaj\u0105 poprawi\u0107 wydajno\u015b\u0107 i uczyni\u0107 sekcjonowane tabele bardziej przejrzystymi dla aplikacji.<\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11\" src=\"\/wp-content\/uploads\/2019\/05\/13ef675b91bb0701719c816882bd3e8b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11\" src=\"\/wp-content\/uploads\/2019\/05\/d87349281f0dc0820a064d81f80407d1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11\" src=\"\/wp-content\/uploads\/2019\/05\/3bb3beeedf803f1fdbe58a858076478c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>1. U\u017cywaj\u0105c ogranicze\u0144 wyj\u0105tk\u00f3w<br \/>\n2. Dodaje tylko w\u0119z\u0142y<br \/>\n3. Tylko dla sekcjonowanej tabeli, odnosz\u0105cej si\u0119 do niesekcjonowanej<br \/>\n4. Indeksy musz\u0105 zawiera\u0107 wszystkie kluczowe kolumny sekcji<br \/>\n5. Ograniczenia na sekcj\u0119 z obu stron musz\u0105 si\u0119 zgadza\u0107<\/i><\/p>\n<p><b>Wydajno\u015b\u0107<\/b><\/p>\n<p>Mamy r\u00f3wnie\u017c dobre wie\u015bci! Dodano now\u0105 metod\u0119 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.2ndquadrant.com\/blog\/http2ndquadrant-com\/partition-elimination-postgresql-11\/%22\">usuwania sekcji<\/a><\/noindex>. Ten nowy algorytm mo\u017ce okre\u015bla\u0107 odpowiednie sekcje, przegl\u0105daj\u0105c warunki zapytania <code>WHERE<\/code>. Poprzedni algorytm, z kolei, sprawdza\u0142 ka\u017cd\u0105 sekcj\u0119, aby okre\u015bli\u0107, czy mo\u017ce ona odpowiada\u0107 warunkowi <code>WHERE<\/code>. To prowadzi\u0142o do dodatkowego wzrostu czasu planowania w miar\u0119 wzrostu liczby sekcji.<\/p>\n<p>W wersji 9.6, przy sekcjonowaniu za pomoc\u0105 dziedziczenia, routowanie krotek w sekcji zazwyczaj odbywa\u0142o si\u0119 poprzez napisanie funkcji wyzwalaj\u0105cej, kt\u00f3ra zawiera\u0142a szereg operator\u00f3w IF do wstawienia krotki do odpowiedniej sekcji. Funkcje te mog\u0142y by\u0107 bardzo wolne w wykonywaniu. Dzi\u0119ki deklaratywnemu sekcjonowaniu, dodanemu w wersji 10, dzia\u0142a to znacznie szybciej.<\/p>\n<p>U\u017cywaj\u0105c sekcjonowanej tabeli z 100 sekcjami, mo\u017cemy oceni\u0107 wydajno\u015b\u0107 \u0142adowania 10 milion\u00f3w wierszy do tabeli z 1 kolumn\u0105 BIGINT i 5 kolumnami INT.<\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11\" src=\"\/wp-content\/uploads\/2019\/05\/02c33ba997f187890046215997a689fc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWydajno\u015b\u0107 zapytania do tej tabeli w celu wyszukania jednego indeksowanego rekordu i wykonania DML w celu manipulacji jednym rekordem (u\u017cywaj\u0105c tylko 1 procesora):<\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL 11: Ewolucja partycjonowania od Postgres 9.6 do Postgres 11\" src=\"\/wp-content\/uploads\/2019\/05\/8e69519dd97c6f2e60112908418e5c97.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTutaj widzimy, \u017ce wydajno\u015b\u0107 ka\u017cdej operacji znacznie wzros\u0142a po PG 9.6. Zapytania <code>SELECT<\/code> wygl\u0105daj\u0105 znacznie lepiej, szczeg\u00f3lnie te, kt\u00f3re potrafi\u0105 wyklucza\u0107 wiele sekcji podczas planowania zapyta\u0144. Oznacza to, \u017ce planner mo\u017ce pomin\u0105\u0107 du\u017c\u0105 cz\u0119\u015b\u0107 pracy, kt\u00f3r\u0105 musia\u0142 wcze\u015bniej wykona\u0107. Na przyk\u0142ad \u015bcie\u017cki do niepotrzebnych sekcji nie s\u0105 ju\u017c budowane.<\/p>\n<p><b>Podsumowanie<\/b><\/p>\n<p>Sekcjonowanie tabel zaczyna stawa\u0107 si\u0119 bardzo pot\u0119\u017cn\u0105 funkcj\u0105 w PostgreSQL. <b>Pozwala szybko wyprowadza\u0107 dane online i przek\u0142ada\u0107 je na offline, nie czekaj\u0105c na zako\u0144czenie wolnych masowych operacji DML.<\/b>Oznacza to r\u00f3wnie\u017c, \u017ce powi\u0105zane dane mog\u0105 by\u0107 przechowywane razem, co pozwala na o wiele bardziej efektywny dost\u0119p do wymaganych danych. Ulepszenia w tej wersji by\u0142yby niemo\u017cliwe bez programist\u00f3w, recenzent\u00f3w i komitter\u00f3w, kt\u00f3rzy niestrudzenie pracowali nad wszystkimi tymi funkcjami.<br \/>\nDzi\u0119ki nim wszystkim! <b>PostgreSQL 11 wygl\u0105da po prostu fantastycznie!<\/b><\/p>\n<p>To kr\u00f3tki, ale do\u015b\u0107 interesuj\u0105cy artyku\u0142. Dzielcie si\u0119 komentarzami i pami\u0119tajcie, aby zapisa\u0107 si\u0119 na <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/37jj\/\">dzie\u0144 otwarty<\/a><\/noindex>, w ramach kt\u00f3rego dok\u0142adnie przedstawiona zostanie program kursu.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/452280\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e\u0439 \u0432\u0441\u0435\u043c \u043f\u044f\u0442\u043d\u0438\u0446\u044b! \u0412\u0441\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u0443\u0440\u0441\u0430 \u00ab\u0420\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0421\u0423\u0411\u0414\u00bb, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043f\u043e \u0442\u0435\u043c\u0435. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 PostgreSQL 11 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u0430 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446. \u0421\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430 \u0432 PostgreSQL \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u043e \u0435\u0435, \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c\u0441\u044f, \u043f\u043e \u0441\u0443\u0442\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25538,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33872","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u0442\u043b\u0438\u0447\u043d\u043e\u0439 \u0432\u0441\u0435\u043c \u043f\u044f\u0442\u043d\u0438\u0446\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\/pl\/blog\/administrirovanie\/postgresql-11-evolyutsiya-sektsionirovaniya-ot-postgres-9-6-do-postgres-11\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\udd47PostgreSQL 11: \u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442 Postgres 9.6 \u0434\u043e Postgres 11 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u0442\u043b\u0438\u0447\u043d\u043e\u0439 \u0432\u0441\u0435\u043c \u043f\u044f\u0442\u043d\u0438\u0446\u044b!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/postgresql-11-evolyutsiya-sektsionirovaniya-ot-postgres-9-6-do-postgres-11\" \/>\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-31T18:55:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:55:09+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\udd47PostgreSQL 11: Ewolucja sekcjonowania od Postgresa 9.6 do Postgresa 11 | ProHoster","description":"\u017byczymy wszystkim udanego pi\u0105tku!","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/postgresql-11-evolyutsiya-sektsionirovaniya-ot-postgres-9-6-do-postgres-11","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\udd47PostgreSQL 11: \u042d\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u0441\u0435\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442 Postgres 9.6 \u0434\u043e Postgres 11 | ProHoster","og:description":"\u041e\u0442\u043b\u0438\u0447\u043d\u043e\u0439 \u0432\u0441\u0435\u043c \u043f\u044f\u0442\u043d\u0438\u0446\u044b!","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/postgresql-11-evolyutsiya-sektsionirovaniya-ot-postgres-9-6-do-postgres-11","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-31T18:55:09+00:00","article:modified_time":"2019-10-31T18:55:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33872","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-21 17:02:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:32:26","updated":"2026-01-21 17:02:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/33872","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=33872"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/33872\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/25538"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=33872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=33872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=33872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}