{"id":1662,"date":"2025-11-10T23:25:28","date_gmt":"2025-11-10T20:25:28","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/postgresql-autovacuum-tuning-ve-bloatla-barismak-vpste-pratik-ayarlar-ve-pg_repack-ile-neredeyse-sifir-kesinti\/"},"modified":"2025-11-10T23:25:28","modified_gmt":"2025-11-10T20:25:28","slug":"postgresql-autovacuum-tuning-ve-bloatla-barismak-vpste-pratik-ayarlar-ve-pg_repack-ile-neredeyse-sifir-kesinti","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/postgresql-autovacuum-tuning-ve-bloatla-barismak-vpste-pratik-ayarlar-ve-pg_repack-ile-neredeyse-sifir-kesinti\/","title":{"rendered":"PostgreSQL Autovacuum Tuning ve Bloat\u2019la Bar\u0131\u015fmak: VPS\u2019te Pratik Ayarlar ve pg_repack ile Neredeyse S\u0131f\u0131r Kesinti"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><h2 id=\"section-1\">Bir Sabah CPU 100\u2019e Vurur: Autovacuum\u2019u G\u00f6rmezden Gelmenin Bedeli<\/h2>\n<p>Hi\u00e7 gece boyunca her \u015fey s\u00fctliman giderken sabah bir bakm\u0131\u015fs\u0131n\u0131z, <a href=\"https:\/\/www.dchost.com\/tr\/vps\">VPS<\/a> nefes alam\u0131yor mu? Benim ba\u015f\u0131ma geldi. CPU tepede, disk I\/O k\u0131pk\u0131rm\u0131z\u0131, uygulama arada bir t\u00f6kezliyor. Loglara bak\u0131nca su\u00e7lu \u00e7akt\u0131rmadan ortaya \u00e7\u0131kt\u0131: autovacuum, tablo \u015fi\u015fkinli\u011finin alt\u0131ndan kalkmak i\u00e7in t\u00fcm g\u00fcc\u00fcyle ko\u015fuyordu. O an anlad\u0131m, bu i\u015f \u201cvarsay\u0131lan ayarlar iyidir\u201d rahatl\u0131\u011f\u0131yla y\u00fcr\u00fcm\u00fcyor; \u00f6zellikle de k\u00fc\u00e7\u00fck bir VPS \u00fczerinde ko\u015fuyorsan\u0131z, birka\u00e7 ince ayar hayat kurtar\u0131yor.<\/p>\n<p>Bug\u00fcn konu\u015faca\u011f\u0131m\u0131z \u015fey asl\u0131nda \u00e7ok insani: bir \u015feyleri s\u00fcrekli g\u00fcncelleyip siliyoruz, PostgreSQL de buna ayak uydurmak i\u00e7in sahne arkas\u0131nda u\u011fra\u015f\u0131yor. Ama bazen sahne arkas\u0131ndaki ekip yoruluyor, g\u00f6revler birikiyor, bloat (\u015fi\u015fkinlik) art\u0131yor, sonra da o me\u015fhur sabah krizi geliyor. Bu yaz\u0131da bloat\u2019\u0131n ne oldu\u011funu insan gibi anlataca\u011f\u0131m, autovacuum\u2019u VPS ger\u00e7eklerine g\u00f6re nas\u0131l yumu\u015fatabilece\u011fimizi payla\u015faca\u011f\u0131m, en sonunda da \u201ckesinti olmadan nas\u0131l toparlar\u0131z\u201d diye sorup pg_repack ile pratik bir yol g\u00f6sterece\u011fim.<\/p>\n<p>Mesela \u015f\u00f6yle d\u00fc\u015f\u00fcn\u00fcn: Restoranda men\u00fcden \u00e7ok \u015fey sipari\u015f ediyorsunuz ama tabaklar bo\u015fal\u0131nca bir t\u00fcrl\u00fc toplanm\u0131yor. Masada art\u0131k yemek yok ama tabaklar yer kaplamaya devam ediyor. PostgreSQL\u2019deki bloat tam olarak bu, autovacuum da bo\u015f tabaklar\u0131 toplayan garson. Garsonu do\u011fru zamanda, do\u011fru tempoyla \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z masa hep ferah kal\u0131r.<\/p>\n<h2 id=\"section-2\">Bloat Nedir, Autovacuum Ne \u0130\u015f Yapar ve Neden Can\u0131m\u0131z\u0131 S\u0131kar?<\/h2>\n<p>PostgreSQL, veriyi g\u00fcncellerken eskisini hemen silmiyor. \u201c\u00c7oklu s\u00fcr\u00fcm\u201d mant\u0131\u011f\u0131 sayesinde eski ve yeni kay\u0131tlar bir s\u00fcre birlikte ya\u015f\u0131yor. Sizin i\u015finiz bitti\u011finde, yani art\u0131k o eski kayda kimse bakmayacak hale geldi\u011finde, autovacuum bu \u00f6l\u00fc sat\u0131rlar\u0131 fark edip alan\u0131 geri kazand\u0131r\u0131yor. Ayr\u0131ca istatistikleri g\u00fcncelliyor, bazen de freezing gibi daha derin temizliklere giriyor. Bu perde arkas\u0131 rutin, trafi\u011fe g\u00f6re bazen masum, bazen de yo\u011fun bir tempoya d\u00f6n\u00fc\u015febiliyor.<\/p>\n<p>\u015ei\u015fkinlik dedi\u011fimiz \u015fey, bu \u00f6l\u00fc sat\u0131rlar\u0131n ve par\u00e7alanm\u0131\u015f sayfalar\u0131n birikmesi. Diskte yer kapl\u0131yor, index\u2019lerin \u015fi\u015fmesine yol a\u00e7\u0131yor, okuma ve yazmay\u0131 a\u011f\u0131rla\u015ft\u0131r\u0131yor. \u00d6zellikle \u00e7ok yazma yapan tablolarda, bir s\u00fcre sonra sorgular\u0131n ayaklar\u0131na k\u00fc\u00e7\u00fck a\u011f\u0131rl\u0131klar ba\u011flanm\u0131\u015f gibi hissettiriyor. Autovacuum bunu d\u00fczene sokuyor ama yanl\u0131\u015f zamanda agresifle\u015firse, k\u00fc\u00e7\u00fck bir VPS\u2019in kaynaklar\u0131n\u0131 \u00e7ekip alabiliyor. Tam tersi, fazla temkinliyse bu kez bloat y\u00fckseliyor ve y\u00fck an\u0131nda tek seferde hesap sormaya geliyor.<\/p>\n<p>\u0130\u015fin zor k\u0131sm\u0131 dengeyi kurmak. Disk I\/O hafifken daha cesur, yo\u011fun saatlerde nazik olmak istiyorsunuz. Bir de \u015fu var: VACUUM FULL gibi a\u011f\u0131r top\u00e7ular masay\u0131 bir kerede silip s\u00fcp\u00fcr\u00fcr ama uzun kilitler getirir. \u00c7o\u011fu zaman g\u00fcnl\u00fck ko\u015fuda buna cesaret edemeyiz. O y\u00fczden bu yaz\u0131n\u0131n bir yerinde pg_repack\u2019ten bahsedece\u011fim; \u00e7\u00fcnk\u00fc tam o arad\u0131\u011f\u0131m\u0131z \u201cmasay\u0131 sessizce temizle, m\u00fc\u015fteriyi rahats\u0131z etme\u201d hissini ya\u015fat\u0131yor.<\/p>\n<h2 id=\"section-3\">\u015ei\u015fkinli\u011fi Nas\u0131l Fark Ederiz? Basit \u00d6l\u00e7\u00fcmler, Loglar ve K\u00fc\u00e7\u00fck T\u00fcyolar<\/h2>\n<p>Bir \u015feyi iyile\u015ftirmeden \u00f6nce g\u00f6rmemiz laz\u0131m. Ben genelde ilk bak\u0131\u015f\u0131 basit sorgularla atar\u0131m. \u00d6rne\u011fin, hangi tabloda \u00f6l\u00fc sat\u0131r birikmi\u015f, en tepedekiler kim, \u015f\u00f6yle bir yoklamak bile fikir verir:<\/p>\n<pre class=\"language-sql line-numbers\"><code class=\"language-sql\">SELECT schemaname, relname, n_dead_tup\nFROM pg_stat_user_tables\nORDER BY n_dead_tup DESC\nLIMIT 20;\n<\/code><\/pre>\n<p>Bu say\u0131 tek ba\u015f\u0131na karar verdirmesin ama trendleri izlemekte \u00e7ok i\u015fe yarar. Bir di\u011fer pratik yol, autovacuum loglar\u0131n\u0131 a\u00e7mak. K\u0131sa bir s\u00fcre i\u00e7in detayl\u0131 kayda al\u0131p sonra tekrar hafifletmek iyi bir taktiktir. \u00d6rne\u011fin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># postgresql.conf i\u00e7inde bir d\u00f6nemlik tan\u0131lama:\nlog_autovacuum_min_duration = 0   # bir s\u00fcreli\u011fine, sonra 5s veya 1s gibi bir de\u011fere \u00e7ekin\n<\/code><\/pre>\n<p>Bu sayede hangi tablo, ne kadar s\u00fcrede, ne kadar sayfa temizlenmi\u015f g\u00f6rebilirsiniz. Loglar\u0131n\u0131za d\u00fczenli bakmay\u0131 seviyorsan\u0131z, merkezi bir sistem kurma konusu size tan\u0131d\u0131k gelebilir. Ben b\u00f6yle durumlarda <a href=\"https:\/\/www.dchost.com\/blog\/vps-log-yonetimi-nasil-rayina-oturur-grafana-loki-promtail-ile-merkezi-loglama-tutma-sureleri-ve-alarm-kurallari\/\">VPS loglar\u0131n\u0131 tatl\u0131 tatl\u0131 toplayan bir d\u00fczen<\/a> kurmay\u0131 seviyorum; hem alarm kurmak kolay oluyor, hem de trendler ortaya \u00e7\u0131k\u0131yor.<\/p>\n<p>Daha detayl\u0131 bloat tahmini i\u00e7in <a href=\"https:\/\/www.postgresql.org\/docs\/current\/pgstattuple.html\" rel=\"nofollow noopener\" target=\"_blank\">pgstattuple<\/a> eklentisi g\u00fczel bir b\u00fcy\u00fcte\u00e7 gibi \u00e7al\u0131\u015f\u0131r. Tek bir tabloya bak\u0131p ger\u00e7ekten ne kadar bo\u015fluk, ne kadar canl\u0131 veri var g\u00f6rmek isterseniz \u00e7ok yard\u0131mc\u0131d\u0131r. Geli\u015ftiricilerin sevdi\u011fi pratik, anla\u015f\u0131l\u0131r bir \u00e7\u0131kt\u0131s\u0131 var. Bir de rutin vacuuming\u2019in mant\u0131\u011f\u0131na g\u00f6z atmak isterseniz, resmi dok\u00fcmantasyonun <a href=\"https:\/\/www.postgresql.org\/docs\/current\/routine-vacuuming.html\" rel=\"nofollow noopener\" target=\"_blank\">d\u00fczenli vacuum<\/a> b\u00f6l\u00fcm\u00fcne arada bir d\u00f6nmek iyi gelir; k\u0131sa, net ve yol g\u00f6sterici.<\/p>\n<h2 id=\"section-4\">VPS\u2019te Autovacuum Ayarlar\u0131n\u0131 Yumu\u015fatmak: Pratik, Hafif ve Etkili<\/h2>\n<p>K\u00fc\u00e7\u00fck-orta bir VPS i\u00e7in en b\u00fcy\u00fck hedefim, autovacuum\u2019u i\u015fini yaparken nazikle\u015ftirmek ve yo\u011fun saatlerde g\u00f6lgede tutmak. Bunu birka\u00e7 ayarla hissedilir bi\u00e7imde ba\u015farabiliyoruz. Hani bir odaya yava\u015f\u00e7a s\u00fcp\u00fcrgeyle girer, \u00e7ocuk uyurken g\u00fcr\u00fclt\u00fc yapmadan i\u015finizi tamamlars\u0131n\u0131z ya, tam \u00f6yle. A\u015fa\u011f\u0131daki ayarlar \u201cba\u015flang\u0131\u00e7 noktas\u0131\u201d gibi d\u00fc\u015f\u00fcn\u00fclmeli; sonra \u00f6l\u00e7\u00fcp k\u00fc\u00e7\u00fck dokunu\u015flarla oturtmak ideal.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># K\u00fcresel (postgresql.conf) \u00f6neri-\u00f6rnekleri \u2014 VPS i\u00e7in sakin ba\u015flang\u0131\u00e7\nautovacuum = on\nautovacuum_naptime = '30s'                # daha s\u0131k yokla, k\u00fc\u00e7\u00fck i\u015fleri biriktirme\nautovacuum_max_workers = 2                 # 2-3 aras\u0131; CPU ve I\/O durumuna g\u00f6re\nautovacuum_vacuum_scale_factor = 0.05      # b\u00fcy\u00fcyen tablolarda daha erken temizle\nautovacuum_analyze_scale_factor = 0.05\nautovacuum_vacuum_threshold = 200          # \u00e7ok k\u00fc\u00e7\u00fck tablolarda tetikleyici taban\nautovacuum_analyze_threshold = 200\nvacuum_cost_delay = '5ms'                  # nazik ad\u0131mlar\nvacuum_cost_limit = 2000                   # her ad\u0131mda ne kadar \u201cmaliyet\u201d g\u00f6ze al\u0131n\u0131r\nmaintenance_work_mem = '256MB'             # reindex\/pg_repack ve vacuum i\u00e7in alan\ntrack_io_timing = on                       # I\/O zamanlar\u0131n\u0131 g\u00f6r\u00fcp \u00f6l\u00e7\u00fcmlerde kullan\u0131n\n<\/code><\/pre>\n<p>Bu ayarlar\u0131 yazd\u0131ktan sonra bir iki g\u00fcn g\u00f6zlem yapmak \u00f6nemli. \u201c\u00c7ok nazik olmu\u015f, bloat y\u00fckseliyor\u201d hissederseniz cost_limit\u2019i biraz art\u0131r\u0131n ya da naptime\u2019\u0131 k\u0131salt\u0131n. Tersi durumda, yani yo\u011fun saatlerde rahats\u0131z ediyorsa cost_delay\u2019i art\u0131r\u0131p daha kibar hale getirin. Ben yo\u011fun saat d\u0131\u015f\u0131 pencerelerde biraz agresifle\u015fmeyi seviyorum. Hatta <code>ALTER SYSTEM<\/code> ile de\u011ferleri de\u011fi\u015ftirip <code>SELECT pg_reload_conf()<\/code> diyerek g\u00fcnl\u00fck ritme uygun k\u00fc\u00e7\u00fck ge\u00e7i\u015fler yapt\u0131\u011f\u0131n\u0131zda etkisini hemen hissedersiniz.<\/p>\n<p>B\u00fcy\u00fck, bol yazma alan tablolara \u00f6zel ayar vermek alt\u0131n de\u011ferinde. O tablo i\u00e7in autovacuum\u2019u daha s\u0131k ama k\u00fc\u00e7\u00fck lokmalar halinde \u00e7al\u0131\u015ft\u0131rmak tabloyu ferah tutar. \u00d6rne\u011fin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">ALTER TABLE public.olaylar SET (\n  autovacuum_vacuum_scale_factor = 0.02,\n  autovacuum_analyze_scale_factor = 0.02,\n  autovacuum_vacuum_threshold = 100,\n  autovacuum_analyze_threshold = 100\n);\n<\/code><\/pre>\n<p>B\u00f6ylece genel ayarlar\u0131n\u0131z\u0131 bozmadan, sorun \u00e7\u0131karan tabloya \u00f6zel re\u00e7ete yazm\u0131\u015f oluyorsunuz. Yeri gelmi\u015fken, uygulama taraf\u0131nda okuma y\u00fck\u00fcn\u00fc azaltmak da bloat\u2019\u0131n etkisini hafifletir. Dinamik sayfalar\u0131n\u0131z i\u00e7in <a href=\"https:\/\/www.dchost.com\/blog\/nginx-mikro-onbellekleme-ile-php-uygulamalarini-ucurmak-1-5-sn-cache-bypass-ve-purge-ne-zaman-nasil\/\">k\u00fc\u00e7\u00fck mikro \u00f6nbellek katmanlar\u0131<\/a> kurmak, hem veritaban\u0131n\u0131 dinlendirir hem de autovacuum\u2019\u0131n arada nefes almas\u0131n\u0131 sa\u011flar.<\/p>\n<h2 id=\"section-5\">VACUUM FULL m\u0131, pg_repack m\u0131? Neredeyse S\u0131f\u0131r Kesinti Arayanlara<\/h2>\n<p>\u0130tiraf edeyim, g\u00fcnl\u00fck ko\u015fuda VACUUM FULL beni gerer. Yapt\u0131\u011f\u0131 i\u015f \u00e7ok net ama getirdi\u011fi uzun kilit y\u00fcz\u00fcnden \u00e7o\u011fu uygulamada cesaret edemeyiz. O y\u00fczden bloat ciddi seviyeye geldi\u011finde ve alan\u0131 geri kazanmak istiyorsak, ben pg_repack\u2019i tercih ediyorum. Arka planda masay\u0131 yeniden kurup, en sonda h\u0131zl\u0131 bir de\u011fi\u015fimle i\u015fleri yoluna koyuyor; kilit s\u00fcreleri genelde \u00e7ok k\u0131sa kal\u0131yor.<\/p>\n<p>pg_repack\u2019i kullanmadan \u00f6nce k\u00fc\u00e7\u00fck bir \u015fart var: tablonuzda birincil anahtar ya da benzersiz bir index olmal\u0131. Bu sayede arka planda tutarl\u0131 bir \u015fekilde yeni tabloyu dokuyabiliyor. Kurulum basit; paket y\u00f6neticilerinde ya da kaynak koddan kurulabiliyor. Sunucuda eklentiyi bir defa tan\u0131tmak da gerekiyor:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">-- veritaban\u0131nda bir kereye mahsus\nCREATE EXTENSION IF NOT EXISTS pg_repack;\n<\/code><\/pre>\n<p>Sonras\u0131nda komut sat\u0131r\u0131ndan tablo baz\u0131nda ilerlemek rahat. \u00d6nce k\u00fc\u00e7\u00fck bir tablodan ba\u015flamak moral ve g\u00fcven verir, sonra b\u00fcy\u00fck tablolara ge\u00e7ilir:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\"># tek tabloyu repack etmek\npg_repack -h 127.0.0.1 -p 5432 -U app -d uygulama -t public.olaylar\n\n# t\u00fcm veritaban\u0131n\u0131 repack etmek (\u00f6nce testte deneyin)\npg_repack -h 127.0.0.1 -p 5432 -U app -d uygulama -a\n<\/code><\/pre>\n<p>Komut \u00e7al\u0131\u015f\u0131rken k\u0131sa s\u00fcreli iki kritik an olur: ba\u015flarken ve en sonda \u201cswap\u201d yaparken \u00e7ok k\u0131sa kilit al\u0131r. Genellikle kullan\u0131c\u0131 fark etmez. Yine de trafik yo\u011funken de\u011fil, bir t\u0131k sakin bir zamanda yapmak iyi hissettirir. Ara\u00e7la ilgili se\u00e7eneklere g\u00f6z atmak isterseniz <a href=\"https:\/\/github.com\/reorg\/pg_repack\" rel=\"nofollow noopener\" target=\"_blank\">pg_repack\u2019in resmi deposu<\/a> a\u00e7\u0131klay\u0131c\u0131d\u0131r; ama g\u00f6z\u00fcn\u00fcz\u00fc korkutmas\u0131n, temel kullan\u0131m olduk\u00e7a yal\u0131n.<\/p>\n<p>Bu yakla\u015f\u0131m\u0131n g\u00fczelli\u011fi \u015fu: uygulamay\u0131 ayakta tutars\u0131n\u0131z, disk alan\u0131n\u0131 geri kazan\u0131rs\u0131n\u0131z, index\u2019ler toparlan\u0131r. Bunu dinamik \u015fema de\u011fi\u015fikliklerine benzetebilirsiniz. Benzer \u201ckesintiyi minimize etme\u201d refleksini, farkl\u0131 veritaban\u0131 d\u00fcnyalar\u0131nda da severiz; \u00f6rne\u011fin <a href=\"https:\/\/www.dchost.com\/blog\/mysqlde-sifir-kesinti-sema-degisiklikleri-gh-ost-ve-pt-online-schema-change-ile-blue-green-nasil-kurulur\/\">s\u0131f\u0131r kesinti yakla\u015f\u0131m\u0131n\u0131n mant\u0131\u011f\u0131<\/a> burada da ilham veriyor.<\/p>\n<h2 id=\"section-6\">Operasyon Ak\u0131\u015f\u0131: Yedek, G\u00f6zlem, K\u00fc\u00e7\u00fck Pencereler ve Rahat Bir Nefes<\/h2>\n<p>\u015eimdi i\u015fin mutfak taraf\u0131n\u0131 toparlayal\u0131m. K\u00fc\u00e7\u00fck bir planla, bloat ve autovacuum konusunu kontrol alt\u0131na almak m\u00fcmk\u00fcn. \u00d6nce sa\u011flam bir yedekle ba\u015flamak laz\u0131m; hem g\u00fcven verir, hem de ba\u015f\u0131m\u0131za i\u015f a\u00e7madan \u00f6nce nefes ald\u0131r\u0131r. Ben b\u00f6yle kritik dokunu\u015flardan \u00f6nce tek d\u00fc\u011fmeyle geri d\u00f6nebilece\u011fim bir plan\u0131 seviyorum. Bu konuda bir yol haritas\u0131na ihtiya\u00e7 duyuyorsan\u0131z, <a href=\"https:\/\/www.dchost.com\/blog\/felaket-kurtarma-plani-nasil-yazilir-rto-rpoyu-kafada-netlestirip-yedek-testleri-ve-runbooklari-gercekten-calisir-hale-getirmek\/\">yedek ve kurtarma planlar\u0131n\u0131<\/a> g\u00f6zden ge\u00e7irmek iyi gelir.<\/p>\n<p>Sonra hafif bir \u00f6l\u00e7\u00fcm turu: en \u00e7ok b\u00fcy\u00fcyen tablolara bak\u0131n, loglardan autovacuum\u2019\u0131n nerelerde zorland\u0131\u011f\u0131n\u0131 not al\u0131n. G\u00fcnd\u00fcz yo\u011funlu\u011funda nazik, gece daha kararl\u0131 bir profil \u00e7izmek i\u00e7in ayarlar\u0131 k\u00fc\u00e7\u00fck dokunu\u015flarla a\u00e7\u0131p kapat\u0131n. Bir iki g\u00fcn i\u00e7inde ritim oturur. \u00c7ok inat\u00e7\u0131 \u015fi\u015fkinliklerde pg_repack\u2019i k\u00fc\u00e7\u00fckten b\u00fcy\u00fc\u011fe do\u011fru \u00e7al\u0131\u015ft\u0131rmak iyi sonu\u00e7 verir, bu s\u0131rada disk alan\u0131n\u0131z\u0131n yeterli oldu\u011fundan emin olun.<\/p>\n<p>Uygulama taraf\u0131nda, gereksiz yazmalar\u0131 azaltmak ve \u201cayn\u0131 sat\u0131r\u0131 k\u0131sa s\u00fcrede tekrar tekrar g\u00fcncelleme\u201d huyunu biraz t\u00f6rp\u00fclemek de fayda sa\u011flar. Okuma y\u00fck\u00fcn\u00fc CDN, sayfa \u00f6nbelle\u011fi ya da uygulama i\u00e7i k\u0131sa s\u00fcreli cache ile hafifletmek, veritaban\u0131n\u0131n daha sakin bir dengeye oturmas\u0131na yard\u0131m eder. K\u00fc\u00e7\u00fck bir de\u011fi\u015fiklik bile vakumun aray\u0131 kapatmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r. Bazen mesele sadece veritaban\u0131nda de\u011fil, trafi\u011fin ritminde gizlidir.<\/p>\n<h2 id=\"section-7\">Saha Notlar\u0131: S\u0131k Yap\u0131lan Hatalar ve Yumu\u015fak \u0130ni\u015f Taktikleri<\/h2>\n<p>\u015eunu \u00e7ok g\u00f6rd\u00fcm: varsay\u0131lan ayarlar k\u00fc\u00e7\u00fck veriyle g\u00fczel \u00e7al\u0131\u015f\u0131yor, ama tablo b\u00fcy\u00fcy\u00fcnce tetikleme e\u015fi\u011fi orant\u0131s\u0131z hale geliyor. Bir bak\u0131yorsunuz, tablo y\u00fcz milyon sat\u0131ra ko\u015fmu\u015f, scale factor y\u00fcz\u00fcnden autovacuum ko\u015fmam\u0131\u015f, bloat birikmi\u015f. \u00c7\u00f6z\u00fcm basit: b\u00fcy\u00fck tablolara per-table ayar verin ve scale factor\u2019\u00fc k\u00fc\u00e7\u00fclt\u00fcn. Di\u011feri de \u015fu: loglar\u0131 tamamen kapat\u0131p \u201cher \u015fey yolunda\u201d demek. Oysa arada bir k\u0131sa s\u00fcreli detayl\u0131 log almak, nerede aksad\u0131\u011f\u0131n\u0131z\u0131 bir anda g\u00f6sterir.<\/p>\n<p>Bir de \u201cVACUUM FULL yapar ge\u00e7erim\u201d co\u015fkusu var. Evet, temizler ama kilit s\u00fcreleri can s\u0131kar. \u00dcstelik ufak bir pencerede yakalamak zor. Onun yerine pg_repack ile k\u00fc\u00e7\u00fck ad\u0131mlarla ilerlemek \u00e7ok daha huzurlu hissettiriyor. Tabii, burada da disk alan\u0131na ve index yap\u0131lar\u0131na dikkat etmek gerek. Anahtar yoksa \u00f6nce uygun bir index yaratmak \u015fart.<\/p>\n<p>Son not: maintenance_work_mem\u2019i gereksizce k\u0131sarsan\u0131z, reindex ve repack gibi i\u015fler uzun s\u00fcrer. \u00c7ok y\u00fckseltirseniz k\u00fc\u00e7\u00fck VPS\u2019te ba\u015fka i\u015fler dar bo\u011faza girer. Bir iki denemede \u201ci\u015fler ak\u0131yor ama sistem rahat\u201d dengesini bulmak m\u00fcmk\u00fcn. K\u00fc\u00e7\u00fck de\u011fi\u015ftir, \u00f6l\u00e7, bir daha de\u011fi\u015ftir; ritim b\u00f6yle kuruluyor.<\/p>\n<h2 id=\"section-8\">Kapan\u0131\u015f: Bloat\u2019\u0131 Ehlile\u015ftirmek \u0130\u00e7in K\u00fc\u00e7\u00fck Ad\u0131mlar, B\u00fcy\u00fck Rahatl\u0131k<\/h2>\n<p>Toparlayal\u0131m. Bloat, asl\u0131nda g\u00fcn\u00fcn sonunda masa \u00fczerinde kalan bo\u015f tabaklar. Autovacuum o tabaklar\u0131 topluyor, istatistikleri yeniliyor ve veritaban\u0131n\u0131n i\u00e7 d\u00fczenini koruyor. K\u00fc\u00e7\u00fck bir VPS \u00fczerinde yapaca\u011f\u0131n\u0131z birka\u00e7 ayar, bu i\u015fin g\u00fcr\u00fclt\u00fcs\u00fcn\u00fc k\u0131smaya yetiyor. \u00d6l\u00e7erek ilerlemek, yo\u011fun saatlerde nazik olmak ve per-table re\u00e7eteler yazmak, sistemi ak\u0131\u015fkan tutuyor. S\u0131k\u0131\u015fm\u0131\u015f tablolarda pg_repack ile neredeyse hi\u00e7 hissettirmeden derin temizlik yapmak da cabas\u0131.<\/p>\n<p>Pratik \u00f6neri olarak \u015funlar\u0131 akl\u0131n\u0131zda tutun: loglar\u0131 ara ara detayland\u0131r\u0131p izleyin, en \u00e7ok b\u00fcy\u00fcyen tablolara \u00f6zel ayar verin, cost delay ve limit ile nazik\/agresif dengesini bulun. Bloat inat etti\u011finde, uygun bir pencerede pg_repack\u2019i \u00e7al\u0131\u015ft\u0131r\u0131p masay\u0131 tazeleyin. Ayarlar\u0131 bir kerede de\u011fil, k\u00fc\u00e7\u00fck ad\u0131mlarla de\u011fi\u015ftirin; \u00f6l\u00e7meden k\u00f6rlemesine gitmeyin. \u0130sterseniz rutin vacuum mant\u0131\u011f\u0131n\u0131 k\u0131sa bir turla <a href=\"https:\/\/www.postgresql.org\/docs\/current\/routine-vacuuming.html\" rel=\"nofollow noopener\" target=\"_blank\">resmi d\u00f6k\u00fcmanda<\/a> da tazeleyin; birka\u00e7 fikir hemen cebinize giriyor.<\/p>\n<p>Umar\u0131m bu yaz\u0131 size bir nefes ald\u0131rm\u0131\u015ft\u0131r. Bir sonraki bak\u0131mda, sabahlar\u0131 panikle de\u011fil, \u201cbiz bu i\u015fi biliyoruz\u201d rahatl\u0131\u011f\u0131yla g\u00fcne ba\u015flaman\u0131z\u0131 isterim. Sorular\u0131n\u0131z olursa not al\u0131n, bir ak\u015fam kahvesinde birlikte \u00fczerinden ge\u00e7eriz. \u015eimdilik ho\u015f\u00e7a kal\u0131n; veritabanlar\u0131n\u0131z ferah, geceleriniz sakin olsun.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Bir Sabah CPU 100\u2019e Vurur: Autovacuum\u2019u G\u00f6rmezden Gelmenin Bedeli Hi\u00e7 gece boyunca her \u015fey s\u00fctliman giderken sabah bir bakm\u0131\u015fs\u0131n\u0131z, VPS nefes alam\u0131yor mu? Benim ba\u015f\u0131ma geldi. CPU tepede, disk I\/O k\u0131pk\u0131rm\u0131z\u0131, uygulama arada bir t\u00f6kezliyor. Loglara bak\u0131nca su\u00e7lu \u00e7akt\u0131rmadan ortaya \u00e7\u0131kt\u0131: autovacuum, tablo \u015fi\u015fkinli\u011finin alt\u0131ndan kalkmak i\u00e7in t\u00fcm g\u00fcc\u00fcyle ko\u015fuyordu. O an anlad\u0131m, bu i\u015f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1663,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-1662","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1662","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=1662"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1662\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/1663"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=1662"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=1662"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=1662"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}