Everion Consulting
Everion Consulting
HomeBlogSalesforce Governor Limits Yönetimi

Salesforce Governor Limits Yönetimi

Salesforce Governor Limits Yönetimi
Buse Savaş

Buse Savaş

6 August 2025

Salesforce

Salesforce Governor Limits Nedir? Ve Neden Bu Kadar Önemlidir?

Hayatımızın her alanında bazı sınırlar vardır ve biz bu sınırlara uymak zorundayız. Örneğin bir markete gittiğimizde yanımızda sınırlı sayıda poşet vardır. Her poşete belirli sayıda ürün koyabiliriz. Tüm alışverişi tek bir poşete sığdırmak istersek poşet yırtılır. Salesforce'un "Governor Limits" mantığı da tam olarak budur.

Salesforce bulut tabanlı bir sistemdir. Yani siz bu sistemi kullanırken aynı anda binlerce başka şirket de aynı sistemde işlem yapıyor olabilir. Salesforce sistem kaynaklarının adil bir şekilde paylaşımını sağlamak ve performansını korumak için her kullanıcıya belirli sınırlar koyar. Bu sınırlara Governor Limits denir.

Governor Limits Neden Vardır?

Governor Limits'in temel amacı çok kiracılı (multi-tenant) bir sistemde kaynakların adil paylaşımını sağlamaktır. Tıpkı bir apartmanda herkesin su kullanımının sınırlı olması gibi Salesforce'ta da işlem, sorgu, bellek kullanımı gibi konularda limitler vardır. Diyelim ki bir apartman su deposu var. Eğer bir daire banyoyu açık bırakırsa tüm apartman susuz kalabilir. Salesforce bu durumu engellemek için her daireye yani kullanıcıya sınırlı kaynak kullanımı verir.

Governor Limits Türleri

1- SOQL Query Limitleri

SOQL (Salesforce Object Query Language) Salesforce' da veritabanı sorguları yapmak için kullanılan özel bir sorgulama dilidir. SQL’e (Structured Query Language) oldukça benzer şekilde çalışır ancak yalnızca Salesforce’un standart ve custom object’leri üzerinde işlem yapılmasına izin verir. SOQL ile sistemde kayıtlı olan veriler arasında arama yapılabilir, belirli kriterlere uyan kayıtlar çekilebilir. SOQL sorguları çok büyük bir kitaplıktaki kitapları bulmak için kullanılan bir sistem gibidir. Eğer sistemden aynı anda yüzlerce sorgu yapılırsa sistem tıkanır. Bu yüzden Salesforce her kullanıcıya belirli sayıda sorgu hakkı verir. Salesforce'taki Governor Limits kapsamında tek bir işlem içinde maksimum 100 SOQL sorgusu çalıştırılmasına izin verilir. Bu nedenle SOQL sorguları dikkatli ve optimize şekilde kullanılmalıdır.

2. DML Limitleri

Salesforce'ta veriler üzerinde yapılan insert, update, delete, undelete gibi işlemler DML işlemleri olarak adlandırılır. DML işlemleri veritabanı üzerinde doğrudan değişiklik yapar. Örneğin bir müşteri kaydını güncellemek veya yeni bir Opportunity oluşturmak DML işlemidir. Ancak sistemin diğer kullanıcılarla paylaşılması nedeniyle Salesforce bu işlemlere sınır koyar. Bir Apex kodu içinde bu işlemlerden en fazla 150 adet yapılmasına izin verilir.

Örneğin bir kampanya kapsamında 200 müşterinin e-posta adreslerini güncellemek istiyoruz. Eğer her birini update ile tek tek işlersek limit olan 150 DML işlem sınırını aşarız ve sistem LimitException hatası verir. Apex kodu ile güncellemeleri bir listeye ekleyip tek seferde topluca update yapabiliriz böylece limitimizi düzgün kullanırız. Salesforce DML işlemlerini anlık olarak izlemek için bazı metotlar sunar. Bu sayede bir kod bloğunun kaç DML işlemi yaptığını ölçebiliriz.

3. CPU Time Limitleri

