dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Hata Teşhis Kütüphanesi/mongodb-bsonobj-size-exceeds-16mb-limit
MongoDB
MongoDB 6.0 - 8.0Veri Modelleme
5 dk okuma
BSONObj size: 16793600 (0x1004000) is invalid. Size must be between 0 and 16793600 / Document exceeds 16MB

MongoDB 16MB Doküman Limiti Aşımı: Şişen Diziler (Unbounded Arrays), Antipattern'lar ve Bucket Deseni

Doküman içerisine sonsuz büyüyen alt diziler eklenmesi veya büyük ikili dosyaların GridFS yerine doğrudan saklanması sonucu oluşan 16MB hatasının tespiti ve Bucket/Outlier deseniyle çözümü.

İnceleyen:Kıdemli Veritabanı Mimarı & SRE (dataiotech Labs)
Test Edilen Sürümler: MongoDB 6.0 / 7.0 / 8.0

Operasyonel Doğrulama & Güvenilirlik Standardı

Son Teknik İnceleme: 2 Kasım 2026
Test Edilen SürümlerMongoDB 7.0.8, 8.0.1
Gerekli YetkireadWrite role on database
Risk Seviyesi
High16MB sınırına vuran bir dokümana $push yapılamaz; uygulama o kullanıcı veya kayıt için tamamen yazamaz hale gelir
Beklenen Çıktı$bsonSize aggregasyonu ile en büyük dokümanların 16MB altında teyit edilmesi
Geri Dönüş (Rollback) Planı:Şişen diziyi alt koleksiyona veya GridFS'e taşıma
MongoDB Docs: BSON Document Size Limit
İlk 60 Saniye Teşhis Protokolü:

Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.

▸Belirti

Dokümana yeni bir eleman eklenmeye çalışıldığında işlem doğrudan reddedilir:

plaintext
MongoServerError: BSONObj size: 16793600 (0x1004000) is invalid. Size must be between 0 and 16793600(16MB) MongoServerError: Document exceeds maximum allowed size of 16777216 bytes

▸Sahada Ne Görürsün?

Kullanıcı dokümanına yorum, log veya bildirim eklendikçe belirli bir kullanıcı için $push işlemleri tamamen kilitlenir.


▸Kök Neden Matrisi

OlasılıkKök NedenAçıklama
%70Şişen Dizi (Unbounded Array) Antipattern'ıDokümanın içerisine comments: [...] veya audit_logs: [...] şeklinde sonsuz büyüyen diziler yerleştirilmiştir.
%20İkili Veri (Binary/Image) SaklamaProfil fotoğrafı veya PDF'ler GridFS yerine Base64/Binary olarak doğrudan dokümana gömülmüştür.
%10Aşırı Detaylı İlişki Modellemesiİlişkisel tablodaki 1-to-N bağıntısının N tarafı kontrolsüzce tek dokümana gömülmüştür.

▸ACİL RUNBOOK (0-5dk)

javascript
// 1. Koleksiyondaki en büyük dokümanları ve boyutlarını bul db.users.aggregate([ { $project: { sizeBytes: { $bsonSize: "$$ROOT" } } }, { $sort: { sizeBytes: -1 } }, { $limit: 5 } ]); // 2. 16MB sınırındaki dokümandan eski gereksiz elemanları temizle (ör. son 100 log'u tut) db.users.updateOne( { _id: ObjectId("64f1a2b3c4d5e6f7a8b9c0d1") }, { $push: { audit_logs: { $each: [], $slice: -100 } } } );

▸KALICI BLUEPRINT

  1. 1Bucket & Subset Deseni: Sonsuz büyüyen diziler ayrı koleksiyona (user_audit_logs) referans verilerek taşınmalı; ana dokümanda sadece son 10 kayıt tutulmalıdır.
  2. 2GridFS Kullanımı: 16MB sınırını aşabilecek dosya veya büyük JSON'lar için MongoDB GridFS kullanılmalıdır.

▸Doğrulama

javascript
db.users.aggregate([ { $match: { _id: ObjectId("64f1a2b3c4d5e6f7a8b9c0d1") } }, { $project: { sizeMB: { $divide: [{ $bsonSize: "$$ROOT" }, 1048576] } } } ]);

Diğer Veritabanı Hata Teşhisleri

Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.

Tüm Hatalar (82)