{"id":15871,"date":"2025-12-07T15:07:21","date_gmt":"2025-12-07T14:07:21","guid":{"rendered":"https:\/\/webhosting.de\/warum-redis-langsamer-ist-als-gedacht-typische-fehlkonfigurationen-cacheopt\/"},"modified":"2025-12-07T15:07:21","modified_gmt":"2025-12-07T14:07:21","slug":"dlaczego-redis-dziala-wolniej-niz-sie-spodziewales-typowe-bledy-konfiguracji-cacheopt","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/warum-redis-langsamer-ist-als-gedacht-typische-fehlkonfigurationen-cacheopt\/","title":{"rendered":"Dlaczego Redis mo\u017ce dzia\u0142a\u0107 wolniej ni\u017c si\u0119 spodziewasz: typowe b\u0142\u0119dy konfiguracji i jak ich unikn\u0105\u0107"},"content":{"rendered":"<p>Redis cz\u0119sto dzia\u0142a wolno, gdy konfiguracja, infrastruktura lub wzorce dost\u0119pu nie s\u0105 odpowiednie \u2013 w\u0142a\u015bnie w tym miejscu <strong>optymalizacja redis<\/strong> Poka\u017c\u0119 konkretnie, jakie b\u0142\u0119dne konfiguracje powoduj\u0105 op\u00f3\u017anienia i jak mo\u017cna ich systematycznie unika\u0107.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<ul>\n  <li><strong>Swapping<\/strong> Eliminuje op\u00f3\u017anienia: niedobory pami\u0119ci RAM powoduj\u0105 natychmiastowy dost\u0119p do dysku twardego.<\/li>\n  <li><strong>Op\u00f3\u017anienia widelca<\/strong> przez RDB\/AOF: migawki i przepisywanie powoduj\u0105 kr\u00f3tkie, wyra\u017ane przerwy.<\/li>\n  <li><strong>AOF\/Magazynowanie<\/strong> spowalnia: powolne dyski i agresywne fsync zwi\u0119kszaj\u0105 czasy odpowiedzi.<\/li>\n  <li><strong>Powolne polecenia<\/strong>: Du\u017ce struktury i kosztowne polecenia obci\u0105\u017caj\u0105 procesor.<\/li>\n  <li><strong>\u015bcie\u017cka sieciowa<\/strong> Liczy si\u0119: odleg\u0142o\u015b\u0107, obci\u0105\u017cenia kontener\u00f3w i serwery proxy zwi\u0119kszaj\u0105 op\u00f3\u017anienia.<\/li>\n<\/ul>\n\n<h2>Dlaczego Redis dzia\u0142a wolno pod obci\u0105\u017ceniem?<\/h2>\n\n<p>Redis zapewnia bardzo kr\u00f3tkie czasy odpowiedzi, ale <strong>rzeczywisto\u015b\u0107<\/strong> a warunki laboratoryjne znacznie si\u0119 r\u00f3\u017cni\u0105. Poziomy wirtualne, wsp\u00f3\u0142dzielone hosty i dodatkowe obci\u0105\u017cenie sieci zwi\u0119kszaj\u0105 si\u0119 z ka\u017cd\u0105 milisekund\u0105, zw\u0142aszcza w przypadku wyst\u0105pienia szczyt\u00f3w obci\u0105\u017cenia. Cz\u0119sto spotykam si\u0119 z konfiguracjami, w kt\u00f3rych nak\u0142adki kontenerowe, proxy sidecar i strefy zdalne maskuj\u0105 rzeczywist\u0105 pr\u0119dko\u015b\u0107 pami\u0119ci. Do tego dochodz\u0105 specyficzne cechy systemu operacyjnego, takie jak przezroczyste ogromne strony lub agresywne zamiana pami\u0119ci, kt\u00f3re dodatkowo zwi\u0119kszaj\u0105 op\u00f3\u017anienia. Bez czystych podstaw Redis nagle wydaje si\u0119 powolny, mimo \u017ce silnik dzia\u0142a szybko, a w\u0105skie gard\u0142o znajduje si\u0119 poza baz\u0105 danych.<\/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\/2025\/12\/redis-server-debug-4831.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Unikanie zamiany: RAM, maxmemory i strategia ewakuacji<\/h2>\n\n<p>Gdy system operacyjny przenosi pami\u0119\u0107 Redis na dysk, nast\u0119puje gwa\u0142towny wzrost <strong>Op\u00f3\u017anienie<\/strong>. Dlatego zawsze planuj\u0119 wystarczaj\u0105c\u0105 ilo\u015b\u0107 pami\u0119ci RAM i stale monitoruj\u0119 jej zu\u017cycie. Ustaw maxmemory i odpowiedni\u0105 polityk\u0119 eviction, aby instancja w odpowiednim czasie usuwa\u0142a dane, zamiast przechodzi\u0107 do pami\u0119ci swap. Od\u0142\u0105cz procesy wymagaj\u0105ce du\u017cej ilo\u015bci pami\u0119ci od hosta Redis, poniewa\u017c konkurencyjne obci\u0105\u017cenia zwi\u0119kszaj\u0105 ryzyko. Bez tych podstawowych zasad \u017cadne inne \u015brodki nie rozwi\u0105zuj\u0105 rzeczywistego problemu, a ka\u017cde zapytanie mo\u017ce nagle wymaga\u0107 setek milisekund.<\/p>\n\n<h2>Ograniczanie op\u00f3\u017anie\u0144 rozga\u0142\u0119zie\u0144 dzi\u0119ki migawkom RDB i przepisywaniu AOF<\/h2>\n\n<p>RDB-Snapshots i AOF-Rewrites uruchamiaj\u0105 procesy w tle poprzez fork, co w przypadku du\u017cych instancji powoduje zauwa\u017calne <strong>przerwy<\/strong> generowane. Wy\u0142\u0105czam przezroczyste strony Huge Pages w systemach Linux, poniewa\u017c powoduj\u0105 one wzrost koszt\u00f3w kopiowania przy zapisie i wyd\u0142u\u017caj\u0105 op\u00f3\u017anienia. Ponadto dostosowuj\u0119 interwa\u0142y migawek i progi przepisywania AOF, aby ograniczy\u0107 cz\u0119stotliwo\u015b\u0107 rozga\u0142\u0119zie\u0144. Du\u017ce, monolityczne instancje dziel\u0119 na kilka mniejszych fragment\u00f3w, aby pojedyncze rozga\u0142\u0119zienia by\u0142y mniej dotkliwe. Ci, kt\u00f3rzy ignoruj\u0105 t\u0119 zasad\u0119, cz\u0119sto do\u015bwiadczaj\u0105 awarii w\u0142a\u015bnie w momencie tworzenia kopii zapasowej, mimo \u017ce wcze\u015bniej wszystko dzia\u0142a\u0142o szybko.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/redis_besprechung_0931.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>W\u0142a\u015bciwy wyb\u00f3r strategii AOF, przechowywania danych i fsync<\/h2>\n\n<p>AOF zwi\u0119ksza trwa\u0142o\u015b\u0107, ale spowalnia dyski i powoduje agresywne fsync. <strong>Czasy reakcji<\/strong> w g\u00f3r\u0119. Przechowuj\u0119 dane Redis na szybkich dyskach SSD i oddzielam je od operacji wej\u015bcia\/wyj\u015bcia kopii zapasowych lub baz danych, aby unikn\u0105\u0107 zator\u00f3w podczas przepisywania. W przypadku wielu obci\u0105\u017ce\u0144 wystarczy everysec w po\u0142\u0105czeniu z no-appendfsync-on-rewrite yes, aby wyg\u0142adzi\u0107 szczyty. Regularnie sprawdzaj, czy po\u0142\u0105czenie RDB i AOF odpowiada Twoim wymaganiom, zamiast odruchowo aktywowa\u0107 \u201efsync always\u201c. Je\u015bli zwr\u00f3cisz uwag\u0119 na sprz\u0119t i \u015bwiadomie wybierzesz strategi\u0119, utrzymasz op\u00f3\u017anienia pod kontrol\u0105.<\/p>\n\n<h2>Spowolnienie polece\u0144 i modelu danych<\/h2>\n\n<p>Niekt\u00f3re polecenia s\u0105 bardzo kosztowne w przypadku du\u017cych struktur. <strong>CPU<\/strong>, np. SORT, ZINTERSTORE lub masywne LRANGE. Aktywnie korzystam z Slow Log i analizuj\u0119 warto\u015bci odstaj\u0105ce wed\u0142ug typu polecenia, rozmiaru danych i kluczy. Du\u017ce struktury dziel\u0119 na mniejsze segmenty lub wybieram alternatywne typy danych, kt\u00f3re lepiej pasuj\u0105 do wzorca dost\u0119pu. W razie potrzeby przenosz\u0119 analizy wymagaj\u0105ce du\u017cej mocy obliczeniowej procesora na repliki lub dedykowane instancje, aby \u015bcie\u017cka dost\u0119pu pozosta\u0142a szybka. Dzi\u0119ki temu zapytania zn\u00f3w mo\u017cna planowa\u0107, zamiast sporadycznie zajmowa\u0107 pojedyncze sekundy.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/redis-fehlkonfiguration-vermeiden-7246.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Zminimalizuj sie\u0107, kontenery i odleg\u0142o\u015b\u0107<\/h2>\n\n<p>Wiele problem\u00f3w zwi\u0105zanych z op\u00f3\u017anieniami wynika w rzeczywisto\u015bci z <strong>czas transportu<\/strong> i nie jest to problem Redis. Trzymam aplikacj\u0119 i Redis w tej samej strefie, unikam niepotrzebnych serwer\u00f3w proxy i sprawdzam MTU oraz obci\u0105\u017cenie TLS. W konfiguracjach Kubernetes zwracam uwag\u0119 na sieci nak\u0142adkowe i mo\u017cliwe w\u0105skie gard\u0142a w wtyczkach CNI. Im mniej przeskok\u00f3w, tym mniejsze rozrzuty w 95.\/99. percentylu. Je\u015bli chcesz uzyska\u0107 przewidywalne milisekundy, umie\u015b\u0107 Redis jak najbli\u017cej kodu, a nie w r\u00f3\u017cnych centrach danych.<\/p>\n\n<h2>Pragmatyczne podej\u015bcie do rozmiar\u00f3w, pojedynczych w\u0105tk\u00f3w i fragmentacji<\/h2>\n\n<p>Instancja Redis przetwarza polecenia w g\u0142\u00f3wnym w\u0105tku, dlatego nale\u017cy ograniczy\u0107 <strong>Rdzenie CPU<\/strong> i Command-Rate rzeczywist\u0105 wydajno\u015b\u0107. Wybieram wystarczaj\u0105c\u0105 liczb\u0119 vCPU, odci\u0105\u017cam maszyn\u0119 od obcych us\u0142ug i rozdzielam obowi\u0105zki na kilka instancji. W przypadku czystego wykorzystania pami\u0119ci podr\u0119cznej od czasu do czasu por\u00f3wnuj\u0119 alternatywy; <a href=\"https:\/\/webhosting.de\/pl\/redis-memcached-caching-wordpress-porownanie-wydajnosc-cache\/\">Por\u00f3wnanie Redis vs. Memcached<\/a> pomaga w podj\u0119ciu decyzji. Sharding rozk\u0142ada obci\u0105\u017cenie i zmniejsza wp\u0142yw poszczeg\u00f3lnych op\u00f3\u017anie\u0144. Kto wszystko upycha w jednej instancji, ryzykuje zatory przy szczytowym obci\u0105\u017ceniu i d\u0142u\u017csze czasy odpowiedzi.<\/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\/2025\/12\/redis_debug_nightoffice_2947.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Monitorowanie, wska\u017aniki i wyszukiwanie b\u0142\u0119d\u00f3w<\/h2>\n\n<p>Bez warto\u015bci pomiarowych optymalizacja pozostaje <strong>Lot w ciemno<\/strong>. Obserwuj\u0119 op\u00f3\u017anienia na polecenie, 95.\/99. percentyl, zu\u017cycie pami\u0119ci, fragmentacj\u0119, liczb\u0119 klient\u00f3w oraz zdarzenia BGSAVE\/AOF. INFO, Slow Log i monitorowanie infrastruktury szybko pokazuj\u0105, czy ograniczeniami s\u0105 pami\u0119\u0107 RAM, procesor, operacje wej\u015bcia\/wyj\u015bcia czy sie\u0107. Wa\u017cne jest sp\u00f3jne spojrzenie na okresy czasu, aby mo\u017cna by\u0142o skorelowa\u0107 op\u00f3\u017anienia z rozwidleniami, przepisywaniem lub wdra\u017caniem. Ponadto nale\u017cy tworzy\u0107 alarmy oparte na progach, kt\u00f3re odpowiadaj\u0105 potrzebom biznesowym, zamiast patrze\u0107 na warto\u015bci \u015brednie.<\/p>\n\n<h2>Strategia pami\u0119ci podr\u0119cznej i projektowanie kluczy, kt\u00f3re zwi\u0119kszaj\u0105 wsp\u00f3\u0142czynnik trafie\u0144<\/h2>\n\n<p>Szybka pami\u0119\u0107 podr\u0119czna nie ma sensu, je\u015bli klucze i TTL <strong>arbitralnie<\/strong> . Stawiam na jasne wzorce, takie jak cache-aside i sp\u00f3jne, opisowe klucze, aby zwi\u0119kszy\u0107 trend wsp\u00f3\u0142czynnika trafie\u0144. Wybieram TTL tak, aby dane pozostawa\u0142y wystarczaj\u0105co aktualne, ale nie wymaga\u0142y ci\u0105g\u0142ego przeliczania. Planuj\u0119 uniewa\u017cnienie w spos\u00f3b jawny, na przyk\u0142ad za pomoc\u0105 TTL, podej\u015b\u0107 opartych na tagach lub sygna\u0142\u00f3w pub\/sub. Praktyczne wskaz\u00f3wki mo\u017cna znale\u017a\u0107 w tym przewodniku: <a href=\"https:\/\/webhosting.de\/pl\/configure-caching-wordpress-redis-przyspieszenie-wydajnosci-9324\/\">Konfiguracja pami\u0119ci podr\u0119cznej<\/a> i kontrolowa\u0107 pomiary.<\/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\/2025\/12\/redis_slow_config_tipps_7329.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Sprawdzanie konfiguracji: sensowne ustawienia domy\u015blne i szybkie post\u0119py<\/h2>\n\n<p>Kto chce szybko osi\u0105gn\u0105\u0107 efekt, powinien najpierw postawi\u0107 na solidne <strong>Ustawienia domy\u015blne<\/strong> i testuj\u0119 je pod obci\u0105\u017ceniem. \u015aci\u015ble unikam swappingu, reguluj\u0119 pami\u0119\u0107 za pomoc\u0105 maxmemory i reguluj\u0119 trwa\u0142o\u015b\u0107 za pomoc\u0105 RDB oraz umiarkowanego AOF. Wy\u0142\u0105czam THP i umieszczam dane na dyskach SSD, oddzielnie od innych zada\u0144 wej\u015bcia\/wyj\u015bcia. Je\u015bli chodzi o sie\u0107, zwracam uwag\u0119 na kr\u00f3tkie \u015bcie\u017cki i ograniczam niepotrzebne proxy. Poni\u017csza tabela zawiera najwa\u017cniejsze parametry wraz z typowymi b\u0142\u0119dami i praktycznymi ustawieniami.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Temat<\/th>\n      <th>znak pomiarowy<\/th>\n      <th>niew\u0142a\u015bciwe ustawienie<\/th>\n      <th>Zalecenie<\/th>\n      <th>Wskaz\u00f3wka<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>RAM\/Swap<\/td>\n      <td>wysokie szczyty op\u00f3\u017anie\u0144<\/td>\n      <td>brak maxmemory<\/td>\n      <td>maxmemory + Eviction<\/td>\n      <td>Nale\u017cy bezwzgl\u0119dnie unika\u0107 swap\u00f3w.<\/td>\n    <\/tr>\n    <tr>\n      <td>Wytrwa\u0142o\u015b\u0107<\/td>\n      <td>Op\u00f3\u017anienia widelca<\/td>\n      <td>cz\u0119ste BGSAVE<\/td>\n      <td>Wyd\u0142u\u017canie interwa\u0142\u00f3w<\/td>\n      <td>Ci\u0119cie mniejszych porcji<\/td>\n    <\/tr>\n    <tr>\n      <td>AOF\/fsync<\/td>\n      <td>Szczyty IO<\/td>\n      <td>fsync zawsze<\/td>\n      <td>everysec + opcje<\/td>\n      <td>SSD i oddzielne dyski<\/td>\n    <\/tr>\n    <tr>\n      <td>THP<\/td>\n      <td>d\u0142ugie widelce<\/td>\n      <td>THP aktywny<\/td>\n      <td>THP z<\/td>\n      <td>Sprawd\u017a ustawienia j\u0105dra<\/td>\n    <\/tr>\n    <tr>\n      <td>komendy<\/td>\n      <td>wysokie obci\u0105\u017cenie procesora<\/td>\n      <td>SORT\/STORE du\u017cy<\/td>\n      <td>Korzystanie z funkcji Slow Log<\/td>\n      <td>Dostosuj model danych<\/td>\n    <\/tr>\n    <tr>\n      <td>Sie\u0107<\/td>\n      <td>Transport dominuje<\/td>\n      <td>odleg\u0142a strefa<\/td>\n      <td>blisko\u015b\u0107 lokalna<\/td>\n      <td>Sprawd\u017a chmiel i MTU<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Wzorce architektury i hierarchie buforowania<\/h2>\n\n<p>Dobra architektura kieruje zapytania najkr\u00f3tsz\u0105 drog\u0105 <strong>\u015acie\u017cka<\/strong> Odpowied\u017a. \u0141\u0105cz\u0119 pami\u0119\u0107 podr\u0119czn\u0105 Edge, aplikacji i Redis, aby zmniejszy\u0107 liczb\u0119 kosztownych zapyta\u0144 \u017ar\u00f3d\u0142owych i odci\u0105\u017cy\u0107 sam\u0105 pami\u0119\u0107 Redis. W ten spos\u00f3b dost\u0119p do odczytu jest roz\u0142o\u017cony, podczas gdy Redis obs\u0142uguje szybkie, dynamiczne klucze. Przegl\u0105d przydatnych poziom\u00f3w pomaga w dostosowaniu do w\u0142asnej platformy: zapoznaj si\u0119 z <a href=\"https:\/\/webhosting.de\/pl\/hierarchie-buforowania-technologie-webowe-hosting-boost\/\">Hierarchie buforowania<\/a> i nadaj priorytet najwi\u0119kszym d\u017awigniom. Kto \u0142\u0105czy architektur\u0119 i konfiguracj\u0119, rozwi\u0105zuje problemy zwi\u0105zane z op\u00f3\u017anieniami w spos\u00f3b bardziej trwa\u0142y ni\u017c w przypadku pojedynczych poprawek.<\/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\/2025\/12\/redis-serverfehler-9284.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Po\u0142\u0105czenia klient\u00f3w, potokowanie i pule<\/h2>\n\n<p>Wiele milisekund znika w <strong>U\u015bcisk d\u0142oni<\/strong> i nie w Redis. Stawiam na trwa\u0142e po\u0142\u0105czenia TCP\/TLS poprzez connection pooling, zamiast nawi\u0105zywa\u0107 nowe po\u0142\u0105czenie przy ka\u017cdym \u017c\u0105daniu. Zmniejsza to nie tylko RTT, ale tak\u017ce TLS handshakes i sprawdzanie certyfikat\u00f3w. Pipelining \u0142\u0105czy wiele ma\u0142ych polece\u0144 w jednym RTT, co znacznie zwi\u0119ksza przepustowo\u015b\u0107, o ile odpowiedzi nie s\u0105 potrzebne w \u015bcis\u0142ej kolejno\u015bci. W przypadku sekwencji atomowych celowo u\u017cywam MULTI\/EXEC, ale nie mieszam na \u015blepo transakcji w \u015bcie\u017ckach gor\u0105cych. Wybieram kr\u00f3tkie, ale realistyczne limity czasu i trzymam si\u0119 ich. <strong>tcp-keepalive<\/strong> aktywny, aby niezawodnie wykrywa\u0107 martwe po\u0142\u0105czenia. Wa\u017cna jest r\u00f3wnie\u017c <strong>maxclients<\/strong>Ustawienie \u0142\u0105cznie z ulimit (<em>nofile<\/em>), aby szczyty nie ko\u0144czy\u0142y si\u0119 niepowodzeniem z powodu braku deskryptor\u00f3w. Ponadto algorytm Nagle'a nie jest pomocny dla Redis \u2013 zar\u00f3wno serwery, jak i klienci powinni <strong>TCP_NODELAY<\/strong> , aby odpowiedzi by\u0142y natychmiast przekazywane.<\/p>\n\n<h2>Celowe wykorzystanie w\u0105tk\u00f3w I\/O i obci\u0105\u017cenia TLS<\/h2>\n\n<p>Redis pozostaje w trybie wykonywania polece\u0144 <strong>jednow\u0105tkowy<\/strong>, ale mo\u017ce obs\u0142ugiwa\u0107 operacje wej\u015bcia\/wyj\u015bcia sieciowego za po\u015brednictwem <strong>io\u2011threads<\/strong> Odci\u0105\u017cenie. W przypadku du\u017cego obci\u0105\u017cenia TLS lub du\u017cych \u0142adunk\u00f3w aktywuj\u0119 umiarkowanie (np. 2\u20134 w\u0105tki) i testuj\u0119 za pomoc\u0105 <em>io-threads-do-reads tak<\/em>. Przyspiesza to odczytywanie\/zapisywanie, a nie prac\u0119 procesora nad poleceniami. Obserwuj\u0119 przy tym obci\u0105\u017cenie systemu i percentyle op\u00f3\u017anie\u0144 \u2013 zbyt wiele w\u0105tk\u00f3w mo\u017ce zwi\u0119kszy\u0107 liczb\u0119 zmian kontekstu i zniwelowa\u0107 korzy\u015bci. Osoby pracuj\u0105ce bez TLS i z ma\u0142ymi odpowiedziami cz\u0119sto nie odnosz\u0105 prawie \u017cadnych korzy\u015bci; jednak dzi\u0119ki TLS niezawodnie obni\u017cam <strong>Op\u00f3\u017anienie sieciowe<\/strong>.<\/p>\n\n<h2>Wyga\u015bni\u0119cie, burze TTL i Lazy-Free<\/h2>\n\n<p>Synchroniczne wygasanie <strong>TTL<\/strong> powoduj\u0105 skoki wyga\u015bni\u0119cia. Dodaj\u0119 jitter do TTL, rozpraszam procesy i utrzymuj\u0119 niskie obci\u0105\u017cenie aktywnym wyga\u015bni\u0119ciem. Du\u017ce operacje usuwania blokuj\u0105 g\u0142\u00f3wny w\u0105tek, dlatego u\u017cywam <strong>UNLINK<\/strong> zamiast DEL dla du\u017cych klawiszy i aktywuj <strong>lazyfree<\/strong>Opcje (np. <em>lazyfree-lazy-eviction<\/em>, <em>lazyfree-lazy-expire<\/em>, <em>lazyfree-lazy-server-del<\/em>). W ten spos\u00f3b kosztowne operacje Free s\u0105 przenoszone do w\u0105tk\u00f3w w tle. Dodatkowo obserwuj\u0119 statystyki Expire w INFO: rosn\u0105. <em>expired_keys<\/em> oraz <em>evicted_keys<\/em> Je\u015bli jednocze\u015bnie jest on zbyt du\u017cy, oznacza to, \u017ce model danych jest zbyt rozbudowany lub strategia TTL jest niezr\u00f3wnowa\u017cona.<\/p>\n\n<h2>Fragmentacja pami\u0119ci i aktywna defragmentacja<\/h2>\n\n<p>Wysoki <strong>mem_fragmentation_ratio<\/strong> w INFO wskazuje na fragmentacj\u0119 lub obci\u0105\u017cenie pami\u0119ci wirtualnej. Aktywuj\u0119 <strong>activedefrag<\/strong> i dostosuj cykle (<em>aktywny cykl defragmentacji min\/maks<\/em>), aby stopniowo odzyskiwa\u0107 pami\u0119\u0107 bez nadmiernego obci\u0105\u017cania g\u0142\u00f3wnego w\u0105tku. Pomaga to przede wszystkim w przypadku obci\u0105\u017ce\u0144 wymagaj\u0105cych wielu aktualizacji i usuwania obiekt\u00f3w \u015bredniej wielko\u015bci. R\u00f3wnolegle sprawdzam <strong>Kodowanie<\/strong> ma\u0142ych struktur, poniewa\u017c nieprawid\u0142owo skonfigurowane granice pakiet\u00f3w (listy, skr\u00f3ty, zestawy) zwi\u0119kszaj\u0105 obci\u0105\u017cenie i zu\u017cycie procesora. Celem jest osi\u0105gni\u0119cie r\u00f3wnowagi: wystarczaj\u0105ca kompresja dla zapewnienia wydajno\u015bci, ale bez zbyt du\u017cych struktur pakiet\u00f3w, kt\u00f3re podnosz\u0105 koszty aktualizacji. Fragmentacj\u0119 rozwi\u0105zuj\u0119 r\u00f3wnie\u017c poprzez unikanie du\u017cych obci\u0105\u017ce\u0144 typu \u201ewszystko albo nic\u201c i rozk\u0142adanie usuwania danych na ca\u0142y dzie\u0144.<\/p>\n\n<h2>Kontrola klastr\u00f3w, fragmentacji i hotspot\u00f3w<\/h2>\n\n<p>Sharding zmniejsza op\u00f3\u017anienia tylko wtedy, gdy skr\u00f3ty klawiszowe nie trafiaj\u0105 wszystkie do tego samego fragmentu. U\u017cywam <strong>Hasztagi<\/strong>, aby utrzyma\u0107 powi\u0105zane klucze razem, i \u015bwiadomie rozdzielam klucze o du\u017cym nat\u0119\u017ceniu ruchu. Polecenia Multi\u2011Key dzia\u0142aj\u0105 w klastrze tylko w obr\u0119bie jednego slotu \u2013 planuj\u0119 model danych tak, aby operacje te nie musia\u0142y przebiega\u0107 mi\u0119dzy slotami. Podczas reshardingu zwracam uwag\u0119 na p\u0142ynne przenoszenie, aby nie powodowa\u0107 spadk\u00f3w ruchu, i obserwuj\u0119 <strong>PRZENIESIONO\/ZAPYTAJ<\/strong>W przypadku klient\u00f3w stosuj\u0119 replikacje wy\u0142\u0105cznie w celu odci\u0105\u017cenia odczytu, ale zwracam uwag\u0119 na wymagania dotycz\u0105ce sp\u00f3jno\u015bci. Kto dzieli dane bez planu, zamienia lokalne op\u00f3\u017anienia na rozproszone, trudniej dostrzegalne szczyty op\u00f3\u017anie\u0144.<\/p>\n\n<h2>Replikacja, zaleg\u0142o\u015bci i prze\u0142\u0105czanie awaryjne<\/h2>\n\n<p>Stabilna replikacja zapobiega pe\u0142nej resynchronizacji i szczytom op\u00f3\u017anie\u0144. Dimensioniamo <strong>rozmiar-zastrze\u017conych-replik<\/strong> obszerny, aby repliki mog\u0142y nadrobi\u0107 op\u00f3\u017anienia po kr\u00f3tkich przerwach w dzia\u0142aniu sieci za pomoc\u0105 PSYNC. <strong>Replikacja bez dysku<\/strong> (<em>repl-diskless-sync yes<\/em>) oszcz\u0119dza operacje wej\u015bcia\/wyj\u015bcia podczas synchronizacji, ale nie zmniejsza wymaga\u0144 sieciowych \u2013 przepustowo\u015b\u0107 musi by\u0107 odpowiednia. <strong>limit bufora wyj\u015bciowego klienta<\/strong> dla replik i klient\u00f3w Pub\/Sub ustawiam tak, aby wolni czytelnicy nie blokowali instancji. Z <strong>min-replik-do-zapisania<\/strong> R\u00f3wnowa\u017c\u0119 trwa\u0142o\u015b\u0107 z dost\u0119pno\u015bci\u0105: ma to sens w przypadku niekt\u00f3rych obci\u0105\u017ce\u0144, ale nie w przypadku \u015bcie\u017cek, dla kt\u00f3rych op\u00f3\u017anienia maj\u0105 kluczowe znaczenie. Wa\u017cne: nale\u017cy regularnie \u0107wiczy\u0107 prze\u0142\u0105czanie awaryjne przy u\u017cyciu rzeczywistych ilo\u015bci danych i dostosowywa\u0107 limity czasu, aby prawdziwa awaria nie sta\u0142a si\u0119 loteri\u0105 op\u00f3\u017anie\u0144.<\/p>\n\n<h2>Przeciwci\u015bnienie klienta i bufor wyj\u015bciowy<\/h2>\n\n<p>Je\u015bli klienci zu\u017cywaj\u0105 dane wolniej ni\u017c Redis je produkuje, rosn\u0105 <strong>Bufor wyj\u015bciowy<\/strong>. Wyznaczam jasne granice (<em>limit bufora wyj\u015bciowego klienta<\/em> dla normal, pubsub, replica) i loguj dane, aby znale\u017a\u0107 potencjalne problemy. W przypadku Pub\/Sub\u2011Fanout preferuj\u0119 mniejsze wiadomo\u015bci i kana\u0142y tematyczne zamiast jednego \u201ekana\u0142u og\u00f3lnego\u201c. Powiadomienia Keyspace aktywuj\u0119 tylko w okre\u015blonych przypadkach, poniewa\u017c zbyt szerokie <em>powiadomienia o zdarzeniach w przestrzeni kluczy<\/em> wyra\u017anie obci\u0105\u017caj\u0105 procesor. Backpressure traktuj\u0119 jako kwesti\u0119 architektury: lepiej mie\u0107 kilka wyspecjalizowanych strumieni\/kana\u0142\u00f3w ni\u017c jeden pot\u0119\u017cny strumie\u0144, kt\u00f3ry przeci\u0105\u017ca poszczeg\u00f3lnych subskrybent\u00f3w.<\/p>\n\n<h2>Optymalizacja systemu operacyjnego: gniazda, pliki i VM<\/h2>\n\n<p>Opr\u00f3cz THP, domy\u015blne ustawienia j\u0105dra maj\u0105 wp\u0142yw na <strong>Op\u00f3\u017anienie<\/strong> wyra\u017anie. Podnosz\u0119 <em>somaxconn<\/em> i warto\u015bci zaleg\u0142o\u015bci, dopasuj <em>fs.file-max<\/em> oraz ulimit (<em>nofile<\/em>) i trzymaj <em>tcp_keepalive_time<\/em> wystarczaj\u0105co niska, aby unikn\u0105\u0107 zawieszenia. <em>vm.swappiness<\/em> ustawiam bardzo nisko, cz\u0119sto blisko 1, i <em>vm.overcommit_memory<\/em> na 1, aby Forks dzia\u0142a\u0142y szybciej. Regulator CPU ustawiony na \u201eperformance\u201c zapobiega spadkowi cz\u0119stotliwo\u015bci podczas zmian obci\u0105\u017cenia. Je\u015bli to mo\u017cliwe, rezygnuj\u0119 z \u201enoisy neighbors\u201c po stronie pami\u0119ci masowej i oddzielam dane od zada\u0144 tworzenia kopii zapasowych. Wszystkie te drobne zmiany razem sk\u0142adaj\u0105 si\u0119 na <strong>Jitter<\/strong> osi\u0105ga\u0107 99. percentyl.<\/p>\n\n<h2>Realistyczne wska\u017aniki zamiast optymistycznych danych<\/h2>\n\n<p><em>redis-benchmark<\/em> dostarcza u\u017cytecznych trend\u00f3w, ale rzeczywiste obci\u0105\u017cenia r\u00f3\u017cni\u0105 si\u0119: kombinacje polece\u0144, rozmiary \u0142adunku, <strong>Pipelining<\/strong>, liczba po\u0142\u0105cze\u0144, TLS, \u015bcie\u017cka sieciowa. Symuluj\u0119 z klientami produkcyjnymi, zmieniam <em>-c<\/em> (Concurrency) oraz <em>-P<\/em> (pipeline) i mierz\u0119 percentyle op\u00f3\u017anie\u0144 w d\u0142u\u017cszych okresach czasu. Wa\u017cne jest, aby uwzgl\u0119dni\u0107 faz\u0119 zimn\u0105 i ciep\u0142\u0105, aby pami\u0119ci podr\u0119czne, JIT i okna TCP dzia\u0142a\u0142y realistycznie. W przypadku \u015bcie\u017cek sieciowych czasami stosuj\u0119 sztuczne wstrzykni\u0119cia RTT\/jitter, aby oceni\u0107 zmiany stref. Decyduj\u0105ce znaczenie ma nie najlepszy wynik, ale stabilno\u015b\u0107 <strong>95.\/99. percentyl<\/strong> pozosta\u0107 pod obci\u0105\u017ceniem.<\/p>\n\n<h2>Celowe stosowanie narz\u0119dzi diagnostycznych<\/h2>\n\n<p>Opr\u00f3cz INFO i Slow Log u\u017cywam <strong>LATENCY DOCTOR<\/strong>, w celu wykrywania systematycznych skok\u00f3w, a tak\u017ce <strong>WYKRES OP\u00d3\u0179NIE\u0143\/HISTORIA<\/strong> dla klasyfikacji czasowej. <strong>STATYSTYKI PAMI\u0118CI\/DOCTOR<\/strong> pokazuje, gdzie pami\u0119\u0107 jest marnowana. MONITOR u\u017cywam tylko kr\u00f3tkoterminowo i na izolowanych instancjach \u2013 obci\u0105\u017cenie jest realne. Na ho\u015bcie pomaga <em>iostat<\/em>, <em>vmstat<\/em>, <em>pidstat<\/em> oraz <em>ss<\/em>, aby wy\u015bwietli\u0107 czekanie na operacje wej\u015bcia\/wyj\u015bcia, kolejk\u0119 zada\u0144 i stany gniazd. Celem jest wyszukiwanie b\u0142\u0119d\u00f3w w oparciu o hipotezy: metryka \u2192 podejrzenie \u2192 kontrola krzy\u017cowa. W ten spos\u00f3b unikam \u015blepego dostosowywania i podejmuj\u0119 dzia\u0142ania, kt\u00f3re w wymierny spos\u00f3b zmniejszaj\u0105 op\u00f3\u017anienia.<\/p>\n\n<h2>W skr\u00f3cie: jak zachowa\u0107 szybko\u015b\u0107 Redis<\/h2>\n\n<p>Zapobiegam spowolnieniu dzia\u0142ania Redis poprzez <strong>Zamiana<\/strong> wy\u0142\u0105czam, \u015bci\u015ble reguluj\u0119 pami\u0119\u0107 i dostosowuj\u0119 trwa\u0142o\u015b\u0107 z zachowaniem rozs\u0105dku. Wy\u0142\u0105czam THP, w\u0142\u0105czam SSD, zmniejszam cz\u0119stotliwo\u015b\u0107 rozga\u0142\u0119zie\u0144 \u2013 w ten spos\u00f3b znika wi\u0119kszo\u015b\u0107 szczyt\u00f3w. Rozpoznaj\u0119 kosztowne polecenia w dzienniku spowolnie\u0144, dostosowuj\u0119 model danych i utrzymuj\u0119 \u015bcie\u017cki dost\u0119pu w stanie optymalnym. Umieszczam Redis blisko aplikacji, odpowiednio wymiaruj\u0119 procesor i rozdzielam obci\u0105\u017cenie na kilka instancji. Dzi\u0119ki konsekwentnemu monitorowaniu wcze\u015bnie rozpoznaj\u0119 trendy i trwale kontroluj\u0119 efekty \u201eredis slow hosting\u201c.<\/p>","protected":false},"excerpt":{"rendered":"<p>Dowiedz si\u0119, dlaczego Twoja instancja Redis dzia\u0142a wolno pomimo technologii pami\u0119ci wewn\u0119trznej i jak ukierunkowane dostrajanie Redis znacznie poprawia wydajno\u015b\u0107 buforowania.<\/p>","protected":false},"author":1,"featured_media":15864,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[733],"tags":[],"class_list":["post-15871","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress"],"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":"3111","_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":null,"_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":"redis tuning","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":"15864","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/15871","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=15871"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/15871\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/15864"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=15871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=15871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=15871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}