{"id":48,"date":"2012-12-02T13:31:07","date_gmt":"2012-12-02T12:31:07","guid":{"rendered":"http:\/\/explainit.pl\/blog\/?p=48"},"modified":"2016-08-09T21:02:13","modified_gmt":"2016-08-09T19:02:13","slug":"jak-dziala-database-buffer-cache-czesc-1","status":"publish","type":"post","link":"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/","title":{"rendered":"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)"},"content":{"rendered":"<p>Buffer Cache to obszar pami\u0119ci wewn\u0105trz SGA pe\u0142ni\u0105cy rol\u0119 dwukierunkowego bufora dyskowego uczestnicz\u0105cego w operacjach odczytu i zapisu obiekt\u00f3w u\u017cytkownik\u00f3w (tabele, indeksy). Jego rozmiar jest okre\u015blany automatycznie lub jest narzucony przez administratora (parametr db_cache_size). Buffer Cache s\u0142u\u017cy redukcji aktywno\u015bci dyskowej serwera. Zanim zapytanie SQL odczyta blok danych z dysku, najpierw pr\u00f3buje znale\u017a\u0107 ten blok w Buffer Cache. Gdy szukany blok nie znajduje sie w Buffer Cache, wtedy jest odczytywany z dysku i (zwykle) umieszczany w Buffer Cache w celu ponownego u\u017cycia w przysz\u0142o\u015bci. Poniewa\u017c zazwyczaj rozmiar bufora Buffer Cache jest du\u017co mniejszy ni\u017c rozmiar bazy danych, potrzebny jest algorytm zwalniaj\u0105cy miejsce dla nowych blok\u00f3w danych przybywaj\u0105cych do bufora. Do wersji 8.0 Oracle wykorzystywa\u0142 do tego celu klasyczny algorytm LRU (Least Recently Used), od wersji 8.1 u\u017cywa rozwi\u0105zania hybrydowego nazywanego LRU Touch-Count Algorithm.<\/p>\n<p>Og\u00f3lna idea dzia\u0142ania algorytmu Touch-Count jest nast\u0119puj\u0105ca. Ka\u017cdy blok bufora Buffer Cache jest reprezentowany przez obiekt umieszczony na specjalnej li\u015bcie nazywanej, historycznie, list\u0105 LRU. Jeden koniec tej listy nazywany jest \u201egor\u0105cym\u201d (lub MRU \u2013 Most Recently Used), drugi koniec \u2013 \u201ezimnym\u201d (lub LRU \u2013 Least Recently Used). Bloki gor\u0105ce s\u0105 najbardziej po\u017c\u0105danymi go\u015b\u0107mi bufora, natomiast bloki zimne s\u0105 kandydatami do usuni\u0119cia gdy tylko potrzebne b\u0119dzie wolne miejsce. Gdy z dysku odczytywany jest pojedynczy blok, trafia on do Buffer Cache i na list\u0119 LRU \u2013 uwaga -w \u015brodek tej listy (tzw. Midpoint, wskazywany niejawnym parametrem _db_percent_hot_default). Gdy natomiast realizowana jest operacja pe\u0142nego odczytu du\u017cej tabeli (powy\u017cej _small_table_threshold), jej bloki odnotowywane s\u0105 \u2013 uwaga &#8211; na zimnym ko\u0144cu listy LRU (zmiana tego zachowania jest mo\u017cliwa za pomoc\u0105 klauzuli CACHE). Elementy listy LRU posiadaj\u0105 liczniki odwiedzin (tzw. Touch Counter). Za ka\u017cdym razem gdy serwer korzysta z bloku znajduj\u0105cego si\u0119 w buforze Buffer Cache (lecz nie cz\u0119\u015bciej ni\u017c raz na 3 sekundy, wskazywane niejawnym parametrem _db_aging_touch_time), zwi\u0119ksza jego licznik odwiedzin. Gdy licznik odwiedzin osi\u0105gnie warto\u015b\u0107 wi\u0119ksz\u0105 ni\u017c dwa (niejawny parametr _db_aging_hot_criteria), wtedy blok przesuwa si\u0119 na gor\u0105cy koniec listy LRU (blok si\u0119 rozgrzewa), a jego licznik odwiedzin jest resetowany. Je\u015bli takie przesuni\u0119cie spowoduje, \u017ce jaki\u015b inny blok spadnie poni\u017cej Midpoint, licznik odwiedzin takiego bloku b\u0119dzie zresetowany do warto\u015bci 1 (warto\u015b\u0107 wskazywana niejawnym parametrem _db_aging_cool_count) (blok stygnie).<\/p>\n<p>Konsekwencj\u0105 powy\u017cszego algorytmu jest to, \u017ce bloki cz\u0119sto i intensywnie wykorzystywane maj\u0105 wi\u0119ksze szanse na pozostawanie w buforze ani\u017celi bloki wykorzystywane ma\u0142o intensywnie lub intensywnie lecz kr\u00f3tkotrwale. Dok\u0142adniejszy opis algorytmu LRU Touch-Count znajduje si\u0119 w artykule \u201eAll About Oracle\u2019s Touch Count Data Block Buffer Cache Algoruthm\u201d autorstwa Craiga A. Shallahamera. Zainteresowanym eksperymentowaniem polecam wirtualn\u0105 tabel\u0119 systemow\u0105 X$BH, kt\u00f3ra udost\u0119pnia informacje o aktualnej zawarto\u015bci bufora Buffer Cache (kolumny DBARFIL, DBABLK, OBJ), warto\u015bciach licznik\u00f3w odwiedzin (kolumna TCH) oraz o strukturze listy LRU (kolumny NXT_HASH, PRV_HASH). Przyk\u0142adowo, poni\u017csze zapytanie wy\u015bwietla raport o aktualnej zawarto\u015bci Buffer Cache:<\/p>\n<p><code>select substr(b.owner||'.'||b.object_name,1,30) object, count(*) num_blocks<br \/>\nfrom x$bh a, dba_objects b<br \/>\nwhere a.obj=b.object_id<br \/>\ngroup by owner, object_name<br \/>\norder by count(*)<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Buffer Cache to obszar pami\u0119ci wewn\u0105trz SGA pe\u0142ni\u0105cy rol\u0119 dwukierunkowego bufora dyskowego uczestnicz\u0105cego w operacjach odczytu i zapisu obiekt\u00f3w u\u017cytkownik\u00f3w (tabele, indeksy). Jego rozmiar jest okre\u015blany automatycznie lub jest narzucony przez administratora (parametr db_cache_size). Buffer Cache s\u0142u\u017cy redukcji aktywno\u015bci dyskowej serwera. Zanim zapytanie SQL odczyta blok danych z dysku, najpierw pr\u00f3buje znale\u017a\u0107 ten blok w <a href=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)<\/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":[8],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.2.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1) - Explain IT<\/title>\n<meta name=\"description\" content=\"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)\" \/>\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\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1) - Explain IT\" \/>\n<meta property=\"og:description\" content=\"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)\" \/>\n<meta property=\"og:url\" content=\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Explain IT\" \/>\n<meta property=\"article:published_time\" content=\"2012-12-02T12:31:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-08-09T19:02:13+00:00\" \/>\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=\"3 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/\"},\"author\":{\"name\":\"Maciej Zakrzewicz\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219\"},\"headline\":\"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)\",\"datePublished\":\"2012-12-02T12:31:07+00:00\",\"dateModified\":\"2016-08-09T19:02:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/\"},\"wordCount\":532,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#organization\"},\"keywords\":[\"Buffer Cache\"],\"articleSection\":[\"Oracle Database\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/\",\"url\":\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/\",\"name\":\"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1) - Explain IT\",\"isPartOf\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/#website\"},\"datePublished\":\"2012-12-02T12:31:07+00:00\",\"dateModified\":\"2016-08-09T19:02:13+00:00\",\"description\":\"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)\",\"breadcrumb\":{\"@id\":\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/explainit.pl\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)\"}]},{\"@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":"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1) - Explain IT","description":"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)","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\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/","og_locale":"pl_PL","og_type":"article","og_title":"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1) - Explain IT","og_description":"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)","og_url":"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/","og_site_name":"Explain IT","article_published_time":"2012-12-02T12:31:07+00:00","article_modified_time":"2016-08-09T19:02:13+00:00","author":"Maciej Zakrzewicz","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Maciej Zakrzewicz","Szacowany czas czytania":"3 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/#article","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/"},"author":{"name":"Maciej Zakrzewicz","@id":"https:\/\/explainit.pl\/wordpress\/#\/schema\/person\/740773131bc169a2dc9c0e5e07476219"},"headline":"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)","datePublished":"2012-12-02T12:31:07+00:00","dateModified":"2016-08-09T19:02:13+00:00","mainEntityOfPage":{"@id":"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/"},"wordCount":532,"commentCount":0,"publisher":{"@id":"https:\/\/explainit.pl\/wordpress\/#organization"},"keywords":["Buffer Cache"],"articleSection":["Oracle Database"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/","url":"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/","name":"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1) - Explain IT","isPartOf":{"@id":"https:\/\/explainit.pl\/wordpress\/#website"},"datePublished":"2012-12-02T12:31:07+00:00","dateModified":"2016-08-09T19:02:13+00:00","description":"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)","breadcrumb":{"@id":"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/explainit.pl\/wordpress\/2012\/12\/02\/jak-dziala-database-buffer-cache-czesc-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/explainit.pl\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Jak dzia\u0142a Database Buffer Cache? (cz\u0119\u015b\u0107 1)"}]},{"@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\/48"}],"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=48"}],"version-history":[{"count":2,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/48\/revisions"}],"predecessor-version":[{"id":345,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/posts\/48\/revisions\/345"}],"wp:attachment":[{"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=48"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=48"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/explainit.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=48"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}