Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Bu makalede yalnızca Azure Cosmos DB Python SDK'sı ile ilgili sorun giderme işlemleri yer alır. Daha fazla bilgi için lütfen Azure Cosmos DB Python SDK READMESürüm notları, Paket (PyPI), Paket (Conda) ve performans ipuçlarına bakın.
Bu makale, NoSQL hesapları için Azure Cosmos DB ile Azure Cosmos DB Python SDK'sını kullanırken karşılaşılan yaygın sorunları, geçici çözümleri, tanılama adımlarını ve araçları kapsar. Azure Cosmos DB Python SDK'sı, NoSQL için Azure Cosmos DB'ye erişmek için istemci tarafı mantıksal temsili sağlar. Bu makalede, sorunla karşılaştığınızda size yardımcı olacak araçlar ve yaklaşımlar açıklanır.
Şu listeyle başlayın:
- Bu makaledeki Yaygın sorunlar ve geçici çözümler bölümüne göz atın.
-
GitHub'da açık kaynak olarak kullanılabilen Azure Cosmos DB merkezi deposundaki Python SDK'sını inceleyin. Etkin olarak izlenen bir sorunlar bölümü vardır. Geçici çözümle ilgili benzer bir sorunun zaten dosyalanmış olup olmadığını denetleyin. Yararlı bir ipucu, sorunları etikete göre filtrelemektir
*Cosmos*. - Azure Cosmos DB Python SDK'sı için performans ipuçlarını gözden geçirin ve önerilen uygulamaları izleyin.
- Çözüm bulamadıysanız bu makalenin geri kalanını okuyun. Ardından bir GitHub sorunu oluşturun. GitHub sorununuza etiket ekleme seçeneği varsa etiket
*Cosmos*ekleyin.
Tanılama kayıtları tutma ve yakalama
Önemli
Python SDK'sının en son sürümünü kullanmanızı öneririz. Sürüm geçmişini buradan de kontrol edebilirsiniz
Bu kitaplık, tanılamaları günlüğe kaydetmek için standart günlük kitaplığını kullanır. HTTP oturumlarıyla ilgili temel bilgiler (URL'ler, üst bilgiler vb.) BİlGİ düzeyinde günlüğe kaydedilir.
İstek/yanıt gövdeleri ve anonimleştirilmemiş üst bilgiler de dahil olmak üzere ayrıntılı Hata Ayıklama düzeyi günlüğü, bir istemcide logging_enable bağımsız değişkeni ile etkinleştirilebilir.
import sys
import logging
from azure.cosmos import CosmosClient
# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
# This client will log detailed information about its HTTP sessions, at DEBUG level
client = CosmosClient(URL, credential=KEY, logging_enable=True)
Benzer şekilde, logging_enable istemci için etkinleştirilmemiş olsa bile tek bir işlem için ayrıntılı günlüğe kaydetmeyi etkinleştirebilir:
database = client.create_database(DATABASE_NAME, logging_enable=True)
Alternatif olarak, günlükçünüzü logger bağımsız değişkenine geçirerek, azure çekirdeği HttpLoggingPolicy'den CosmosHttpLoggingPolicy öğesini kullanarak oturum açabilirsiniz.
Varsayılan olarak, HttpLoggingPolicy öğesinin davranışını kullanır. bağımsız değişkeninin enable_diagnostics_logging geçirildiğinde, CosmosHttpLoggingPolicy öğesi etkinleştirilir ve yanıt, Cosmos sorunlarının hata ayıklaması için ek bilgiler içerir.
import logging
from azure.cosmos import CosmosClient
#Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
# Configure a file output
handler = logging.FileHandler(filename="azure")
logger.addHandler(handler)
# This client will log diagnostic information from the HTTP session by using the CosmosHttpLoggingPolicy.
# Since we passed in the logger to the client, it will log information on every request.
client = CosmosClient(URL, credential=KEY, logger=logger, enable_diagnostics_logging=True)
Benzer şekilde, günlük kaydı tekil isteğe bir günlükçü geçirilerek tek bir işlem için etkinleştirilebilir.
Ancak, CosmosHttpLoggingPolicy kullanarak ek bilgi almak istiyorsanız, enable_diagnostics_logging bağımsız değişkenini istemci oluşturucusunda geçirmeniz gerekir.
# This example enables the `CosmosHttpLoggingPolicy` and uses it with the `logger` passed in to the `create_database` request.
client = CosmosClient(URL, credential=KEY, enable_diagnostics_logging=True)
database = client.create_database(DATABASE_NAME, logger=logger)
Tasarımı yeniden deneyin
Dayanıklı uygulamalar tasarlama ve SDK'nın yeniden deneme semantiğinin hangisi olduğunu öğrenmek için Azure Cosmos DB SDK'ları ile dayanıklı uygulamalar tasarlama kılavuzumuzu inceleyin.
Yaygın sorunlar ve geçici çözümler
Genel öneriler
En iyi performans için:
- Uygulamanın Azure Cosmos DB hesabınızla aynı bölgede çalıştığından emin olun.
- Uygulamanın çalıştığı konakta CPU kullanımını denetleyin. CPU kullanımı yüzde 50 veya daha fazlaysa uygulamanızı daha yüksek yapılandırmaya sahip bir konakta çalıştırın. Veya yükü daha fazla makineye dağıtabilirsiniz.
- Uygulamanızı Azure Kubernetes Service'te çalıştırıyorsanız , CPU kullanımını izlemek için Azure İzleyici'yi kullanabilirsiniz.
Portal ölçümlerini denetleme
Portal ölçümlerini denetlemek, bunun istemci tarafı bir sorun olup olmadığını veya hizmetle ilgili bir sorun olup olmadığını belirlemenize yardımcı olur. Örneğin, ölçümler yüksek oranda sınırlı istekler (HTTP durum kodu 429) içeriyorsa ve bu da isteğin kısıtlandığı anlamına geliyorsa İstek oranı çok büyük bölümünü denetleyin.
Bağlantı kısıtlaması
Bağlantı sınırlama, [konak makinesinde bağlantı sınırı] veya [Azure SNAT (PAT) port tükenmesi] nedeniyle oluşabilir.
Konak makinede bağlantı sınırı
Red Hat gibi bazı Linux sistemlerinin toplam açık dosya sayısı üst sınırı vardır. Linux'taki yuvalar dosya olarak uygulandığından, bu sayı toplam bağlantı sayısını da sınırlar. Aşağıdaki komutu çalıştırın.
ulimit -a
"Nofile" olarak tanımlanan izin verilen en fazla açık dosya sayısı, bağlantı havuzu boyutunuzun en az iki katı olmalıdır. Daha fazla bilgi için bkz. Azure Cosmos DB Python SDK performans ipuçları.
Azure SNAT (PAT) bağlantı noktası tükenmesi
Uygulamanız genel IP adresi olmadan Azure Sanal Makineler'e dağıtılıyorsa, varsayılan olarak Azure SNAT bağlantı noktaları VM'nizin dışındaki herhangi bir uç noktaya bağlantı kurar. VM'den Azure Cosmos DB uç noktasına izin verilen bağlantı sayısı, Azure SNAT yapılandırmasıyla sınırlıdır.
Azure SNAT bağlantı noktaları yalnızca VM'nizin özel ip adresi olduğunda ve VM'den bir işlem genel IP adresine bağlanmaya çalıştığında kullanılır. Azure SNAT sınırlamasını önlemeye yönelik iki geçici çözüm vardır:
Azure Cosmos DB hizmet uç noktanızı Azure Sanal Makineler sanal ağınızın alt ağına ekleyin. Daha fazla bilgi için bkz. Azure Sanal Ağ hizmet uç noktaları.
Hizmet uç noktası etkinleştirildiğinde, istekler artık genel IP'den Azure Cosmos DB'ye gönderilmez. Bunun yerine sanal ağ ve alt ağ kimliği gönderilir. Bu değişiklik, yalnızca genel IP'lere izin veriliyorsa güvenlik duvarının düşmesine neden olabilir. Güvenlik duvarı kullanıyorsanız, hizmet uç noktasını etkinleştirdiğinizde Sanal Ağ ACL'leri kullanarak güvenlik duvarına bir alt ağ ekleyin.
Azure VM'nize genel IP atayın.
Hizmete ulaşılamıyor - güvenlik duvarı
azure.core.exceptions.ServiceRequestError: SDK'nın hizmete erişemediğini gösterir.
Konak makinedeki Bağlantı sınırını takip edin.
Azure Cosmos DB öykünücüsine bağlanma hatası
Azure Cosmos DB Öykünücüsü HTTPS sertifikası otomatik olarak imzalanır. Python SDK'nin öykünücü ile çalışabilmesi için öykünücü sertifikasını alıp yükleyin. Daha fazla bilgi için bkz. Azure Cosmos DB Öykünücüsü sertifikalarını dışarı aktarma.
HTTP proxy'si
HTTP ara sunucusu kullanıyorsanız, SDK'da ConnectionPolicyyapılandırılan bağlantı sayısını destekleyebilendiğinden emin olun.
Aksi takdirde bağlantı sorunlarıyla karşılaşırsınız.
Sık karşılaşılan sorgu sorunları
Sorgu ölçümleri, sorgunun en çok zamanı nerede harcadığını belirlemeye yardımcı olur. Sorgu ölçümlerinden, arka uçta ve istemcide ne kadar harcandığını görebilirsiniz. Sorgu performansı kılavuzu hakkında daha fazla bilgi edinin.
Sonraki Adımlar
- Python SDK'sı için performans yönergeleri hakkında bilgi edinin
- Python SDK'sı için en iyi yöntemler hakkında bilgi edinin