Bosh sahifa Wiki Lock timeout

Lock timeout

Lock timeouttransaction boshqa transaction ushlab turgan nomuvofiq lock bo‘shashini kutishi mumkin bo‘lgan eng uzoq vaqt. Belgilangan muddat tugasa database kutayotgan amalni xato bilan to‘xtatadi; bu mexanizm cheksiz kutishni cheklaydi, ammo lock contention sababini o‘zi bartaraf etmaydi.

Kutish jarayoni

Update, delete yoki ayrim select rejimlari kerakli row, page, table yoxud metadata lockini darhol ololmasligi mumkin. Database odatda so‘rovni wait queuega qo‘yadi. Lock egasi commit yoki rollback qilganda navbatdagi mos waiter davom etadi. Timeout sanog‘i ko‘pincha lock kutish boshlanganidan yuradi, lekin aniq semantika database mahsulotiga bog‘liq.

Lock timeout statement timeoutdan farq qiladi. Statement timeout queryning umumiy ishlash vaqtini, lock timeout esa aynan lock olish kutishini cheklaydi. Deadlock detection esa tsikl hosil qilgan transactionlardan birini timeoutni kutmasdan victim sifatida bekor qilishi mumkin.

Sozlash darajalari

Tizimlar timeoutni server, database, session yoki bitta transaction darajasida berishi mumkin. Interaktiv API uchun qisqa muddat tez javob qaytaradi; uzoq batch ishida esa kattaroq qiymat ma’qul bo‘lishi mumkin. Nol qiymat ayrim platformalarda “kutmaslik”, boshqasida “cheksiz kutish” ma’nosini beradi, shuning uchun hujjat tekshiriladi.

Timeout xatosidan keyingi transaction holati ham bir xil emas. Ba’zi tizimlar faqat statementni bekor qiladi, boshqalari transactionni failed holatga o‘tkazib, rollback talab qiladi. Application xato kodini tekshirishi va connectionni transaction holati aniqlanmasdan poolga qaytarmasligi kerak.

Qayta urinish

Retry faqat amal idempotent bo‘lsa yoki takrorlanishdan himoyalangan bo‘lsa xavfsiz. Transaction rollback qilinadi, qisqa tasodifiy backoff qo‘llanadi va butun biznes amali cheklangan marta qayta bajariladi. Faqat muvaffaqiyatsiz SQL statementni eski transaction ichida qaytarish noto‘g‘ri snapshot yoki ushlab qolingan locklar sabab yana muammo berishi mumkin.

Tashxis

Monitoringda waiter, blocker, lock turi, obyekt, kutish davomiyligi va SQL fingerprint bog‘lanadi. Uzoq transaction, foydalanuvchi javobini transaction ichida kutish, index yetishmasligi yoki turli kod yo‘llarida obyektlarni qarama-qarshi tartibda locklash keng tarqalgan sabablardir.

Muammoni kamaytirish uchun transaction qisqartiriladi, kerakli index qo‘shiladi, bir xil lock tartibi belgilanadi va katta update qismlarga ajratiladi. Timeoutni shunchaki oshirish xato sonini kamaytirishi mumkin, biroq navbat, latency va resurs sarfini kattalashtiradi.

Misol ssenariy

Ikki checkout transaction bir xil inventory satrini update qiladi. Birinchisi tashqi payment javobini transaction ochiq holda kutsa, ikkinchisi row lockda qoladi va qisqa timeoutdan keyin xato oladi. To‘g‘ri yechim payment chaqirig‘ini lock ushlab turiladigan qismdan ajratish, inventory o‘zgarishini qisqa atomar statementda bajarish va biznes operation ID bilan takroriy requestni tanishdir.

Timeout qiymati service deadline bilan ham uyg‘unlashadi. Database 30 soniya kutayotgan paytda HTTP gateway 5 soniyada connectionni uzsa, query client javobsiz qolganidan keyin ham resurs sarflashi mumkin. Database timeout gateway deadline’dan qisqaroq qo‘yiladi va cancellation servergacha yetkaziladi. Load test contention kuchayganda throughput, wait queue va abort ulushining qanday o‘zgarishini ko‘rsatadi.

Lock timeout alerti transaction nomi va code version bilan bog‘lansa yangi release sabab bo‘lgan regression tez topiladi. Sensitive bind qiymatlari logga yozilmaydi, ammo table va query fingerprint diagnostika uchun saqlanadi.

Bog‘liq tushunchalar

Database lock, Lock contention, Deadlock, Statement timeout, Transaction, Retry, Pessimistic locking