{"id":20922,"date":"2026-08-23T11:49:04","date_gmt":"2026-08-23T09:49:04","guid":{"rendered":"https:\/\/webhosting.de\/mariadb-adaptive-hash-index-vorteile-nachteile-tuning-datenbank\/"},"modified":"2026-08-23T11:49:04","modified_gmt":"2026-08-23T09:49:04","slug":"mariadb-indeks-adaptacyjny-typu-hash-zalety-wady-optymalizacja-bazy-danych","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/mariadb-adaptive-hash-index-vorteile-nachteile-tuning-datenbank\/","title":{"rendered":"Adaptacyjny indeks hashowy MariaDB: zalety i wady w kontek\u015bcie nowoczesnych strategii optymalizacji InnoDB"},"content":{"rendered":"<p>Adaptacyjny indeks hashowy (AHI) w MariaDB mo\u017ce zauwa\u017calnie przyspieszy\u0107 zapytania o dok\u0142adn\u0105 r\u00f3wno\u015b\u0107, jednak przy wysokim stopniu r\u00f3wnoleg\u0142o\u015bci powoduje dodatkowe czasy oczekiwania na zwolnienie blokad oraz zwi\u0119ksza zapotrzebowanie na pami\u0119\u0107. Wyja\u015bni\u0119 jasno, kiedy AHI <strong>Pr\u0119dko\u015b\u0107<\/strong> pokazuje, gdzie wyst\u0119puje op\u00f3\u017anienie i jak celowo w\u0142\u0105czam t\u0119 funkcj\u0119 do nowoczesnych strategii optymalizacji InnoDB.<\/p>\n\n<h2>Punkty centralne<\/h2>\n<ul>\n  <li><strong>Funkcjonalno\u015b\u0107<\/strong>: AHI rozszerza drzewa B o szybkie wyszukiwanie hash\u00f3w w pami\u0119ci.<\/li>\n  <li><strong>Zalety<\/strong>: Szybsze wyszukiwanie punkt\u00f3w, mniejsze obci\u0105\u017cenie procesora, wi\u0119ksza przepustowo\u015b\u0107.<\/li>\n  <li><strong>Wady<\/strong>: Konflikt blokad, zu\u017cycie pami\u0119ci, wolniejsze operacje DDL.<\/li>\n  <li><strong>Strojenie<\/strong>: partycjonowanie, sterowanie na poziomie tabeli, przejrzysty monitoring.<\/li>\n  <li><strong>Decyzja<\/strong>: Testy A\/B, profil obci\u0105\u017cenia, ukierunkowane aktywowanie.<\/li>\n<\/ul>\n\n<h2>Jak dok\u0142adnie dzia\u0142a adaptacyjny indeks hashowy w InnoDB<\/h2>\n<p>InnoDB przetwarza klasyczne zapytania za pomoc\u0105 drzew B, podczas gdy AHI dodatkowo przechowuje cz\u0119sto u\u017cywane klucze w pami\u0119ci w postaci tablic hash, umo\u017cliwiaj\u0105c w ten spos\u00f3b bezpo\u015brednie wyszukiwanie w czasie O(1). To uzupe\u0142nienie pozwala omin\u0105\u0107 kilka poziom\u00f3w drzewa i znacznie skraca czas przetwarzania przez procesor na jedno wyszukiwanie, o ile zapytanie trafia w dok\u0142adny wzorzec r\u00f3wno\u015bci. Oceniam to <strong>Wsp\u00f3\u0142czynnik trafie\u0144<\/strong> wyszukiwania w tablicy skr\u00f3t\u00f3w, poniewa\u017c tylko cz\u0119sto u\u017cywane klucze zapewniaj\u0105 rzeczywist\u0105 korzy\u015b\u0107. AHI pozostaje przezroczysty dla aplikacji, wi\u0119c nie musz\u0119 definiowa\u0107 dodatkowego indeksu skr\u00f3t\u00f3w. Kluczowe znaczenie ma fakt, \u017ce InnoDB dynamicznie tworzy i likwiduje hash, dzi\u0119ki czemu wydajno\u015b\u0107 zale\u017cy ca\u0142kowicie od rzeczywistych wzorc\u00f3w dost\u0119pu. Aby lepiej to zrozumie\u0107, warto przyjrze\u0107 si\u0119 <a href=\"https:\/\/webhosting.de\/pl\/mysql-silnik-bazy-danych-innodb-myisam-hosting-serwerowy-serverflux\/\">InnoDB vs MyISAM<\/a>, poniewa\u017c AHI w spos\u00f3b ukierunkowany zajmuje si\u0119 mocnymi i s\u0142abymi stronami dost\u0119p\u00f3w opartych na drzewach.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb-buero-tuning-4923.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Korzy\u015bci w codziennym \u017cyciu: kiedy wska\u017anik AHI wyra\u017anie przyspiesza tempo<\/h2>\n<p>Ch\u0119tnie w\u0142\u0105czam AHI w przypadku obci\u0105\u017ce\u0144 OLTP, w kt\u00f3rych wyst\u0119puje wiele powtarzaj\u0105cych si\u0119 wyszukiwa\u0144 kluczy g\u0142\u00f3wnych lub unikalnych, poniewa\u017c bezpo\u015bredni dost\u0119p do tablicy skr\u00f3t\u00f3w zmniejsza op\u00f3\u017anienie na zapytanie. W przypadku trafie\u0144 ca\u0142kowicie pomija si\u0119 przeszukiwanie drzewa B, dzi\u0119ki czemu silnik potrzebuje mniej operacji dost\u0119pu do pami\u0119ci, a <strong>Obci\u0105\u017cenie procesora<\/strong> spada. Jest to szczeg\u00f3lnie op\u0142acalne w aplikacjach wykorzystuj\u0105cych dane sesji lub konfiguracyjne, poniewa\u017c te same klucze pojawiaj\u0105 si\u0119 bardzo cz\u0119sto. Dominuje tu obci\u0105\u017cenie odczytowe, zmiany s\u0105 umiarkowane, a AHI rzadziej musi dostosowywa\u0107 struktur\u0119 skr\u00f3tu. W takich \u015brodowiskach cz\u0119sto obserwuj\u0119 bardziej r\u00f3wnomierny rozk\u0142ad czas\u00f3w odpowiedzi, zw\u0142aszcza w przypadku najcz\u0119stszych, kr\u00f3tkich zapyta\u0144 SELECT. Im bardziej stabilny jest wzorzec zapyta\u0144, tym wi\u0119ksza jest praktyczna u\u017cyteczno\u015b\u0107 ka\u017cdego wpisu w tablicy skr\u00f3t\u00f3w.<\/p>\n\n<h2>Ryzyko i skutki uboczne: w jakich przypadkach wska\u017anik AHI ma ograniczaj\u0105ce dzia\u0142anie<\/h2>\n<p>Je\u015bli r\u00f3wnoleg\u0142o\u015b\u0107 znacznie wzro\u015bnie, w\u0105tki zaczynaj\u0105 konkurowa\u0107 o blokady hashowe, co powoduje zauwa\u017calne op\u00f3\u017anienia. W takich sytuacjach pocz\u0105tkowa przewaga pod wzgl\u0119dem szybko\u015bci zanika, poniewa\u017c dodatkowa synchronizacja <strong>Op\u00f3\u017anienie P99<\/strong> i ogranicza przepustowo\u015b\u0107. Obci\u0105\u017cenia z przewag\u0105 operacji zapisu pog\u0142\u0119biaj\u0105 ten efekt, poniewa\u017c liczne aktualizacje powoduj\u0105 uniewa\u017cnienie wpis\u00f3w w tablicy skr\u00f3t\u00f3w i generuj\u0105 sta\u0142e koszty utrzymania. Z kolei skanowanie zakres\u00f3w lub wyszukiwanie za pomoc\u0105 symboli wieloznacznych nie przynosz\u0105 tu prawie \u017cadnych korzy\u015bci, poniewa\u017c podej\u015bcie oparte na tablicach skr\u00f3t\u00f3w nie jest do tego przystosowane. Kto w\u0142\u0105cza t\u0119 opcj\u0119 bez przeprowadzenia pomiar\u00f3w, ryzykuje, \u017ce AHI spowoduje rozrzut czas\u00f3w odpowiedzi, a wykonanie wa\u017cnych zada\u0144 DDL b\u0119dzie trwa\u0142o zauwa\u017calnie d\u0142u\u017cej.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb_ahn_vorteile_nachteile_8391.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Pami\u0119\u0107 i partycjonowanie: jak prawid\u0142owo skonfigurowa\u0107<\/h2>\n<p>AHI zajmuje pami\u0119\u0107 w puli bufor\u00f3w, zazwyczaj za pomoc\u0105 wewn\u0119trznej struktury skojarzeniowej, kt\u00f3ra z czasem si\u0119 powi\u0119ksza. Uwa\u017cam, \u017ce <strong>Pula bufor\u00f3w<\/strong>-Zwracam uwag\u0119 na wykorzystanie, poniewa\u017c zbyt du\u017cy udzia\u0142 hashowania wypiera u\u017cyteczne dane i sprzyja wyst\u0105pieniu b\u0142\u0119d\u00f3w stronicowania. Aby zwi\u0119kszy\u0107 r\u00f3wnoleg\u0142o\u015b\u0107, dziel\u0119 hash na kilka partycji, dzi\u0119ki czemu mniej w\u0105tk\u00f3w dost\u0119puje do tej samej blokady. Liczb\u0119 partycji zwi\u0119kszam stopniowo i oceniam wp\u0142yw tej zmiany na czasy oczekiwania na blokad\u0119 oraz przepustowo\u015b\u0107. Ustalanie z g\u00f3ry maksymalnej liczby rzadko przynosi korzy\u015bci; wyniki pomiar\u00f3w stanowi\u0105 podstaw\u0119 moich kolejnych dostosowa\u0144. Aby zachowa\u0107 przegl\u0105d sytuacji, zapisuj\u0119 zmiany i koreluj\u0119 je z przebiegami op\u00f3\u017anie\u0144.<\/p>\n<table>\n  <thead>\n    <tr>\n      <th>Kategoria<\/th>\n      <th>Kiedy AHI mo\u017ce pom\u00f3c<\/th>\n      <th>Kiedy wska\u017anik AHI jest szkodliwy<\/th>\n      <th>Wskaz\u00f3wka dotycz\u0105ca tuningu<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Rodzaj zapytania<\/td>\n      <td>Cz\u0119sto stosowane zapytania SELECT z jednym kryterium<\/td>\n      <td>Skanowanie zakresu, LIKE \u201a%\u2026%\u2018<\/td>\n      <td>Sprawdzi\u0107 wzorce filtr\u00f3w, sprawdzi\u0107 trafienia w skr\u00f3cie<\/td>\n    <\/tr>\n    <tr>\n      <td>profil obci\u0105\u017cenia<\/td>\n      <td>Obci\u0105\u017cenie OLTP z przewag\u0105 operacji odczytu<\/td>\n      <td>Systemy intensywnie wykorzystuj\u0105ce operacje zapisu<\/td>\n      <td>Nale\u017cy zachowa\u0107 ostro\u017cno\u015b\u0107 podczas stosowania AHI przy wysokiej cz\u0119stotliwo\u015bci aktualizacji<\/td>\n    <\/tr>\n    <tr>\n      <td>R\u00f3wnoleg\u0142o\u015b\u0107<\/td>\n      <td>\u015arednia liczba w\u0105tk\u00f3w<\/td>\n      <td>Wiele w\u0105tk\u00f3w z konfliktami blokad<\/td>\n      <td>Stopniowe zwi\u0119kszanie rozmiaru partycji<\/td>\n    <\/tr>\n    <tr>\n      <td>Pami\u0119\u0107<\/td>\n      <td>Du\u017ca pula bufor\u00f3w<\/td>\n      <td>Wypchni\u0119cie aktywnych stron<\/td>\n      <td>Nale\u017cy mie\u0107 na uwadze udzia\u0142 hash\u00f3w<\/td>\n    <\/tr>\n    <tr>\n      <td>Konserwacja<\/td>\n      <td>Niewiele zabieg\u00f3w DDL<\/td>\n      <td>Cz\u0119ste operacje DROP\/ALTER\/TRUNCATE<\/td>\n      <td>Tymczasowo wy\u0142\u0105czy\u0107 AHI przed du\u017cymi obci\u0105\u017ceniami DDL<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Monitorowanie i wska\u017aniki: co regularnie sprawdzam<\/h2>\n<p>Ka\u017cd\u0105 decyzj\u0119 dotycz\u0105c\u0105 AHI rozpoczynam od analizy wska\u017anik\u00f3w dotycz\u0105cych wyszukiwania w tablicach skr\u00f3t\u00f3w, wsp\u00f3\u0142czynnik\u00f3w trafie\u0144 oraz czas\u00f3w oczekiwania na latch. Dodatkowo analizuj\u0119 op\u00f3\u017anienia P95\/P99, poniewa\u017c przy wysokim stopniu wsp\u00f3\u0142bie\u017cno\u015bci warto\u015bci odstaj\u0105ce maj\u0105 wi\u0119kszy wp\u0142yw na postrzeganie u\u017cytkownika ni\u017c warto\u015bci \u015brednie. Wielko\u015b\u0107 skr\u00f3tu odnosz\u0119 do <strong>Pula bufor\u00f3w<\/strong>-Sprawdzam obci\u0105\u017cenie i monitoruj\u0119, czy nie pogarszaj\u0105 si\u0119 wska\u017anik wywo\u0142a\u0144 stron (Page-Hitrate) oraz wzorce operacji wej\u015bcia\/wyj\u015bcia (I\/O). Czasy wykonania instrukcji DDL r\u00f3wnie\u017c s\u0105 rejestrowane w protokole, dzi\u0119ki czemu mog\u0119 szybko wykry\u0107 negatywne skutki zmian w schemacie. W przypadku znacznego pogorszenia wynik\u00f3w wy\u0142\u0105czam AHI na pr\u00f3b\u0119, powtarzam pomiar i oceniam r\u00f3\u017cnic\u0119. Nast\u0119pnie decyduj\u0119, czy wy\u0142\u0105czy\u0107 t\u0119 funkcj\u0119 globalnie, czy te\u017c w\u0142\u0105czy\u0107 j\u0105 tylko dla wybranych tabel.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb-hash-index-tuning-8365.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Operacje i konserwacja systemu DDL: typowe pu\u0142apki<\/h2>\n<p>W przypadku polece\u0144 DROP, TRUNCATE, ALTER lub DROP INDEX konieczne jest usuni\u0119cie powi\u0105zanych wpis\u00f3w skr\u00f3towych, co wymaga dodatkowej pracy. Im wi\u0119ksza i bardziej aktywna jest tabela, tym d\u0142u\u017cej trwa czyszczenie tych wewn\u0119trznych struktur. Dlatego wi\u0119ksze zmiany w schemacie planuj\u0119 w oknach konserwacyjnych i sprawdzam <strong>Czas dzia\u0142ania DDL<\/strong> najpierw na testowej kopii zapasowej. Je\u015bli wp\u0142yw okazuje si\u0119 zbyt du\u017cy, tymczasowo wy\u0142\u0105czam AHI, unikaj\u0105c w ten spos\u00f3b d\u0142ugich przestoj\u00f3w w \u015brodowisku produkcyjnym. Nast\u0119pnie ponownie w\u0142\u0105czam t\u0119 funkcj\u0119, o ile obci\u0105\u017cenie nadal z niej efektywnie korzysta. Takie podej\u015bcie zapewnia przewidywalno\u015b\u0107 zmian w modelu danych.<\/p>\n\n<h2>Sterowanie na poziomie tabel i najnowsze wersje MariaDB<\/h2>\n<p>Nowsze wersje MariaDB pozwalaj\u0105 na zr\u00f3\u017cnicowane w\u0142\u0105czanie funkcji AHI zamiast stosowania globalnego rozwi\u0105zania. W\u0142\u0105czam t\u0119 funkcj\u0119 selektywnie dla tabel z du\u017c\u0105 liczb\u0105 zapyta\u0144 por\u00f3wnuj\u0105cych, a wy\u0142\u0105czam j\u0105, gdy spodziewam si\u0119 du\u017cego obci\u0105\u017cenia zapisem lub cz\u0119stych operacji DDL. W ten spos\u00f3b ograniczam ryzyko, nie rezygnuj\u0105c z korzy\u015bci wynikaj\u0105cych z <strong>Zapytania punktowe<\/strong> zrezygnowa\u0107. Dodatkowo korzystam z rozszerzonych informacji o stanie, aby dok\u0142adnie oceni\u0107 wp\u0142yw funkcji skr\u00f3tu na ka\u017cd\u0105 tabel\u0119. W ten spos\u00f3b mo\u017cna precyzyjnie wyznaczy\u0107 obszar zastosowania AHI i w kontrolowany spos\u00f3b kszta\u0142towa\u0107 profil wydajno\u015bci. Ta precyzyjna regulacja przynosi odczuwalne korzy\u015bci zw\u0142aszcza w przypadku zr\u00f3\u017cnicowanych obci\u0105\u017ce\u0144.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb_innodb_tuning_4321.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Scenariusze praktyczne: sensowne a problematyczne<\/h2>\n<p>Korzystam z AHI, gdy aplikacje OLTP wykonuj\u0105 wiele identycznych zapyta\u0144 SELECT na kluczu podstawowym, a dane pozostaj\u0105 stosunkowo stabilne. Wzorce dost\u0119pu typu klucz-warto\u015b\u0107 cz\u0119sto odnosz\u0105 korzy\u015bci, o ile regularnie pojawiaj\u0105 si\u0119 jednolite warunki r\u00f3wno\u015bci. AHI jest mniej odpowiednie w przypadku zapyta\u0144 raportowych z du\u017cymi zakresami, wysoce r\u00f3wnoleg\u0142ych wzorc\u00f3w aktualizacji oraz powtarzaj\u0105cych si\u0119 operacji DDL. W takich przypadkach czasy oczekiwania na zwolnienie blokad, koszty utrzymania oraz op\u00f3\u017anienia zwi\u0105zane z DDL przewa\u017caj\u0105 nad korzy\u015bciami wynikaj\u0105cymi z trafie\u0144 w tablicy skr\u00f3t\u00f3w. U\u017cytkownicy obs\u0142uguj\u0105cy obci\u0105\u017cenia mieszane powinni skorzysta\u0107 z opcji \u201eper-tabelle\u201d i skoncentrowa\u0107 AHI na <strong>gor\u0105ce klawisze<\/strong>, kt\u00f3re niezawodnie zapewniaj\u0105 trafienia. Takie podej\u015bcie zapobiega nadmiernemu rozrostowi struktury skr\u00f3tu przez rzadkie wzorce oraz zajmowaniu pami\u0119ci.<\/p>\n\n<h2>Strategia testowa: por\u00f3wnanie A\/B bez zgadywania<\/h2>\n<p>Pracuj\u0119 z jasno okre\u015blonymi oknami testowymi, identycznymi zestawami danych i powtarzalnymi profilami obci\u0105\u017cenia, aby dok\u0142adnie por\u00f3wna\u0107 tryby AHI ON\/OFF. Por\u00f3wnuj\u0119 ze sob\u0105 wska\u017aniki przepustowo\u015bci, op\u00f3\u017anie\u0144 P95\/P99 oraz czas\u00f3w oczekiwania na zwolnienie (latch-waits) i zwracam uwag\u0119 na powtarzalne trendy. Pomocne s\u0105 ustrukturyzowane kontrole planu zapyta\u0144, do kt\u00f3rych dodatkowo <a href=\"https:\/\/webhosting.de\/pl\/mysql-optymalizator-zapytan-hosting-optymalizacja-serverboost\/\">Wskaz\u00f3wki dotycz\u0105ce optymalizatora zapyta\u0144<\/a> stosuj\u0119. Dopiero gdy wyniki pomiar\u00f3w konsekwentnie wskazuj\u0105 na korzy\u015bci, na sta\u0142e wprowadzam to ustawienie. Je\u015bli efekt pozostaje niejasny, wy\u0142\u0105czam t\u0119 funkcj\u0119 lub przenosz\u0119 j\u0105 do poszczeg\u00f3lnych tabel. Ka\u017cd\u0105 zmian\u0119 dokumentuj\u0119 za pomoc\u0105 <strong>Okres pomiarowy<\/strong>, parametry i profil obci\u0105\u017cenia, abym p\u00f3\u017aniej m\u00f3g\u0142 w\u0142a\u015bciwie ustali\u0107, dlaczego dana opcja jest aktywna.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb_index_vorteile_1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Hosting i konfiguracja serwera: na co zwracam uwag\u0119<\/h2>\n<p>Du\u017ca pami\u0119\u0107 RAM i wiele rdzeni zapewniaj\u0105 swobod\u0119 w zakresie partycji AHI oraz rozbudowan\u0105 konfiguracj\u0119 puli bufor\u00f3w. Kalibruj\u0119 <strong>Rozmiary puli bufor\u00f3w<\/strong> nale\u017cy to robi\u0107 ostro\u017cnie, aby cz\u0119\u015b\u0107 hashowa nie wypiera\u0142a u\u017cytecznych danych i nie powodowa\u0142a niepotrzebnego wzrostu operacji wej\u015bcia\/wyj\u015bcia. U\u017cytkownicy MariaDB mog\u0105 korzysta\u0107 z najnowszych wersji i opcji umo\u017cliwiaj\u0105cych precyzyjn\u0105 kontrol\u0119 dla poszczeg\u00f3lnych tabel. Do kalibracji pami\u0119ci ch\u0119tnie korzystam z praktycznych przewodnik\u00f3w, takich jak <a href=\"https:\/\/webhosting.de\/pl\/mariadb-wytyczne-dotyczace-wydajnosci-zwiazane-z-doborem-wielkosci-puli-buforow\/\">Rozmiary puli bufor\u00f3w<\/a>, poniewa\u017c to w\u0142a\u015bnie solidne podstawowe warto\u015bci umo\u017cliwiaj\u0105 sukces AHI. Na wydajnych platformach AHI lepiej si\u0119 skaluje, o ile konflikty zwi\u0105zane z blokadami pozostaj\u0105 w rozs\u0105dnych granicach. Z drugiej strony zbyt skromne wyposa\u017cenie natychmiast niweluje oczekiwane korzy\u015bci.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/mariadb-hash-index-8291.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Konfiguracja w praktyce: parametry i bezpieczne ustawienia domy\u015blne<\/h2>\n<p>W praktyce zaczynam ostro\u017cnie: w\u0142\u0105czam AHI globalnie, ustalam umiarkowan\u0105 liczb\u0119 partycji hash i obserwuj\u0119 zachowanie systemu pod rzeczywistym obci\u0105\u017ceniem. Wa\u017cnymi opcjami s\u0105 globalne w\u0142\u0105czanie\/wy\u0142\u0105czanie (<code>innodb_adaptive_hash_index<\/code>) oraz podzia\u0142 tablicy skr\u00f3t\u00f3w (zazwyczaj za pomoc\u0105 <code>\u2026_cz\u0119\u015bci<\/code>(parametr). Wi\u0119ksza liczba partycji zmniejsza liczb\u0119 \u201egor\u0105cych punkt\u00f3w\u201c latch\u00f3w, ale jednocze\u015bnie zwi\u0119ksza nak\u0142ad pracy zwi\u0105zany z zarz\u0105dzaniem. Zwi\u0119kszam liczb\u0119 partycji tylko wtedy, gdy w pomiarach widz\u0119 wyra\u017ane konflikty latch\u00f3w w tablicy hash i gdy dost\u0119pna jest rezerwa mocy obliczeniowej procesora. Sprawdzonym rozwi\u0105zaniem jest wprowadzanie zmian w niewielkich krokach, a nast\u0119pnie przeprowadzanie testu obci\u0105\u017ceniowego. AHI mo\u017cna w\u0142\u0105cza\u0107 i wy\u0142\u0105cza\u0107 podczas pracy; korzystam z tej funkcji, aby sprawdzi\u0107 efekt bez konieczno\u015bci ponownego uruchamiania. Wa\u017cne: po zmianie ustawie\u0144 silnik wymaga kr\u00f3tkiego \u201erozgrzania\u201d, a\u017c cz\u0119ste wzorce ponownie zape\u0142ni\u0105 tablic\u0119 hash.<\/p>\n<p>Oceniam r\u00f3wnie\u017c interakcj\u0119 z innymi parametrami InnoDB. Zbyt ma\u0142a pula bufor\u00f3w ogranicza korzy\u015bci p\u0142yn\u0105ce z hashowania, poniewa\u017c cz\u0119ste usuwanie stron niweluje ten efekt. Z drugiej strony bardzo du\u017ca pula bufor\u00f3w mo\u017ce by\u0107 wystarczaj\u0105co szybka nawet bez AHI; w takim przypadku AHI op\u0142aca si\u0119 tylko wtedy, gdy w wymierny spos\u00f3b skraca czas procesora na jedno wyszukiwanie. Celem pozostaje zawsze zr\u00f3wnowa\u017cone obci\u0105\u017cenie procesora, pami\u0119ci i operacji we\/wy, a nie maksymalizacja poszczeg\u00f3lnych wska\u017anik\u00f3w.<\/p>\n\n<h2>Jakie wzorce dost\u0119pu faktycznie uruchamiaj\u0105 AHI<\/h2>\n<p>AHI przyspiesza przede wszystkim operacje dok\u0142adnego dopasowania w prefiksach indeks\u00f3w. Nale\u017c\u0105 do nich:<\/p>\n<ul>\n  <li>Klucze g\u0142\u00f3wne i wyszukiwania unikalne (<code>WHERE id = ?<\/code>)<\/li>\n  <li>R\u00f3wno\u015bci w lewym prefiksie indeksu z\u0142o\u017conego (<code>WHERE a = ? AND b = ?<\/code> w przypadku indeksu (a, b, c)<\/li>\n  <li>Cz\u0119sto powtarzaj\u0105ce si\u0119, identyczne klucze po\u0142\u0105cze\u0144 w po\u0142\u0105czeniach OLTP<\/li>\n<\/ul>\n<p>Mniej odpowiednie s\u0105:<\/p>\n<ul>\n  <li>Zapytania dotycz\u0105ce obszar\u00f3w (<code>MI\u0118DZY<\/code>, <code>&gt;<\/code>, <code>&lt;<\/code>)<\/li>\n  <li>Wyszukiwanie przedrostk\u00f3w lub przyrostk\u00f3w z u\u017cyciem symboli wieloznacznych (<code>POLUB '%\u2026%'<\/code>)<\/li>\n  <li>Zapytania, kt\u00f3re filtruj\u0105 wed\u0142ug kolumn nieselektywnych, kt\u00f3rych warto\u015bci s\u0105 bardzo rozrzucone<\/li>\n<\/ul>\n<p>Wa\u017cna jest r\u00f3wnie\u017c sp\u00f3jno\u015b\u0107 wzorc\u00f3w: im cz\u0119\u015bciej powtarzaj\u0105 si\u0119 te same klucze, tym wi\u0119ksze jest prawdopodobie\u0144stwo, \u017ce skorzystaj\u0105 one z funkcji skr\u00f3tu. Klucze losowe lub silnie rozproszone dostarczaj\u0105 zbyt ma\u0142o trafie\u0144, by uzasadni\u0107 koszty utrzymania. Dlatego projektuj\u0119 indeks tak, aby cz\u0119ste zbie\u017cno\u015bci by\u0142y obs\u0142ugiwane przez lewy prefiks odpowiedniego indeksu; AHI wzmacnia w\u00f3wczas i tak ju\u017c dobry plan, zamiast go zast\u0119powa\u0107.<\/p>\n\n<h2>Cykl \u017cycia, rozgrzewka i ponowne uruchomienia<\/h2>\n<p>AHI to ulotna struktura w pami\u0119ci. Po ponownym uruchomieniu lub zmianie konfiguracji tablica skr\u00f3t\u00f3w jest pusta i wype\u0142nia si\u0119 rzeczywistym ruchem sieciowym. W tej fazie cz\u0119sto obserwuj\u0119 chwilowy wzrost op\u00f3\u017anienia, dop\u00f3ki nie ustal\u0105 si\u0119 najcz\u0119\u015bciej u\u017cywane klucze. W przeciwie\u0144stwie do zrzutu puli bufor\u00f3w dane AHI nie s\u0105 zapisywane na sta\u0142e; dlatego planowane ponowne uruchomienie powinno odbywa\u0107 si\u0119 w okresach, w kt\u00f3rych obci\u0105\u017cenie jest mo\u017cliwe do kontrolowania. Osoby korzystaj\u0105ce z bardzo kr\u00f3tkich okien testowych \u0142atwo nie doceniaj\u0105 tego efektu rozgrzewania i w rezultacie podejmuj\u0105 b\u0142\u0119dne decyzje \u2013 dlatego zawsze planuj\u0119 okresy pomiarowe tak, aby hash m\u00f3g\u0142 si\u0119 ustabilizowa\u0107.<\/p>\n\n<h2>Podr\u0119cznik rozwi\u0105zywania problem\u00f3w: objawy i sposoby post\u0119powania<\/h2>\n<p>Typowymi sygna\u0142ami ostrzegawczymi wskazuj\u0105cymi na problemy z AHI s\u0105 wyd\u0142u\u017caj\u0105ce si\u0119 czasy oczekiwania na latch oraz rozbie\u017cno\u015bci w op\u00f3\u017anieniach P95\/P99 przy obci\u0105\u017ceniu szczytowym. W komunikatach o stanie (np. <code>POKA\u017b STATUS SILNIKA INNODB<\/code>) zwracam szczeg\u00f3ln\u0105 uwag\u0119 na liczniki wyszukiwa\u0144 hashowych i ich stosunek do wyszukiwa\u0144 w drzewach B. R\u00f3wnie\u017c wzmianki o zatrzaskach \u201ebtr_search\u201c wskazuj\u0105 na konflikt AHI. Moje dzia\u0142ania zaradcze ustalam wed\u0142ug nast\u0119puj\u0105cego priorytetu:<\/p>\n<ul>\n  <li>Nieznaczne zwi\u0119kszenie rozmiaru partycji AHI i sprawdzenie wp\u0142ywu na czasy oczekiwania<\/li>\n  <li>Tymczasowo wy\u0142\u0105czy\u0107 hash, przeprowadzi\u0107 test A\/B, podj\u0105\u0107 decyzj\u0119 w oparciu o dane<\/li>\n  <li>Optymalizacja struktury indeksu (bardziej selektywne prefiksy, ograniczenie zb\u0119dnych zapyta\u0144 zakresowych)<\/li>\n  <li>Odci\u0105\u017cenie operacji zapisu (przetwarzanie wsadowe, kolejki zapisu, roz\u0142o\u017cenie kluczy hotspot\u00f3w)<\/li>\n  <li>Przesun\u0105\u0107 du\u017ce pobrania danych (DDL) na inne przedzia\u0142y czasowe lub tymczasowo wy\u0142\u0105czy\u0107 AHI<\/li>\n<\/ul>\n<p>W przypadku utrzymuj\u0105cych si\u0119 problem\u00f3w w systemach obci\u0105\u017conych operacjami zapisu cz\u0119sto wy\u0142\u0105czam AHI na sta\u0142e lub ograniczam jego dzia\u0142anie selektywnie do tabel o stabilnym dost\u0119pie do odczytu. Najmniejszy wsp\u00f3lny mianownik brzmi: najpierw zmierzy\u0107, potem podj\u0105\u0107 decyzj\u0119.<\/p>\n\n<h2>Plan wdro\u017cenia: od fazy testowej do produkcji<\/h2>\n<p>Zamiast \u015blepo skupia\u0107 si\u0119 na produkcji w oparciu o wska\u017anik AHI, stosuj\u0119 plan stopniowy:<\/p>\n<ol>\n  <li>Rejestrowanie profilu obci\u0105\u017cenia (najcz\u0119\u015bciej wykonywane zapytania, stosunek odczyt\u00f3w do zapis\u00f3w, rozk\u0142ad op\u00f3\u017anie\u0144)<\/li>\n  <li>Skonfigurowa\u0107 system testowy z reprezentatywnymi danymi i identyczn\u0105 konfiguracj\u0105<\/li>\n  <li>W\u0142\u0105czy\u0107 AHI, wybra\u0107 umiarkowan\u0105 liczb\u0119 partycji, przeprowadzi\u0107 testy obci\u0105\u017ceniowe z powtarzalnymi scenariuszami<\/li>\n  <li>Por\u00f3wnanie wska\u017anik\u00f3w (przepustowo\u015b\u0107, P95\/P99, czasy oczekiwania na zwolnienie pami\u0119ci, wsp\u00f3\u0142czynnik trafie\u0144 w puli bufor\u00f3w)<\/li>\n  <li>Dokona\u0107 precyzyjnej regulacji lub selektywnie w\u0142\u0105cza\u0107 wska\u017anik AHI (zgodnie z tabel\u0105, tam gdzie jest to wskazane)<\/li>\n  <li>Stopniowe wdra\u017canie w \u015brodowisku produkcyjnym przy \u015bcis\u0142ej obserwacji i mo\u017cliwo\u015bci szybkiego powrotu do poprzedniej wersji<\/li>\n<\/ol>\n<p>Kluczowa jest dyscyplina w prowadzeniu dokumentacji: warto\u015bci parametr\u00f3w, przedzia\u0142y czasowe, profile obci\u0105\u017cenia i wyniki pomiar\u00f3w musz\u0105 by\u0107 bez wyj\u0105tku uj\u0119te w protokole zmian. Tylko w ten spos\u00f3b mo\u017cna p\u00f3\u017aniej prawid\u0142owo przypisa\u0107 poszczeg\u00f3lne zjawiska.<\/p>\n\n<h2>Precyzyjne dostosowanie w po\u0142\u0105czeniu z innymi optymalizacjami<\/h2>\n<p>AHI nie zast\u0119puje solidnych podstaw. Dobre indeksy, zoptymalizowane plany zapyta\u0144 i odpowiednie <code>JOIN<\/code>-Strategie pozostaj\u0105 najlepszym wyborem. AHI dzia\u0142a jak przyspieszacz w przypadku i tak ju\u017c wydajnych zapyta\u0144 punktowych. Dlatego sprawdzam r\u00f3wnolegle:<\/p>\n<ul>\n  <li>Czy cz\u0119ste r\u00f3wno\u015bci maj\u0105 odpowiedni, selektywny indeks (w idealnym przypadku z pokryciem)<\/li>\n  <li>Czy warstwy buforowania mog\u0105 odci\u0105\u017cy\u0107 poziom aplikacji (np. w przypadku bardzo \u201eintensywnych\u201c odczyt\u00f3w)<\/li>\n  <li>Czy mo\u017cna ograniczy\u0107 lub przeprogramowa\u0107 skanowanie zakresu o zwi\u0119kszonym zasi\u0119gu<\/li>\n<\/ul>\n<p>Tam, gdzie te zadania s\u0105 starannie wykonane, system AHI w pe\u0142ni wykorzystuje sw\u00f3j potencja\u0142 \u2013 a tam, gdzie ich brakuje, AHI jedynie tymczasowo maskuje problemy.<\/p>\n\n<h2>Kr\u00f3tkie podsumowanie moich decyzji dotycz\u0105cych tuningu<\/h2>\n<p>AHI to dla mnie narz\u0119dzie o konkretnym przeznaczeniu, a nie uniwersalny prze\u0142\u0105cznik. W przypadku zapyta\u0144 punktowych z przewag\u0105 operacji odczytu funkcja ta cz\u0119sto zapewnia wyra\u017ane korzy\u015bci, natomiast przy wysokim stopniu r\u00f3wnoleg\u0142o\u015bci i cz\u0119stych aktualizacjach dominuj\u0105 koszty zwi\u0105zane z zatrzymaniami i konserwacj\u0105. Podejmuj\u0119 decyzje w oparciu o dane, selektywnie aktywuj\u0119 AHI i konsekwentnie dokonuj\u0119 pomiar\u00f3w, zamiast \u015blepo przyjmowa\u0107 domniemane warto\u015bci oparte na do\u015bwiadczeniu. Partycjonowanie pomaga w zapobieganiu konfliktom blokad, jednak jego skuteczno\u015b\u0107 zale\u017cy od jako\u015bci towarzysz\u0105cych mu pomiar\u00f3w. Kto konsekwentnie stosuje to podej\u015bcie, zwi\u0119ksza <strong>Wydajno\u015b\u0107 MariaDB<\/strong> wyra\u017anie odczuwalne, zapewnia kontrolowane op\u00f3\u017anienia i pozwala na przewidywanie koszt\u00f3w konserwacji.<\/p>","protected":false},"excerpt":{"rendered":"<p>Dowiedz si\u0119, jak dzia\u0142a indeks adaptacyjny MariaDB (Adaptive Hash Index), jakie s\u0105 jego zalety i wady oraz jak celowo wykorzysta\u0107 go w ramach optymalizacji InnoDB, aby zoptymalizowa\u0107 wydajno\u015b\u0107 MariaDB. S\u0142owo kluczowe: indeks adaptacyjny.<\/p>","protected":false},"author":1,"featured_media":20915,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[781],"tags":[],"class_list":["post-20922","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-datenbanken-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"141","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"adaptive hash index","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20915","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/comments?post=20922"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20922\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/20915"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=20922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=20922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=20922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}