პარალელური ტრანზაქციების შესრულებისას რა ანომალიები შეიძლება წარმოიშვას?
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)შედეგი: ვრცელი შეკითხვის დროს გამოჩნდება "ფანტომური" სტრიქონები, რომლებიც პირველ კითხვაზე არ იყო.
ამ ანომალიებს თავიდან აცილება შესაძლებელია ტრანზაქციების სხვადასხვა იზოლაციის დონეების გამოყენებით.