Кадом транзаксияҳои параллелӣ иҷро мешаванд, кадом аномалияҳо метавонанд рух диҳанд?
sobes.tech AI
Ҷавоб аз AI
პარალელური ტრანზაქციების შესრულებისას შეიძლება წარმოიშვას შემდეგი ანომალიები:
-
დაკარგული განახლება (Lost Update): ერთი ტრანზაქცია გადაწერს სხვა ტრანზაქციის ცვლილებებს მანამდე, სანამ ეს ცვლილებები დამტკიცებული იქნება.
დრო ტრანზაქცია 1 ტრანზაქცია 2 t1 კითხულობს ბალანსის მნიშვნელობას (მაგ., 100) t2 კითხულობს ბალანსის მნიშვნელობას (მაგ., 100) t3 ზრდის ბალანსს 10-ით (ბალანსი = 110) t4 ზრდის ბალანსს 20-ით (ბალანსი = 120) t5 დადასტურებს ცვლილებებს (ბალანსი ხდება 110) t6 დადასტურებს ცვლილებებს (ბალანსი ხდება 120) შედეგი: მიუხედავად ორი ზრდისა, საბოლოო ბალანსი არის 120, არა 130. ზრდა ტრანზაქცია 1-დან დაკარგულია.
-
დამაბნეველი კითხვა (Dirty Read): ერთი ტრანზაქცია კითხულობს დაუდასტურებულ ცვლილებებს სხვა ტრანზაქციისგან. თუ ცვლილებები უკან დაიხევა, წაკითხული მონაცემები იქნება არასწორი.
დრო ტრანზაქცია 1 ტრანზაქცია 2 t1 იწყებს ბალანსის ცვლილებას (100 -> 110) t2 კითხულობს ბალანსს (მიღებს 110) t3 უკან იხევს ცვლილებას (ბალანსი დაბრუნდება 100) t4 იყენებს ბალანსს = 110 გამოთვლებში, მიუხედავად იმისა, რომ რეალური მნიშვნელობა 100ა შედეგი: ტრანზაქცია 2 ეფუძნება მონაცემებს, რომლებიც საბოლოოდ არ დამტკიცებულა.
-
ნეიტრალური კითხვა (Non-Repeatable Read): ერთ ტრანზაქციაში ერთსა და იმავე სტრიქონის განმეორებითი კითხვა იძლევა სხვადასხვა მნიშვნელობას, რადგან სხვა ტრანზაქცია შეცვლის ამ სტრიქონს შორის კითხვებს.
დრო ტრანზაქცია 1 ტრანზაქცია 2 t1 კითხულობს ბალანსს (მიღებს 100) t2 შეცვლის ბალანსს 110-ზე და დადასტურებს t3 ისევ კითხულობს ბალანსს (მიღებს 110 ნაცვლად 100-ის) შედეგი: ბალანსი შეიცვალა ერთ ტრანზაქციაში, რაც შეიძლება გამოიწვიოს არასწორი შედეგები.
-
ფანტომური კითხვა (Phantom Read): მსგავსი ნეიტრალური კითხვაა, მაგრამ ეხება არა არსებული სტრიქონების ცვლილებას, არამედ სტრიქონების დამატებას ან წაშლას, რომლებიც გავლენას ახდენენ შეკითხვის შედეგებზე.
დრო ტრანზაქცია 1 ტრანზაქცია 2 t1 ახორციელებს შეკითხვას SELECT COUNT(*) FROM Orders WHERE Status = 'Pending'(მიღებს 5)t2 დამატებს ახალ შეკვეთას სტატუსით 'Pending' და დადასტურებს t3 ისევ ახორციელებს SELECT COUNT(*) FROM Orders WHERE Status = 'Pending'(მიღებს 6)შედეგი: განმეორებითი შეკითხვის დროს გამოჩნდება "ფანტომური" სტრიქონები, რომლებიც პირველად კითხვაზე არ იყო.
ამ ანომალიებს თავიდან აცილება შესაძლებელია ტრანზაქციების სხვადასხვა იზოლაციის დონეების გამოყენებით.