Lyrebird · Realistic synthetic test databases, generated fully offline

10 milyon satır, PostgreSQL’de yaklaşık 52 saniyede hazır

Pagila’yı bir laptopta 10 milyon satıra çıkarıp RAM’deki PostgreSQL’e yaklaşık 52 saniyede yazdık. Üç denemenin süreleri, hazır saymanın şartı ve süreye girmeyen işler.

Bu sayfada
  1. Üç deneme
  2. İçinde ne vardı
  3. Önce profil, sonra doğrudan motora
  4. GPU bu 52 saniyeyi kısaltmadı
  5. Neyi ölçmedik

Test veritabanı, satırlar motorun içinde durunca işe yarar. Anahtar ve indeks de orada olacak. 31 Ekim 2026’da bunu Pagila’nın büyütülmüş halinde ölçtük. Laptopta 10 milyon satır, PostgreSQL’de yaklaşık 52 saniyede hazırdı.

Süre üç denemenin ortalaması. Her seferinde yeni bir veritabanı açtık, veriyi yazdık, sonra tabloları PostgreSQL’in içinde saydık. Müşteri verisi yok.

Üç deneme

Deneme Veritabanında sayılan satır Hazır
10 milyon, 1 10.000.000 54,2 sn
10 milyon, 2 10.000.000 50,6 sn
10 milyon, 3 10.000.000 51,3 sn

52 saniye bu üçünün ortalaması. Kabaca saniyede 190 bin satır. Veritabanı RAM’de 1,1 GB tuttu. Üretimi taşıyan profil 233 KB. Diske ara SQL dosyası çıkmadı.

Aynı işi 5 milyon satırla da üç kez yaptık. Sayım 5.000.001 satır verdi. Süre 25,6 ile 25,9 saniye arasındaydı. Satır iki katına çıkınca süre de yaklaşık iki katına çıktı.

Burada “hazır”, kronometreyi istediğimiz yerde durdurmak değil. Şema kurulmuş, satırlar yazılmış, kısıtlar ve indeksler yerinde, her tablonun satır sayısı veritabanından okunmuş demek. Saydıktan sonra veritabanını sildik. RAM motorunun ilk açılışı, 3,4 saniye, bu süreye dahil değil.

İçinde ne vardı

Kaynak, herkesin bildiği film kiralama örneği Pagila 3.0.0. Müşteri, envanter, kiralama ve aya bölünmüş ödemeler var. 22 tablo, 36 foreign key, toplam yaklaşık 62 bin satır.

Toplamı yaklaşık 160 kat büyüttük. Tabloların birbirine oranı durdu. Film, dil, kategori ve ülke gibi küçük tablolar kaynak boyutunda kaldı; kiralama ve ödemeyle birlikte büyümedi. 10 milyonda en büyükler kiralama ve ödemeydi, ikisi de 3,6 milyon. Film–oyuncu 1,2 milyon, envanter 1 milyon satır. Primary key, foreign key ve indeksler hedef veritabanında kuruldu. PostgreSQL bunları uyguladı.

Önce profil, sonra doğrudan motora

Üretirken kaynağa bir daha bağlanmadık. Kaynağı bu makinede bir kez profil ettik. Yerel model GPU’da çalıştı. Profil 18,7 saniye sürdü ve 233 KB’lık dosya çıktı. Sonraki üretimler yalnız bu dosyayı kullandı.

Hedef bir INSERT dosyası değildi. Docker’da, bellekte duran gerçek bir PostgreSQL 16 açtık. Bellek bütçesi 24 GiB:

lyrebird ram start --ram-mb 24576

Motor 3,4 saniyede kalktı. Sonraki denemelerde aynısını kullandık. Üretim, satırları bu motorun üstünde yeni bir veritabanına --total-rows 10000000 ile yazdı. Komut bitince normal bir bağlantı adresi vardı.

GPU bu 52 saniyeyi kısaltmadı

Laptopta RTX 3060 Laptop var. Profil çıkarırken onu kullandık. Üretimde süreye etkisi yok. İlk iki denemede GPU açıktı: 54,2 ve 50,6 saniye. Üçüncüsü yalnız CPU’ydu: 51,3 saniye, aynı aralık. Süre, satırı üretip anahtar ve indeksle birlikte PostgreSQL’e yazmanın süresi.

Neyi ölçmedik

  • Makine. Tek laptop: Intel Core i7-12700H, 61 GB RAM, 6 GB RTX 3060 Laptop, Linux. Başka işlemci, disk ya da şema aynı süreyi vermez.
  • Veritabanı. Sadece PostgreSQL 16. MySQL, SQL Server ve Oracle bu ölçümde yok.
  • Sürenin içi. Kronometre üretim komutuyla başlıyor. Veritabanı hazır olup satırlar sayılınca duruyor. 18,7 saniyelik profil ve 3,4 saniyelik motor açılışı dışarıda.
  • Sürüm. Bu boyutta üretim lisanslı sürümde. Community tablo başına 5.000 satırla sınırlı.
  • Karşılaştırma. Tek şema, tek boyut, tek makine. Her veritabanında en hızlı biziz demiyoruz. Bu yükün bir laptopta bir dakikanın altına indiğini gösteriyoruz.

Profil elinizdeyse, üretimi kopyalamadan ve diske SQL yığmadan, anahtarları duran 10 milyon satırlık bir PostgreSQL’i yeniden kurabilirsiniz. Kaynak kapandıktan sonra Lyrebird’ün ürettiği de bu profil.

Kendi şemanızda görmek için Lyrebird’e bakın ya da demo isteyin.