Salesforce’ta çalışan her Apex işlemi için belirli bir CPU süresi yani işlem süresi sınırı vardır. Bu sınır kodun çalışması sırasında sunucu tarafında kullanılan işlemci süresini ölçer. Salesforce her Apex işlemine maksimum 10.000 milisaniye yani 10 saniye CPU süresi verir. Kodunuz 10.000 ms sınırını aşarsa sistem LimitException: Apex CPU time limit exceeded hatası verir ve işlem durdurulur. Bu hata kullanıcıya gösterilir ve veri kaydedilmez. Döngüler içinde SOQL sorgusu yapmak çok fazla for döngüsü, karmaşık hesaplamalar oldukça fazla CPU tüketen senaryolardandır.

4. Heap Size Limitleri

Salesforce'ta Heap bir Apex kodu çalışırken kullanılan geçici hafıza alanıdır. Kodunuzda nesneler, listeler, stringler gibi geçici veriler belleğe alınır ve işlem tamamlanana kadar bu veriler heap memory içinde tutulur.

Sınırı Senkron işlemlerde 6 MB, Asenkron işlemlerde 12 MB'dır. Bu sınır aşıldığında System.LimitException: Apex heap size too large hatası alınır. Limits.getHeapSize() metodu ile kodun kullandığı anlık heap miktarı ölçülebilir.

5. Callout Limitleri

Salesforce içinde bir dış sistemle haberleşmek istediğimizde HTTP Callout yapmamız gerekir. Yani Salesforce dış dünyayla veri alışverişi yapar. Ancak bu işlem de sınırlıdır. Bir işlem içinde maksimum 100 adet HTTP callout yapılabilir. Bu sınır GET, POST, PUT, DELETE gibi tüm HTTP metodları için geçerlidir. Diyelim ki bir müşteri listemiz var ve her müşteri için dış bir kur sisteminden dolar kuru çekmek istiyoruz. Eğer 150 müşteri varsa ve her biri için ayrı callout yapılırsa 100 sınırını aştığımız anda LimitException hatası alırız. Bunun çözümü olarak dış sistemden toplu veri çekebiliriz ya da müşteri kayıtlarını parçalara bölerek işlem yapabiliriz.

Bu Limitleri Nasıl Yönetiriz?

1. Bulkification

Salesforce’ta Bulkification çok sayıda kaydı tek seferde işleyebilmek için yazılan optimize bir kodlama tekniğidir. Bu kavram Governor Limits’i aşmamak için kritik bir önemdedir. Salesforce aynı anda birçok kullanıcının çalıştığı bir sistem olduğu için bir işlemde yapılabilecek SOQL (sorgu) ve DML (kayıt güncelleme) sayısını sınırlar. Eğer her bir kayıt için ayrı ayrı işlem yapılırsa bu limitler çabucak aşılır. Bulkification bu sınırları aşmamak için verileri toplu şekilde işleme imkanı sağlar. Örneğin marketten alışveriş yaparken her ürün için ayrı ayrı kasaya gitmek yerine hepsini sepete koyup tek seferde ödeme yaparsınız.

2. Query ve DML İşlemlerini Sınırlı Tutmak

İşlem içinde gereksiz sorgulardan kaçınılmalı ve döngü içinde sorgu yazılmamalı.

3. SOQL for Loop Kullanımı

Salesforce’ta büyük miktarda veriye erişmeniz gerektiğinde, heap memory' i daha verimli kullanmak için SOQL for loop tercih edilir. Bu yapı, sorgudan dönen verileri küçük parçalara bölerek işler ve böylece belleğin dolup Heap Size Limit’ ini aşmasını engeller.

4. Limits Class ile İzleme

Limits.getDmlStatements() veya Limits.getQueries() gibi metotlarla anlık olarak kaç işlem yaptığınızı izleyebilirsiniz.

İzleme ve Test Etme

Salesforce Governor Limits Developer Console, Apex Debug Logs ve System Log ile kolayca izlenebilir. Test sınıflarında Test.startTest() ve Test.stopTest() komutları limitlerin sıfırlanması açısından oldukça kullanışlıdır.

Sonuç

Governor Limits geliştiricileri sınırlayan bir engel değil aslında onları daha verimli, optimize ve sürdürülebilir kod yazmaya teşvik eden bir mekanizmadır. Tıpkı bir arabanın hız sınırlayıcısı gibi sistemin güvenliğini korur.

Biz de eğer Salesforce’da başarılı uygulamalar geliştirmek istiyorsak bu limitleri öğrenmek ve onlarla uyum içinde devam etmek zorundayız.

Kaynakça

  1. Execution Governors and Limits
  2. Apex Developer Guide

https://trailhead.salesforce.com/content/learn/modules/apex_triggers/apex_triggers_gov_limits.