Bosh sahifa Wiki Wait-for graph

Wait-for graph

Wait-for graph — jarayonlar yoki tranzaksiyalar o‘rtasidagi kutish bog‘lanishlarini yo‘nalgan graf sifatida ifodalovchi modeldir. Har tugun bajaruvchi subyektni, A → B qirrasi esa A hozir B ushlab turgan resursni kutayotganini bildiradi. Grafdagi sikl deadlock mavjudligini yoki model shartlariga qarab ehtimolini ko‘rsatadi.

Resurs grafidan hosil qilish

Resource-allocation graphda jarayon va resurs alohida tugunlar bo‘ladi. Bir nusxali resurslarda A resursni kutsa, resurs Bga ajratilgan bo‘lsa, wait-for graphda bevosita A → B qirrasi yaratiladi. Bu soddalashtirish deadlock aniqlash uchun resurs tugunlarini olib tashlaydi.

Ma’lumotlar bazasida tranzaksiya qator, sahifa, jadval yoki metadata qulfini kutishi mumkin. Lock manager kim qaysi qulfni ushlagani va qaysi so‘rov mos kelmayotganini biladi. Bir so‘rov bir nechta egadan birining bo‘shashini kutsa, qirralar lock compatibility qoidasi asosida quriladi.

Siklni aniqlash

Depth-first search, strongly connected components yoki topologik tekshiruv siklni topishi mumkin. Graf har kutish o‘zgarishida incremental yangilanishi yoki davriy snapshotdan tahlil qilinishi mumkin. Juda tez tekshiruv boshqaruv xarajatini oshiradi, sekin tekshiruv esa tranzaksiyalarni uzoq bloklangan holda qoldiradi.

Bir nusxali resurs va doimiy kutish modelida sikl deadlock uchun yetarli. Bir nechta resurs nusxasi, OR-kutish yoki timeout mavjud bo‘lsa, oddiy sikl talqini ehtiyotkorlik talab qiladi. Distributed tizimda lokal graf siklning faqat bir qismini ko‘rishi mumkin.

Jabrlanuvchini tanlash

Deadlock topilganda tizim bir tranzaksiyani victim qilib bekor qiladi va uning qulflarini bo‘shatadi. Tanlov bajarilgan ish, rollback narxi, yosh, ustuvorlik va necha marta victim bo‘lganiga qarashi mumkin. Har doim eng yangi tranzaksiyani bekor qilish oddiy, ammo ayrim ishning starvationiga olib kelishi mumkin.

Ilova deadlock xatosini qayta urinish mumkin bo‘lgan holat sifatida boshqaradi. Tranzaksiya boshidan takrorlanadi, chunki qisman natijani davom ettirish xavfsiz emas. Tasodifiy backoff bir xil raqiblarning darhol yana to‘qnashishini kamaytiradi.

Taqsimlangan aniqlash

Turli tugunlarda kutish qirralarini yig‘ish xabar kechikishi sabab phantom deadlock ko‘rsatishi mumkin: markaz siklni ko‘rgan paytda qirralardan biri allaqachon yo‘qolgan bo‘ladi. Edge-chasing algoritmi kutish zanjiri bo‘ylab probe yuboradi. Avlod yoki vaqt belgilari eskirgan ma’lumotni ajratishga yordam beradi.

Deadlockni topish uning ildiz sababini yo‘q qilmaydi. Qulf olish tartibini birxillashtirish, tranzaksiyani qisqartirish, mos indeks bilan skan qamrovini kamaytirish va foydalanuvchi kutishini tranzaksiya tashqarisiga chiqarish takrorlanishni kamaytiradi. Graf diagnostika hisobotida SQL, resurs va egalik zanjiri bilan beriladi.

Vizual tahlil

Katta grafda har qirraga kutish boshlangan vaqt, resurs turi va so‘rov identifikatori biriktiriladi. Uzoq zanjir siklsiz bo‘lsa ham convoy effect sabab kechikish yaratishi mumkin: boshidagi sekin tranzaksiya ko‘plab ishni ushlab qoladi. Graf snapshoti bilan birga blocker SQL, query plan va tranzaksiya ochilgan joy ko‘rsatiladi. Faqat victim so‘rovni ayblash noto‘g‘ri; u siklga oxirgi bo‘lib qo‘shilgan, ammo asl dizayn muammosi boshqa qatnashchida bo‘lishi mumkin. Maxfiy parametrlar diagnostika hisobotida maskalanadi, identifikatorlar esa hodisa timeline bilan bog‘lanadi.

Graf saqlanadigan vaqt cheklangan bo‘lsa ham agregat ko‘rsatkichlar qaysi jadval va kod yo‘li ko‘p sikl yaratishini ko‘rsatadi. Bir martalik deadlock normal retry bilan yashirilishi mumkin, lekin takroriy chastota arxitektura qarorini qayta ko‘rishni talab qiladi. Har victim hodisasi markaziy metrikada sanaladi.

Bog‘liq tushunchalar

Deadlock, Lock manager, Resource-allocation graph, Transaction, Cycle detection, Victim selection