{"id":41488,"date":"2026-09-30T13:32:33","date_gmt":"2026-09-30T10:32:33","guid":{"rendered":"https:\/\/profelis.com.tr\/?p=41488"},"modified":"2026-09-30T13:35:52","modified_gmt":"2026-09-30T10:35:52","slug":"pgbouncer-session-leak-master-veritabaniniz-aniden-neden-read-only-hatasi-verir","status":"publish","type":"post","link":"https:\/\/profelis.com.tr\/en\/2026\/09\/30\/pgbouncer-session-leak-master-veritabaniniz-aniden-neden-read-only-hatasi-verir\/","title":{"rendered":"PgBouncer Session Leak: Master Veritaban\u0131n\u0131z Aniden Neden &#8220;Read-Only&#8221; Hatas\u0131 Verir?"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"41488\" class=\"elementor elementor-41488\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-729f895 e-flex e-con-boxed e-con e-parent\" data-id=\"729f895\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;pix_scale_in&quot;:&quot;none&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bfc7f0e elementor-widget elementor-widget-heading\" data-id=\"bfc7f0e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Beklenmedik Bir Hata<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f734b2a elementor-widget elementor-widget-text-editor\" data-id=\"f734b2a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Rutin bir i\u015f g\u00fcn\u00fcnde oldu\u011funuzu d\u00fc\u015f\u00fcn\u00fcn. Altyap\u0131n\u0131zda, PostgreSQL yap\u0131n\u0131z\u0131n \u00f6n\u00fcnde ba\u011flant\u0131lar\u0131 y\u00f6neten PgBouncer (Transaction modunda) Metrikleriniz normal, sistem sorunsuz i\u015fliyor.<\/span><\/p><p><span style=\"font-weight: 400;\">Ta ki uygulaman\u0131z\u0131n yazma servislerinden hata loglar\u0131 gelmeye ba\u015flayana kadar&#8230;<\/span><\/p><p><span style=\"font-weight: 400;\">Loglar\u0131 a\u00e7t\u0131\u011f\u0131n\u0131zda veritaban\u0131n\u0131z\u0131nda uygulamadan gelen sorgular\u0131n \u015fu hatay\u0131 f\u0131rlatt\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcyorsunuz: <\/span><b>ERROR: 25006: cannot execute INSERT in a read-only transaction<\/b><\/p><p><span style=\"font-weight: 400;\">&#8220;Recovery modda olmayan sunucu nas\u0131l read-only olabilir?&#8221; diye d\u00fc\u015f\u00fcn\u00fcp hemen terminalden <\/span><span style=\"font-weight: 400;\">psql<\/span><span style=\"font-weight: 400;\"> ile sunucuya manuel bir ba\u011flant\u0131 kuruyorsunuz. Basit bir <\/span><b>INSERT<\/b><span style=\"font-weight: 400;\"> testi yap\u0131yor ve ek olarak <\/span><b>SELECT pg_is_in_recovery();<\/b><span style=\"font-weight: 400;\"> sorgusu ile sunucunun durumunu kontrol ediyorsunuz. \u0130\u015flem an\u0131nda ba\u015far\u0131l\u0131 oluyor ve sunucunun recovery modunda olmad\u0131\u011f\u0131, yani recovery modda olmadan\u00a0 olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131 do\u011frulan\u0131yor. Veritaban\u0131 yap\u0131land\u0131rman\u0131zda veya yetkilerde hi\u00e7bir sorun yok.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Peki ama veritaban\u0131 neden uygulamaya &#8220;Ben read-only durumday\u0131m&#8221; diyerek i\u015flemleri reddediyor? \u0130\u015fte bu noktada, altyap\u0131n\u0131z\u0131n de\u011fil, ba\u011flant\u0131 havuzunuzun i\u00e7inde gizlenen bir &#8220;Session Leak&#8221; vakas\u0131yla kar\u015f\u0131 kar\u015f\u0131yas\u0131n\u0131z demektir.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-23129a8 elementor-widget elementor-widget-image\" data-id=\"23129a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"640\" height=\"320\" src=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-1-1024x512.png\" class=\"attachment-large size-large wp-image-41493\" alt=\"\" srcset=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-1-1024x512.png 1024w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-1-300x150.png 300w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-1-768x384.png 768w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-1-1536x768.png 1536w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-1-18x9.png 18w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-1.png 1774w\" sizes=\"(max-width: 640px) 100vw, 640px\" title=\"\">\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96eb8aa elementor-widget elementor-widget-heading\" data-id=\"96eb8aa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">As\u0131l Sorun: Session Baz\u0131nda Read-Only Parametresinin De\u011fi\u015fmesi<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a97df51 elementor-widget elementor-widget-text-editor\" data-id=\"a97df51\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Detaylara indi\u011fimizde sorunun mimari y\u00f6nlendirmelerle veya veritaban\u0131 yetkileriyle hi\u00e7bir ilgisi olmad\u0131\u011f\u0131n\u0131 g\u00f6r\u00fcyoruz. Sorun tamamen, uygulaman\u0131n veritaban\u0131 ile konu\u015furken <\/span><i><span style=\"font-weight: 400;\">session state<\/span><\/i><span style=\"font-weight: 400;\">&#8216;i (oturum durumunu) de\u011fi\u015ftirmesi ve sonras\u0131nda temizlememesinden kaynaklan\u0131yor.<\/span><\/p><p><span style=\"font-weight: 400;\">Uygulama loglar\u0131n\u0131 detayl\u0131ca inceledi\u011finizde as\u0131l nedeni \u015fu sat\u0131rda bulursunuz: <\/span><b>LOG: statement: SET default_transaction_read_only TO &#8216;on&#8217;<\/b><\/p><p><b>Peki bu ne anlama geliyor?<\/b><span style=\"font-weight: 400;\"> AI ara\u00e7lar\u0131n\u0131 kullan\u0131larak geli\u015ftirilen uygulamalarda\u00a0 &#8220;Sadece Okunabilir&#8221; <\/span><b>(<\/b><b>readOnly: true<\/b><b>) <\/b><span style=\"font-weight: 400;\">olarak i\u015faretlemi\u015f olabilir. Ancak bu i\u015flem yanl\u0131\u015fl\u0131kla <\/span><b>Write Connection String<\/b><span style=\"font-weight: 400;\"> \u00fczerinden g\u00f6nderildi\u011finde zincirleme bir reaksiyon ba\u015flar:<\/span><\/p><ol><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Uygulama, PgBouncer&#8217;\u0131n havuzundan temiz bir ba\u011flant\u0131 al\u0131r.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Veritaban\u0131na kendi ba\u015f\u0131na sorgu \u00fcreten baz\u0131 AI ara\u00e7lar\u0131, olas\u0131 y\u0131k\u0131c\u0131 i\u015flemleri engellemek ve veri g\u00fcvenli\u011fini sa\u011flamak ad\u0131na, oturum seviyesinde <\/span><b>SET default_transaction_read_only TO &#8216;on&#8217;<\/b><span style=\"font-weight: 400;\"> parametresini kullanarak ba\u011flant\u0131lar\u0131 otomatik olarak &#8216;Read-Only&#8217; moduna \u00e7eker.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Okuma i\u015flemi biter ve uygulama ba\u011flant\u0131y\u0131 PgBouncer&#8217;a iade eder.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">PgBouncer &#8220;Transaction Mode&#8221; ile \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in (<\/span><b>server_reset_query_always = 0<\/b><span style=\"font-weight: 400;\">), ba\u011flant\u0131 ayarlar\u0131n\u0131<\/span> <b>DISCARD ALL<\/b><span style=\"font-weight: 400;\"> ile s\u0131f\u0131rlamadan do\u011frudan havuza geri koyar.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Havuzdaki o ba\u011flant\u0131 art\u0131k <\/span><b>&#8220;Read-Only&#8221; modunda tak\u0131l\u0131 kalm\u0131\u015f, kirli bir ba\u011flant\u0131d\u0131r.<\/b><span style=\"font-weight: 400;\"> Birka\u00e7 saniye sonra veri yazmak (INSERT\/UPDATE) i\u00e7in havuza gelen yepyeni bir i\u015flem, rastgele bu kirli ba\u011flant\u0131y\u0131 al\u0131r ve <\/span><b>25006 (read_only_sql_transaction)<\/b><span style=\"font-weight: 400;\"> hatas\u0131n\u0131 vererek iptal olur.<\/span><\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8b548c0 elementor-widget elementor-widget-image\" data-id=\"8b548c0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"640\" height=\"320\" src=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-2-1024x512.png\" class=\"attachment-large size-large wp-image-41495\" alt=\"\" srcset=\"https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-2-1024x512.png 1024w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-2-300x150.png 300w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-2-768x384.png 768w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-2-1536x768.png 1536w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-2-18x9.png 18w, https:\/\/profelis.com.tr\/wp-content\/uploads\/2026\/09\/pgbouncer-ara-gorsel-2.png 1774w\" sizes=\"(max-width: 640px) 100vw, 640px\" title=\"\">\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6778eb2 elementor-widget elementor-widget-heading\" data-id=\"6778eb2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Ge\u00e7ici ve Kal\u0131c\u0131 \u00c7\u00f6z\u00fcm Ad\u0131mlar\u0131<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9935d50 elementor-widget elementor-widget-text-editor\" data-id=\"9935d50\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">B\u00f6yle bir durumda sistemi h\u0131zl\u0131ca toparlamak ve kal\u0131c\u0131 olarak \u00e7\u00f6zmek i\u00e7in \u015fu ad\u0131mlar\u0131 izlemelisiniz:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Acil M\u00fcdahale:<\/b><span style=\"font-weight: 400;\"> Kilitlenmi\u015f ba\u011flant\u0131lar\u0131 temizlemek i\u00e7in PgBouncer havuzunu yeniden ba\u015flatman\u0131z gerekir. <\/span><b>systemctl restart pgbouncer<\/b><span style=\"font-weight: 400;\"> komutu ile havuzu s\u0131f\u0131rlad\u0131\u011f\u0131n\u0131z an trafik normale d\u00f6ner. Ancak hatal\u0131 kod \u00e7al\u0131\u015fmaya devam etti\u011fi s\u00fcrece havuz yeniden kirlenecektir.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Ge\u00e7ici Sistem Yamas\u0131:<\/b><span style=\"font-weight: 400;\"> PgBouncer yap\u0131land\u0131rmas\u0131nda <\/span><b>server_reset_query_always = 1<\/b><span style=\"font-weight: 400;\"> yaparak her i\u015flemden sonra veritaban\u0131na zorla <\/span><b>DISCARD ALL<\/b><span style=\"font-weight: 400;\"> g\u00f6nderebilirsiniz. Bu s\u0131z\u0131nt\u0131y\u0131 \u00e7\u00f6zer ancak prepared statement&#8217;lar\u0131 (\u00f6nceden derlenmi\u015f sorgular\u0131) silece\u011fi i\u00e7in veritaban\u0131 CPU kullan\u0131m\u0131n\u0131 art\u0131r\u0131p ciddi bir performans darbo\u011faz\u0131 yaratabilir. Bu y\u00fczden kal\u0131c\u0131 bir \u00e7\u00f6z\u00fcm olarak tavsiye edilmez.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Kod Taraf\u0131 Y\u00f6nlendirmesi:<\/b><span style=\"font-weight: 400;\"> Kod taraf\u0131nda <\/span><b>readOnly: true<\/b><b> (veya <\/b><b>AsNoTracking<\/b><b>)<\/b><span style=\"font-weight: 400;\"> i\u00e7eren t\u00fcm metotlar\u0131n sadece <\/span><b>Read Connection String<\/b><span style=\"font-weight: 400;\"> \u00fczerinden \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olunmal\u0131d\u0131r. Yazma havuzuna hi\u00e7bir \u015fekilde oturum seviyesinde bir durum de\u011fi\u015fikli\u011fi g\u00f6nderilmemelidir.<\/span><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2689df7 elementor-widget elementor-widget-heading\" data-id=\"2689df7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u00c7\u0131kar\u0131lmas\u0131 Gereken Dersler (Best Practices)<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5640eb7 elementor-widget elementor-widget-text-editor\" data-id=\"5640eb7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Bu tarz gizli sorunlar, sistem y\u00f6neticilerine ve yaz\u0131l\u0131m ekiplerine \u00f6nemli tecr\u00fcbeler kazand\u0131r\u0131r. \u0130\u015fte dikkat etmeniz gereken 3 temel kural:<\/span><\/p><ol><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Connection String \u0130zolasyonu:<\/b><span style=\"font-weight: 400;\"> AI arac\u0131 ile ana uygulaman\u0131n ayn\u0131 <\/span><i><span style=\"font-weight: 400;\">production<\/span><\/i><span style=\"font-weight: 400;\"> kullan\u0131c\u0131s\u0131n\u0131 payla\u015fmas\u0131, olas\u0131 bir havuz kirlenmesinde t\u00fcm sistemi kilitler. Ba\u011flant\u0131 mekanizmas\u0131n\u0131 g\u00fcvenli y\u00f6netmek i\u00e7in uygulamalar\u0131 i\u015flevlerine g\u00f6re farkl\u0131 kullan\u0131c\u0131 seviyelerine ay\u0131r\u0131n. AI ara\u00e7lar\u0131 i\u00e7in <\/span><i><span style=\"font-weight: 400;\">read-only<\/span><\/i><span style=\"font-weight: 400;\"> yetkilerine sahip, tamamen ayr\u0131 bir veritaban\u0131 kullan\u0131c\u0131s\u0131 (ve izole bir connection pool) olu\u015fturun. Bu yap\u0131sal izolasyon, AI taraf\u0131nda ya\u015fanabilecek bir sorunun di\u011fer kritik uygulamalara ve ana sisteme s\u0131\u00e7ramas\u0131n\u0131 kesin olarak engeller.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>Pooler Modunuzun Davran\u0131\u015f\u0131n\u0131 Tan\u0131y\u0131n:<\/b><span style=\"font-weight: 400;\"> PgBouncer&#8217;\u0131 Transaction modunda kullan\u0131yorsan\u0131z, varsay\u0131lan olarak <\/span><b>DISCARD ALL<\/b><span style=\"font-weight: 400;\"> komutunun \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 ve oturum seviyesindeki de\u011fi\u015fikliklerin di\u011fer i\u015flemleri etkileyebilece\u011fini bilmelisiniz.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><b>ApplicationName Kullan\u0131m\u0131:<\/b><span style=\"font-weight: 400;\"> Bir hatay\u0131 ararken loglarda <\/span><b>app=[unknown]<\/b> <span style=\"font-weight: 400;\">g\u00f6rmek i\u015fleri olduk\u00e7a zorla\u015ft\u0131r\u0131r. Connection String&#8217;lerinizin sonuna mutlaka <\/span><b>ApplicationName=FaturaServisi<\/b><span style=\"font-weight: 400;\"> gibi tan\u0131mlay\u0131c\u0131lar ekleyin. B\u00f6ylece havuzu kirleten mod\u00fcl\u00fc loglar \u00fczerinden h\u0131zl\u0131ca tespit edebilirsiniz.<\/span><\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>PostgreSQL\u2019de PgBouncer Session Leak kaynakl\u0131 read-only hatas\u0131n\u0131n nedenlerini, ge\u00e7ici ve kal\u0131c\u0131 \u00e7\u00f6z\u00fcmleri ve ba\u011flant\u0131 havuzu y\u00f6netimini \u00f6\u011frenin.<\/p>","protected":false},"author":16,"featured_media":41490,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[45,75,129],"tags":[60,50],"class_list":["post-41488","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-yazi","category-postgresql","category-veritabani","tag-postgresql","tag-veritabani"],"_links":{"self":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/posts\/41488","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/comments?post=41488"}],"version-history":[{"count":5,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/posts\/41488\/revisions"}],"predecessor-version":[{"id":41498,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/posts\/41488\/revisions\/41498"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/media\/41490"}],"wp:attachment":[{"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/media?parent=41488"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/categories?post=41488"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/profelis.com.tr\/en\/wp-json\/wp\/v2\/tags?post=41488"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}