Saya menjalankan database Azure SQL di bawah edisi S2 (50 DTU). Penggunaan normal server biasanya hang sekitar 10% DTU. Namun, server ini secara teratur masuk ke dalam kondisi di mana ia akan mengirim penggunaan database DTU ke 85-90% selama berjam-jam. Kemudian tiba-tiba kembali ke penggunaan normal 10%.
Permintaan terhadap server dari aplikasi sepertinya masih beroperasi dengan cepat selama keadaan kelebihan ini.
Saya dapat mengatur skala server dari S2 => apa saja (S3 misalnya) => S2 dan tampaknya menghapus status apa pun yang digunakan. Tetapi kemudian beberapa jam kemudian ia akan mengulangi siklus keadaan kelebihan beban yang sama. Hal aneh lain yang saya perhatikan adalah bahwa jika saya menjalankan server ini pada paket S3 (100 DTU) 24/7 saya belum mengamati perilaku ini. Tampaknya hanya terjadi ketika saya downscaled database ke paket S2 (50 DTU). Pada paket S3 saya selalu duduk di 5-10% penggunaan DTU. Jelas kurang dimanfaatkan.
Saya sudah memeriksa laporan kueri Azure SQL mencari kueri nakal, tapi saya tidak benar-benar melihat sesuatu yang tidak biasa dan itu menunjukkan kueri saya menggunakan sumber daya seperti yang saya harapkan.
Seperti yang bisa kita lihat di sini, penggunaannya semua berasal dari Data IO. Jika saya mengubah laporan kinerja di sini untuk menampilkan kueri IO Data atas dengan MAX, kami melihat ini:
Melihat quires yang berjalan lama ini sepertinya menunjuk ke pembaruan statistik. Tidak benar-benar sesuatu berjalan dari aplikasi saya. Misalnya, kueri 16302 di sana menunjukkan:
SELECT StatMan([SC0], [SC1], [SC2], [SB0000]) FROM (SELECT TOP 100 PERCENT [SC0], [SC1], [SC2], step_direction([SC0]) over (order by NULL) AS [SB0000] FROM (SELECT [UserId] AS [SC0], [OrganizationId] AS [SC1], [Id] AS [SC2] FROM [dbo].[Cipher] TABLESAMPLE SYSTEM (1.250395e+000 PERCENT) WITH (READUNCOMMITTED) ) AS _MS_UPDSTATS_TBL_HELPER ORDER BY [SC0], [SC1], [SC2], [SB0000] ) AS _MS_UPDSTATS_TBL OPTION (MAXDOP 16)
Tetapi sekali lagi, laporan itu juga menunjukkan bahwa kueri ini hanya menggunakan sebagian kecil dari penggunaan Data IO di server (<4%). Saya juga menjalankan pembaruan statistik (dan indeks pembangunan kembali) di seluruh database setiap minggu sebagai bagian dari pemeliharaan rutinnya.
Berikut ini adalah laporan lain yang menunjukkan MAX IO data data untuk rentang waktu yang mencakup beberapa jam hanya selama insiden penggunaan sumber daya tinggi.
Seperti yang bisa kita lihat, sebenarnya tidak ada pertanyaan yang melaporkan penggunaan IO data yang signifikan.
Saya juga berlari sp_who2
dan sp_whoisacive
pada database dan tidak benar-benar melihat sesuatu melompat ke arah saya (meskipun saya akui saya bukan ahli dengan alat ini).
Bagaimana cara mengetahui apa yang terjadi di sini? Saya tidak berpikir salah satu permintaan aplikasi saya yang harus disalahkan untuk penggunaan sumber daya ini dan saya merasa bahwa ada beberapa proses internal yang berjalan di latar belakang pada server yang membunuhnya.
sumber
Jawaban:
Mengingat bahwa selama spike (s) aktivitas log Anda minimal, kami dapat menganggap tidak ada (atau banyak) DUI yang terjadi.
Anda menyebutkan pada satu titik bahwa lonjakan tidak mempengaruhi kinerja, dan di titik lain itu tidak. Yang mana itu?
Anda juga menyebutkan bahwa ini hilang setelah operasi skala. Ini masuk akal karena analog dengan restart di tempat yang secara efektif akan membunuh semua proses dll.
Apakah saya berasumsi benar dalam menebak bahwa database ini sedang diakses dari tingkat aplikasi? Jika demikian, saya menduga koneksi Anda tidak ditutup dengan benar . Pengumpul sampah seharusnya mengurus ini pada akhirnya (yang seharusnya tidak diandalkan), tetapi saya telah melihat situasi yang tepat ini terjadi karena koneksi tidak tertutup dari app-tier. Dalam kasus kami, aplikasi sangat sibuk sehingga kami akhirnya menerima kesalahan koneksi bersamaan yang menyebabkan kami mengalami masalah.
Coba kueri berikut selama spike:
Jika saya benar, Anda akan menemukan sejumlah besar catatan yang dikembalikan dengan status
Sleeping
, atau lebih burukRunning
. Jika itu masalahnya Anda memiliki masalah yang lebih besar di app-tier.Kami dapat lebih lanjut men-debug ini dengan menyalin basis data, menggunakan kueri berikut (menggunakan tingkat dasar untuk menghindari biaya berlebihan), dan memantau perilaku ini.
sumber
using
pernyataan. Info yang saya posting di pertanyaan awal tampaknya menunjukkan bahwa data IO bertanggung jawab atas lonjakan.