{"id":351,"date":"2016-08-11T23:34:36","date_gmt":"2016-08-11T21:34:36","guid":{"rendered":"http:\/\/explainit.pl\/wordpress\/?p=351"},"modified":"2016-08-11T23:34:36","modified_gmt":"2016-08-11T21:34:36","slug":"podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny","status":"publish","type":"post","link":"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/","title":{"rendered":"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?"},"content":{"rendered":"<p>Przyjrzyjmy si\u0119 dzi\u015b do\u015b\u0107 popularnemu problemowi wydajno\u015bci masowej operacji UPDATE dokonuj\u0105cej modyfikacji bardzo du\u017cej liczby rekord\u00f3w. Spotykaj\u0105 si\u0119 z nim najcz\u0119\u015bciej programi\u015bci implementuj\u0105cy zadania wsadowe. Dla cel\u00f3w demonstracji pos\u0142u\u017cymy si\u0119 tabel\u0105 UPD_TEST o nast\u0119puj\u0105cej strukturze:<\/p>\n<p><code>create table upd_test (c1 number(10), c2 char(1018));<\/code><\/p>\n<p>Rozmiar kolumny C2 zosta\u0142 tak dobrany, aby \u015brednia d\u0142ugo\u015b\u0107 rekordu oscylowa\u0142a w okolicach 1 kB. Na pocz\u0105tek tabela zostanie wype\u0142niona 100 000 nieistotnych rekord\u00f3w, dzi\u0119ki czemu jej rozmiar wyniesie 100 MB.<\/p>\n<p><code>begin<br \/>\n&nbsp; for i in 1..100000 loop<br \/>\n&nbsp;&nbsp;  insert into upd_test values (i, rpad('X',1018,'X'));<br \/>\n&nbsp; end loop;<br \/>\nend;<\/code><\/p>\n<p>Wykonamy teraz polecenie UPDATE, kt\u00f3re przeprowadzi modyfikacj\u0119 wszystkich rekord\u00f3w tabeli UPD_TEST &#8211; w naszym przyk\u0142adzie modyfikacja polega na zmianie ostatniej litery tekstu w kolumnie C2. Przy tej okazji zmierzymy czas wykonania i niekt\u00f3re statystyki wydajno\u015bciowe (np. za pomoc\u0105 v$mystat).<\/p>\n<p>&nbsp;<br \/>\n<code>update upd_test set c2=substr(c2,1,1017)||'Y';<\/code><\/p>\n<ul>\n<li>DB Time: 16.28 s<\/li>\n<li>Undo change vector size: 116 MB<\/li>\n<li>Redo size: 250MB<\/li>\n<\/ul>\n<p>W tym przypadku tabela jest niewielka, wi\u0119c czas 16.28 s pewnie nie powoduje wi\u0119kszego niepokoju jednak zastan\u00f3wmy si\u0119, z czego on konkretnie wynika. Ot\u00f3\u017c modyfikacja ka\u017cdego rekordu powoduje: (1) zapis modyfikacji do dziennika powt\u00f3rze\u0144 (Redo), (2) zapis wcze\u015bniejszego obrazu danych do bloku wycofania (Undo), (3) zapis zmiany bloku wycofania do dziennika powt\u00f3rze\u0144 (Redo dla Undo), wreszcie (4) zapis nowego obrazu rekordu do bloku tabeli. W rezultacie, opr\u00f3cz zapisu ok. 100MB zmodyfikowanych danych, serwer bazy danych Oracle Database musi dodatkowo zapisa\u0107 podobn\u0105 ilo\u015b\u0107 danych wycofania i do tego zapisa\u0107 oko\u0142o dwukrotno\u015b\u0107 tych danych do dziennika powt\u00f3rze\u0144. Przez serwer &#8222;przechodzi&#8221; wi\u0119c ok. 400MB danych (z dok\u0142adnych pomiar\u00f3w wynika, \u017ce nawet ponad 450 MB), kt\u00f3re ostatecznie trafiaj\u0105 na dysk (pliki danych, przestrze\u0144 wycofania, dzienniki powt\u00f3rze\u0144). St\u0105d taka wydajno\u015b\u0107&#8230;<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-353 aligncenter\" src=\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/undoRedo-300x156.png\" alt=\"Oracle Undo and Redo\" width=\"608\" height=\"316\" srcset=\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/undoRedo-300x156.png 300w, https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/undoRedo-768x399.png 768w, https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/undoRedo-1024x532.png 1024w\" sizes=\"(max-width: 608px) 100vw, 608px\" \/><\/p>\n<p>Czy istnieje spos\u00f3b na szybsze wykonanie takiej modyfikacji, z pomini\u0119ciem wszystkich tych zapis\u00f3w do dziennika powt\u00f3rze\u0144 i przestrzeni wycofania? Oczywi\u015bcie! Zamiast modyfikowa\u0107 rekordy &#8222;w miejscu&#8221;, spr\u00f3bujmy przepisa\u0107 je do nowej tabeli, wykonuj\u0105c stosowne modyfikacje danych &#8222;w locie&#8221;. Czy to co\u015b zmieni? Jak najbardziej, gdy\u017c skorzystamy wtedy z polecenia CTAS (Create Table As Select), kt\u00f3re stosuje \u015bcie\u017ck\u0119 bezpo\u015bredni\u0105 zapisu danych (Direct Path), a ta znacz\u0105co redukuje zapisy typu Undo i Redo. Naturalnie na ko\u0144cu nasze zmodyfikowane dane znajduj\u0105 si\u0119 w innej tabeli, wi\u0119c konieczne b\u0119dzie teraz usuni\u0119cie starej tabeli, zmiana nazwy nowej na star\u0105 i ewentualnie przywr\u00f3cenie wszystkich indeks\u00f3w i wyzwalaczy.<\/p>\n<p>&nbsp;<br \/>\n<code>create table upd_test_dup<br \/>\nas select c1, substr(c2,1,1017)||'Y' as c2 from upd_test;<\/code><\/p>\n<ul>\n<li>DB Time: 2.74 s<\/li>\n<li>Undo change vector size: 42 kB<\/li>\n<li>Redo size: 272 kB<\/li>\n<\/ul>\n<p>Jest szybciej, prawda&#8230;? Imponuj\u0105co wygl\u0105daj\u0105 ilo\u015bci danych wycofania i powt\u00f3rzenia, mierzone w KILOBAJTACH! Jakim jednak cudem serwer zapisa\u0142 dane wycofania dla 100 000 rekord\u00f3w za pomoc\u0105 42 kilobajt\u00f3w (4 bity na rekord)??? To skutek optymalizacji rekord\u00f3w Undo, jak\u0105 Oracle potrafi zastosowa\u0107 dla polece\u0144 INSERT oraz INSERT pos\u0142uguj\u0105cych si\u0119 \u015bcie\u017ck\u0105 bezpo\u015bredni\u0105 (a nie potrafi dla UPDATE i DELETE) &#8211; raz wspomnia\u0142 o tym Jonathan Lewis (<a href=\"https:\/\/community.oracle.com\/thread\/2506291?tstart=0\">https:\/\/community.oracle.com\/thread\/2506291?tstart=0<\/a>).<\/p>\n<p>Efekt wydajno\u015bciowy powy\u017cszego polecenia b\u0119dzie zale\u017cny od trybu pracy serwera bazy danych &#8211; ARCHIVELOG\/NOARCHIVELOG. Tylko w trybie NOARCHIVELOG \u015bcie\u017cka bezpo\u015brednia pomija zapisy do dziennika powt\u00f3rze\u0144. Tak w\u0142a\u015bnie by\u0142o w naszym powy\u017cszym przyk\u0142adzie. natomiast w trybie ARCHIVELOG zaobserwowa\u0142em nast\u0119puj\u0105ce wska\u017aniki wydajno\u015bciowe:<\/p>\n<ul>\n<li>DB Time: 4.67 s<\/li>\n<li>Undo change vector size: 42 kB<\/li>\n<li>Redo size: 112 MB<\/li>\n<\/ul>\n<p>Pi\u0119\u0107set razy wi\u0119cej danych Redo w por\u00f3wnaniu z CTAS w trybie NOARCHIVELOG&#8230;, ale nadal jest to ponad po\u0142owa mniej ni\u017c dla pierwszego polecenia UPDATE. No i czas wykonania czterokrotnie lepszy.<\/p>\n<p>Dla pe\u0142nego obrazu rzu\u0107my jeszcze okiem na wska\u017aniki wydajno\u015bciowe polecenia DELETE, kt\u00f3re usun\u0119\u0142oby wszystkie rekordy\u00a0 tabeli testowej.<\/p>\n<p>&nbsp;<br \/>\n<code>delete from upd_test;<\/code><\/p>\n<ul>\n<li>Undo change vector size: 108 MB<\/li>\n<li>Redo size: 127 MB<\/li>\n<\/ul>\n<p>Z czego wynikaj\u0105 te warto\u015bci? Z usuni\u0119ciem rekordu wi\u0105\u017ce si\u0119: (1) zapis operacji usuni\u0119cia w dzienniku powt\u00f3rze\u0144 (Redo), (2) zapis obrazu usuwanego rekordu do bloku wycofania (Undo), (3) zapis zmiany bloku wycofania do dziennika powt\u00f3rze\u0144 (Redo dla Undo), wreszcie (4) usuni\u0119cie rekordu z bloku tabeli. Usuwane rekordy maj\u0105 obj\u0119to\u015b\u0107 100MB &#8211; tyle danych znajdzie si\u0119 w przestrzeni wycofania i w dzienniku powt\u00f3rze\u0144. Dodatkowo, do dziennika powt\u00f3rze\u0144 trafi opis operacji usuwania rekord\u00f3w, ale jest on stosunkowo niewielki (zawiera tylko wskazania usuwanych rekord\u00f3w).<\/p>\n<p>Wniosek ko\u0144cowy &#8211; ilekro\u0107 zamierzamy zmodyfikowa\u0107 lub usun\u0105\u0107 bardzo du\u017ce liczby rekord\u00f3w, sprawd\u017amy, czy o wiele bardziej wydajnym rozwi\u0105zaniem nie jest zast\u0105pienie operacji UPDATE\/DELETE operacj\u0105 INSERT (CTAS). Zwracajmy przy tym uwag\u0119 na ilo\u015b\u0107 danych Undo i Redo, kt\u00f3rych zapis musi towarzyszy\u0107 operacjom modyfikacji danych, bo przek\u0142ada si\u0119 ona bezpo\u015brednio zar\u00f3wno na wydajno\u015b\u0107 konkretnej operacji, jak i ca\u0142ej instancji.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Przyjrzyjmy si\u0119 dzi\u015b do\u015b\u0107 popularnemu problemowi wydajno\u015bci masowej operacji UPDATE dokonuj\u0105cej modyfikacji bardzo du\u017cej liczby rekord\u00f3w. Spotykaj\u0105 si\u0119 z nim najcz\u0119\u015bciej programi\u015bci implementuj\u0105cy zadania wsadowe. Dla cel\u00f3w demonstracji pos\u0142u\u017cymy si\u0119 tabel\u0105 UPD_TEST o nast\u0119puj\u0105cej strukturze: create table upd_test (c1 number(10), c2 char(1018)); Rozmiar kolumny C2 zosta\u0142 tak dobrany, aby \u015brednia d\u0142ugo\u015b\u0107 rekordu oscylowa\u0142a w okolicach <a href=\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?<\/span>[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[25,24,21],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.2.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny? - Explain IT<\/title>\n<meta name=\"description\" content=\"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny? - Explain IT\" \/>\n<meta property=\"og:description\" content=\"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/\" \/>\n<meta property=\"og:site_name\" content=\"Explain IT\" \/>\n<meta property=\"article:published_time\" content=\"2016-08-11T21:34:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/undoRedo-300x156.png\" \/>\n<meta name=\"author\" content=\"Maciej Zakrzewicz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Maciej Zakrzewicz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/\"},\"author\":{\"name\":\"Maciej Zakrzewicz\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219\"},\"headline\":\"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?\",\"datePublished\":\"2016-08-11T21:34:36+00:00\",\"dateModified\":\"2016-08-11T21:34:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/\"},\"wordCount\":784,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\"},\"keywords\":[\"redo\",\"undo\",\"wydajno\u015b\u0107\"],\"articleSection\":[\"Oracle Database\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/\",\"name\":\"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny? - Explain IT\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\"},\"datePublished\":\"2016-08-11T21:34:36+00:00\",\"dateModified\":\"2016-08-11T21:34:36+00:00\",\"description\":\"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?\",\"breadcrumb\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/explainit.pl\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\",\"url\":\"https:\/\/explainit.pl\/wordpress\/\",\"name\":\"Explain IT\",\"description\":\"Autorska pracownia doradztwa i szkole\u0144 IT - Maciej Zakrzewicz - szkolenia, ekspertyzy, wdro\u017cenia. Technologie Oracle, PostgreSQL, MySQL.\",\"publisher\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/explainit.pl\/wordpress\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\",\"name\":\"Explain IT\",\"url\":\"https:\/\/explainit.pl\/wordpress\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png\",\"contentUrl\":\"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png\",\"width\":196,\"height\":64,\"caption\":\"Explain IT\"},\"image\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219\",\"name\":\"Maciej Zakrzewicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g\",\"caption\":\"Maciej Zakrzewicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny? - Explain IT","description":"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/","og_locale":"pl_PL","og_type":"article","og_title":"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny? - Explain IT","og_description":"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?","og_url":"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/","og_site_name":"Explain IT","article_published_time":"2016-08-11T21:34:36+00:00","og_image":[{"url":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/undoRedo-300x156.png"}],"author":"Maciej Zakrzewicz","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Maciej Zakrzewicz","Szacowany czas czytania":"4 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/#article","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/"},"author":{"name":"Maciej Zakrzewicz","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219"},"headline":"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?","datePublished":"2016-08-11T21:34:36+00:00","dateModified":"2016-08-11T21:34:36+00:00","mainEntityOfPage":{"@id":"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/"},"wordCount":784,"commentCount":0,"publisher":{"@id":"https:\/\/explainit.pl\/wordpress\/#organization"},"keywords":["redo","undo","wydajno\u015b\u0107"],"articleSection":["Oracle Database"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/","url":"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/","name":"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny? - Explain IT","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/#website"},"datePublished":"2016-08-11T21:34:36+00:00","dateModified":"2016-08-11T21:34:36+00:00","description":"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?","breadcrumb":{"@id":"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/explainit.pl\/wordpress\/2016\/08\/11\/podstawy-oracle-database-undo-redo-czyli-dlaczego-update-jest-tak-powolny\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/explainit.pl\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Podstawy Oracle Database: Undo-Redo, czyli dlaczego UPDATE jest tak powolny?"}]},{"@type":"WebSite","@id":"https:\/\/explainit.pl\/wordpress\/#website","url":"https:\/\/explainit.pl\/wordpress\/","name":"Explain IT","description":"Autorska pracownia doradztwa i szkole\u0144 IT - Maciej Zakrzewicz - szkolenia, ekspertyzy, wdro\u017cenia. Technologie Oracle, PostgreSQL, MySQL.","publisher":{"@id":"https:\/\/explainit.pl\/wordpress\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/explainit.pl\/wordpress\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/explainit.pl\/wordpress\/#organization","name":"Explain IT","url":"https:\/\/explainit.pl\/wordpress\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/","url":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png","contentUrl":"https:\/\/explainit.pl\/wordpress\/wp-content\/uploads\/2016\/08\/explainITmini.png","width":196,"height":64,"caption":"Explain IT"},"image":{"@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219","name":"Maciej Zakrzewicz","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9c98d020128b142a480aa35a22300a69?s=96&d=mm&r=g","caption":"Maciej Zakrzewicz"}}]}},"_links":{"self":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/351"}],"collection":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/comments?post=351"}],"version-history":[{"count":5,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/351\/revisions"}],"predecessor-version":[{"id":357,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/351\/revisions\/357"}],"wp:attachment":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}