Oracle yük testi: servis adı, bind değişkenleri ve sorgu gecikmesi
Oracle'da yük altındaki gecikme çoğu zaman en sık çalışan birkaç sorgudan ve oturum sayısından gelir. Uygulamanın sorgularını bind değişkenleriyle, gerçekçi değerlerle ve hedef eşzamanlılıkta doğrudan veritabanına göndermek darboğazı uygulamadan ayırır. Genel yöntem veritabanı yük testi rehberindedir; bu sayfa Oracle'a özgü kısmı anlatır.
Oracle bağlantısı
| Varsayılan port | 1521 |
|---|---|
| Yer tutucu (parametre) | :1, :2… |
| Veritabanı / servis | servis adı (ör. FREEPDB1), SID değil |
| TLS için sürücü parametresi | — |
| Okumalar salt okunur transaction'da | Hayır, yalnızca sorgu kontrolü |
- Bağlantılar → Bağlantı ekle'ye tıklayın, Tür olarak Oracle seçin ve bir ad verin (ör.
orders-db). - Sunucu, Port (boşsa 1521), Veritabanı / servis, Kullanıcı ve Parola'yı girin. Mümkünse yalnızca gerekli tablolarda
SELECTyetkisi olan ayrı bir kullanıcı kullanın; parola şifreli saklanır, testte yalnızca bağlantının adı geçer. - En çok açık bağlantı (runner başına): varsayılan 50. Toplam bağlantı ≈ runner sayısı × bu değer; veritabanının bağlantı sınırını aşmayacak şekilde ayarlayın.
- Kaydet, sonra Test et. Veritabanına yalnızca bir bastion üzerinden ulaşılıyorsa bağlantıya bir SSH tüneli ekleyin.
Oracle için SQL adımı
Sorguyu Sorgu alanına sabit metin olarak yazın; değerleri :1 yer tutucusuyla Parametreler'de verin. Parametreler {{__VU}}, {{$randInt 1 100000}}, çıkarılmış değişkenler ya da CSV veri dosyasından değerler içerebilir; sorgu metninin içine şablon yazılamaz, böylece SQL enjeksiyonu olmaz. Check sekmesinde örneğin Satır sayısı = 1 ekleyin, Dene ile tek iterasyonu çalıştırıp dönen satırları görün, sonra Kaydet.
{"id": "ora", "name": "Oracle", "protocol": "sql", "connection": "oracle-db",
"sql": {"query": "SELECT id, status FROM orders WHERE customer_id = :1 FETCH FIRST 10 ROWS ONLY", "params": ["{{__VU}}"]}}Bir okumanın süresi pool'dan bağlantı beklemeyi, sorguyu ve bütün satırların alınmasını kapsar. Satırlar JSON nesneleri dizisi olarak kontrollere ve değişken çıkarmaya gider ($[0].status gibi). Hatalar türüne göre ayrılır: zaman aşımı, bağlantı reddi, yetki, bulunamayan tablo, kısıt ihlali, sözdizimi ve salt okunur ihlali.
Veriyi korumak
Spitfire bir sorgunun okuma mı yazma mı olduğunu kendisi anlar ve okuma sayamadığı her şeyi yazma sayar. Yazmalar adımda açıkça onaylanmadan test kaydedilmez, onaylanmışsa test her başlatıldığında ayrıca onay ister ve onay denetim kaydına yazılır (güvenlik beyanı).
Bu veritabanında salt okunur transaction yoktur; okumaları yalnızca Spitfire'ın sorgu kontrolü korur ve SQL adımının formu bunu uyarı olarak gösterir. Bu yüzden bağlantıya yalnızca okuma yetkisi olan bir kullanıcı verin.
Hangi sorguları yüklemeli?
Hangi sorguların yükleneceğini Oracle'ın paylaşılan SQL istatistikleri (V$SQL) söyler: her sorgunun çalışma sayısını ve geçen süresini tutar. En sık çalışan ve toplamda en çok süre alan birkaç sorgu, testin iskeletidir.
Sorguları elle yazmak yerine veritabanının kendi schema'sından önerilmesini de isteyebilirsiniz (kurulum yöneticileri; schema'dan query önerileri). Oracle için gereken yetkiler: CREATE SESSION, uygulama schema'sının tablolarında SELECT ve SELECT_CATALOG_ROLE. Her öneri EXPLAIN PLAN ile kontrol edilir: yalnızca plan alınır, sorgu çalıştırılmaz; her önerinin bir satır sınırı (FETCH FIRST) vardır.
Ardından yük modelini seçin: beklenen eşzamanlılıkta sabit bir yük, ya da sınırı bulmak için basamaklı bir kırılma noktası testi. Sonuçları ortalamayla değil p95 ve p99 ile okuyun.
Sık karşılaşılan hatalar
ORA-12514: listener does not currently know of service: servis adı yanlış. Veritabanı / servis alanına SID'yi değil servis adını yazın (ör.FREEPDB1).ORA-01017: kullanıcı adı ya da parola yanlış, ya da kullanıcının erişimi yok. Parolayı yeniden yazıp kaydedin.- Bağlantı sınırı hataları: runner sayısı × En çok açık bağlantı (runner başına) veritabanının kabul ettiği oturumdan fazla; değeri düşürün ya da sınırı yükseltin.
Sık sorulan sorular
Oracle bağlantısında servis adı mı SID mi yazılır?Testler
Oracle'da bind değişkeni nasıl verilir?Testler
Oracle yük testinde okumalar salt okunur mu?Testler
Spitfire tek komutla Docker'a ya da Kubernetes'e kurulur; ücretsiz sürümde bütün test özellikleri ve protokoller açıktır.