Elasticsearch Nedir ve Neden Slow Query Performansı Görülür?
1. Yanlış Sorgu Yapısı: Karmaşık sorgular, veritabanı üzerinde büyük bir yük oluşturabilir.
2. Veri Miktarının Artması: Veritabanı büyüdükçe sorguların yanıt süreleri de artabilir.
3. Düşük Kaynaklar: Yetersiz donanım kaynakları, Elasticsearch'ün verimli çalışmasını engelleyebilir.
Slow Query Performansını Anlamak
PUT /my_index/_settings
{
"index.search.slowlog.threshold.query.warn": "1s",
"index.search.slowlog.threshold.query.info": "500ms",
"index.search.slowlog.threshold.query.debug": "100ms",
"index.search.slowlog.threshold.query.trace": "10ms"
}
Bu ayar, 1 saniye ve daha uzun süren sorguları yavaş sorgu olarak kaydeder ve Elasticsearch'ün yavaş sorguları izlemesine olanak tanır. Bu bilgiyi kullanarak hangi sorguların performans sorunlarına yol açtığını belirleyebilirsiniz.
Yavaş Sorgular İçin Yaygın Çözümler
Elasticsearch’te sorgu yaparken, her zaman verimli sorgular yazmaya dikkat etmelisiniz. Eğer bir sorgu çok fazla veri tarıyorsa, filtreleme kullanarak yalnızca gerekli verileri seçmek daha hızlı sonuçlar almanızı sağlar. Örneğin, aşağıdaki gibi sorgular yazabilirsiniz:
GET /my_index/_search
{
"query": {
"bool": {
"filter": [
{ "term": { "user": "john_doe" }},
{ "range": { "date": { "gte": "2025-01-01", "lte": "2025-12-31" }}}
]
}
}
}
Bu şekilde, sorgu yalnızca ilgili verileri tarar ve performans artışı sağlar.
Veri şemalarını doğru bir şekilde oluşturmak, sorgu performansını ciddi anlamda iyileştirebilir. Elasticsearch’te veri türlerini ve analiz yöntemlerini doğru belirlemek çok önemlidir. Örneğin, text veri tipi büyük metinler için uygundur, ancak kısa metinler için keyword veri tipi daha uygun olacaktır.
PUT /my_index
{
"mappings": {
"properties": {
"title": { "type": "keyword" },
"description": { "type": "text" }
}
}
}
Yukarıdaki örnekte, başlık alanı için keyword türü seçilmiştir, böylece sorgular daha hızlı olur.
# 3. Cache Kullanımı
PUT /my_index/_settings
{
"settings": {
"index.requests.cache.enable": true
}
}
# 4. Donanım Kaynakları
Elasticsearch’te Performans İzleme
GET /my_index/_search
{
"profile": true,
"query": {
"match": {
"title": "Elasticsearch"
}
}
}
Bu komutla, sorgunun her bir parçasının ne kadar sürdüğünü detaylı şekilde gözlemleyebilirsiniz.