DevBlog.
Bloga Dön

Serverless Veritabanlarında Performans Darboğazlarını Aşmak (TiDB ve Prisma)

3 dk okuma

Sunucusuz (serverless) mimarilerde veritabanı bağlantı havuzu (connection pool) yönetimi ve cold start sürelerini minimize etmek için ipuçları.

Serverless mimariler (Vercel, AWS Lambda) bize sınırsız ölçeklenebilirlik sunsa da, geleneksel veritabanı bağlantılarıyla (PostgreSQL, MySQL) bir araya geldiklerinde büyük performans sorunlarına yol açabilir.

Bu makalede, Prisma ORM ve TiDB Serverless kullanarak sunucusuz ortamlarda milisaniyelik veritabanı performansı elde etmenin yollarını konuşacağız.

Serverless Ortamlarda Bağlantı Sorunu Neden Olur?

Geleneksel bir sunucu (örneğin Node.js Express uygulaması) sürekli ayaktadır ve veritabanıyla 10-20 adet açık bağlantıyı sürekli elinde tutar (Connection Pooling).

Ancak serverless dünyasında, her yeni istek geldiğinde yeni bir mikro-sunucu ayağa kalkabilir (Cold Start). Bu mikro-sunucuların her biri veritabanına yeni bir TCP bağlantısı açmaya çalışır. 1000 eşzamanlı istek geldiğinde, veritabanınıza anında 1000 adet yeni bağlantı kurulmak istenir. Bu durum hem veritabanını kilitler hem de isteklerin yanıt süresini saniyelerce geciktirir.

Çözüm 1: Prisma Client Nesnesini Tekilleştirmek (Singleton Pattern)

Next.js'te geliştirme (dev) ortamında hot-reload çalışırken sürekli yeni Prisma Client oluşturulmasını engellemek ve tek bir bağlantı havuzu kullanmak için global objeden yararlanmalıyız:

import { PrismaClient } from "@prisma/client";

const globalForPrisma = globalThis as unknown as {
  prisma: PrismaClient | undefined;
};

export const prisma =
  globalForPrisma.prisma ??
  new PrismaClient({
    log: ["query"],
  });

if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;

Çözüm 2: TiDB Serverless ve Optimize Edilmiş Bağlantı Limitleri

TiDB Serverless, MySQL protokolünü destekleyen ve otomatik ölçeklenebilen muazzam bir veritabanı çözümüdür. Bağlantı limitlerini aşmamak için

DATABASE_URL
sonuna bağlantı limitini (
connection_limit
) ve boşta kalma süresini (
pool_timeout
) belirten parametreler ekleyebilirsiniz:

DATABASE_URL="mysql://user:pass@host:4000/db?sslaccept=strict&connection_limit=5&pool_timeout=10"

Bu parametreler sayesinde, her bir serverless fonksiyon instance'ının veritabanına kuracağı maksimum bağlantı adedini sınırlamış ve havuzun şişmesini engellemiş olursunuz.

Çözüm 3: Edge Runtime ve Prisma Data Proxy (Accelerate)

Eğer uygulamanız Vercel Edge Runtime üzerinde çalışıyorsa, doğrudan TCP bağlantısı kuramazsınız (çünkü Edge ortamlarında ham TCP desteği kısıtlıdır). Bu durumda Prisma Accelerate veya TiDB Cloud HTTP API gibi HTTP tabanlı proxy'leri kullanmak, hem bağlantı sürelerini sıfıra indirir hem de global önbellekleme (caching) avantajı sağlar.

Serverless mimarilerde mimariyi baştan doğru kurmak, ileride yaşanabilecek kesintilerin ve yavaşlıkların önüne geçmek için en kritik adımdır!

İlginizi Çekebilir

Önerilen Ekipman

Logitech MX Master 3S

Bu blog yazısını yazarken kullandığım ve kod yazmayı keyfe dönüştüren efsanevi mouse. Bilek ağrılarına son!

Yorumlar (2)

Yorum yapmak için giriş yapmalısınız

Topluluğumuzu spam ve botlardan korumak için içeriklere sadece kayıtlı üyeler etkileşimde bulunabilir.

Giriş Yap / Üye Ol
Z
Zeynep Kaya
12 Haziran 2026

Affiliate linkinizdeki ürünü ben de kullanıyorum, herkese tavsiye ederim. Elinize sağlık.

A
Ahmet Yılmaz
11 Haziran 2026

Gerçekten çok faydalı bir yazı olmuş, teşekkürler! Özellikle bahsettiğiniz detaylar çok işime yarayacak.