Mendiagnosis dan memecahkan masalah saat menggunakan Azure Cosmos DB .NET SDK

BERLAKU UNTUK: SQL API

Artikel ini membahas masalah umum, solusi, langkah diagnostik, dan alat saat Anda menggunakan .NET SDK dengan akun Azure Cosmos DB SQL API. .NET SDK menyediakan representasi logis sisi klien untuk mengakses Azure Cosmos DB SQL API. Artikel ini menjelaskan alat dan pendekatan untuk membantu Anda jika mengalami masalah.

Daftar periksa untuk pemecahan masalah

Pertimbangkan daftar periksa berikut sebelum Anda memindahkan aplikasi ke produksi. Menggunakan daftar periksa mencegah beberapa masalah umum yang mungkin Anda temui. Anda juga dapat mendiagnosis dengan cepat ketika terjadi masalah:

  • Gunakan SDK terbaru. Pratinjau SDK tidak boleh digunakan untuk produksi. Ini akan mencegah bertemu dengan masalah umum yang sudah diperbaiki sebelumnya.
  • Tinjau tips performa, dan ikuti praktik yang disarankan. Ini akan membantu mencegah penskalaan, latensi, dan masalah performa lainnya.
  • Aktifkan pengelogan SDK untuk membantu Anda memecahkan masalah. Mengaktifkan pengelogan dapat memengaruhi performa sehingga yang terbaik adalah mengaktifkannya hanya saat memecahkan masalah. Anda bisa mengaktifkan log berikut:
  • Catat metrik menggunakan portal Microsoft Azure. Metrik portal menunjukkan telemetri Azure Cosmos DB, yang berguna untuk menentukan apakah masalah tersebut terkait dengan Azure Cosmos DB atau dengan pihak klien.
  • Catat string diagnostik di V2 SDK atau diagnostik di V3 SDK dari respons operasi titik.
  • Mencatat Metrik Kueri SQL dari semua respons kueri
  • Ikuti penyiapan untuk pengelogan SDK

Lihat bagian Masalah umum dan solusi dalam artikel ini.

Periksa Bagian masalah GitHub yang dipantau secara aktif. Periksa untuk melihat apakah ada masalah serupa dengan solusi yang sudah diajukan. Jika Anda tidak menemukan solusi, ajukan masalah GitHub. Anda dapat membuka tanda centang dukungan untuk masalah mendesak.

Masalah umum dan solusi

Saran umum

  • Jalankan aplikasi Anda di wilayah Azure yang sama dengan akun Azure Cosmos DB Anda, jika memungkinkan.
  • Anda mungkin mengalami masalah konektivitas/ketersediaan karena kurangnya sumber daya pada mesin klien Anda. Sebaiknya pantau penggunaan CPU Anda pada simpul yang menjalankan klien Azure Cosmos DB, dan tingkatkan/turunkan skala jika beban penggunaannya tinggi.

Periksa metrik portal

Memeriksa metrik portal akan membantu menentukan apakah itu masalah di sisi klien atau layanan yang bermasalah. Misalnya, jika metrik berisi permintaan dengan tarif terbatas yang tinggi (kode status HTTP 429). yang berarti permintaan akan dibatasi, periksa bagian Tingkat permintaan terlalu besar.

Logika coba lagi

Lihat panduan kami mendesain aplikasi tangguh dengan Azure Cosmos SDK untuk panduan tentang cara mendesain aplikasi tangguh dan mempelajari semantik percobaan ulang SDK.

Kelelahan port Azure SNAT (PAT)

Jika aplikasi Anda disebar di Microsoft Azure Virtual Machines tanpa alamat IP publik, secara default port Azure SNAT membuat koneksi ke titik akhir di luar VM Anda. Jumlah koneksi yang diizinkan dari VM ke titik akhir Azure Cosmos DB dibatasi oleh konfigurasi Azure SNAT. Situasi ini dapat menyebabkan pembatasan koneksi, penutupan koneksi, atau Waktu permintaan habis yang disebutkan di atas.

Port Azure SNAT hanya digunakan saat VM Anda memiliki alamat IP pribadi yang tersambung ke alamat IP publik. Ada dua solusi untuk menghindari pembatasan Azure SNAT (asalkan Anda sudah menggunakan instans klien tunggal di seluruh aplikasi):

  • Tambahkan titik akhir layanan Azure Cosmos DB Anda ke subnet jaringan virtual Microsoft Azure Virtual Machines. Untuk informasi selengkapnya, lihat Titik akhir layanan Microsoft Azure Virtual Network.

    Ketika titik akhir layanan diaktifkan, permintaan tidak lagi dikirimkan dari IP publik ke Azure Cosmos DB. Sebagai gantinya, jaringan virtual dan identitas subnet dikirim. Perubahan ini dapat mengakibatkan firewall turun jika hanya IP publik yang diizinkan. Jika Anda menggunakan firewall, saat Anda mengaktifkan titik akhir layanan, tambahkan subnet ke firewall menggunakan Virtual Network ACL.

  • Tetapkan IP publik ke Azure VM Anda.

Latensi jaringan tinggi

Latensi jaringan tinggi dapat diidentifikasi menggunakan untai diagnostik di V2 SDK atau diagnostik di V3 SDK.

Jika tidak ada batas waktu yang ada dan diagnostik menunjukkan permintaan tunggal di mana latensi tinggi terbukti.

Diagnostik dapat diperoleh dari ResponseMessage, ItemResponse, FeedResponse, atau CosmosException oleh properti Diagnostics:

ItemResponse<MyItem> response = await container.CreateItemAsync<MyItem>(item);
Console.WriteLine(response.Diagnostics.ToString());

Interaksi jaringan dalam diagnostik akan menjadi, misalnya:

{
    "name": "Microsoft.Azure.Documents.ServerStoreModel Transport Request",
    "id": "0e026cca-15d3-4cf6-bb07-48be02e1e82e",
    "component": "Transport",
    "start time": "12: 58: 20: 032",
    "duration in milliseconds": 1638.5957
}

Dimana duration in milliseconds menunjukkan latensinya.

Penyebab latensi ini dapat berupa:

Masalah kueri umum

Metrik kueri akan membantu menentukan di mana kueri menghabiskan sebagian besar waktu. Dari metrik kueri, Anda dapat melihat berapa banyak yang dihabiskan untuk back-end vs klien. Pelajari selengkapnya tentang pemecahan masalah performa kueri.

  • Jika kueri back-end kembali dengan cepat dan menghabiskan banyak waktu pada klien, periksa beban komputer. Kemungkinan sumber daya tidak mencukupi dan SDK menunggu sumber daya tersedia untuk menangani respons.

  • Jika kueri back-end lambat, cobalah mengoptimalkan kueri dan melihat kebijakan pengindeksan saat ini

    Catatan

    Kami merekomendasikan pemrosesan host Windows 64-bit untuk meningkatkan performa. SQL SDK mencakup ServiceInterop.dll asli untuk memilah dan mengoptimalkan kueri secara lokal. ServiceInterop.dll hanya didukung pada platform Windows x64. Untuk Linux dan platform lain yang tidak menyediakan ServiceInterop.dll, panggilan jaringan tambahan dilakukan ke gateway untuk mendapatkan kueri optimal.

Jika Anda mengalami kesalahan berikut: Unable to load DLL 'Microsoft.Azure.Cosmos.ServiceInterop.dll' or one of its dependencies: dan menggunakan Windows, Anda harus memutakhirkan ke versi Windows terbaru.

Langkah berikutnya