Sobes.tech
Middle+

პარალელური ტრანზაქციების შესრულებისას რა ანომალიები შეიძლება წარმოიშვას?

sobes.tech AI

პასუხი AI-სგან

პარალელური ტრანზაქციების შესრულებისას შეიძლება წარმოიშვას შემდეგი ანომალიები:

  1. დაკარგული განახლება (Lost Update): ერთი ტრანზაქცია გადაწერს სხვა ტრანზაქციის ცვლილებებს მანამდე, სანამ ეს ცვლილებები დამტკიცებული იქნება.

    დრო ტრანზაქცია 1 ტრანზაქცია 2
    t1 კითხულობს ბალანსის მნიშვნელობას (მაგ., 100)
    t2 კითხულობს ბალანსის მნიშვნელობას (მაგ., 100)
    t3 ზრდის ბალანსს 10-ით (ბალანსი = 110)
    t4 ზრდის ბალანსს 20-ით (ბალანსი = 120)
    t5 დადასტურებს ცვლილებებს (ბალანსი ხდება 110)
    t6 დადასტურებს ცვლილებებს (ბალანსი ხდება 120)

    შედეგი: მიუხედავად ორი ზრდისა, საბოლოო ბალანსი არის 120, არა 130. ზრდა ტრანზაქცია 1-დან დაკარგულია.

  2. დამაბნეველი კითხვა (Dirty Read): ერთი ტრანზაქცია კითხულობს დაუდასტურებულ ცვლილებებს სხვა ტრანზაქციისგან. თუ ცვლილებები უკან დაიხევა, წაკითხული მონაცემები იქნება არასწორი.

    დრო ტრანზაქცია 1 ტრანზაქცია 2
    t1 სიწყნარე ცვლილება ბალანსზე (100 -> 110)
    t2 კითხულობს ბალანსს (მიღებს 110)
    t3 ცვლილების უკან დაბრუნება (ბალანსი 100)
    t4 ბალანსი 110-ს იყენებს გამოთვლებში, მიუხედავად იმისა, რომ რეალური მნიშვნელობა 100ა

    შედეგი: ტრანზაქცია 2 ეფუძნება მონაცემებს, რომლებიც საბოლოოდ არ დამტკიცებულა.

  3. ნეიტრალური კითხვა (Non-Repeatable Read): ერთ ტრანზაქციაში ერთსა და იმავე სტრიქონის განმეორებითი კითხვა იძლევა სხვადასხვა მნიშვნელობას, რადგან სხვა ტრანზაქცია შეცვლის ამ სტრიქონს შორის კითხვებს.

    დრო ტრანზაქცია 1 ტრანზაქცია 2
    t1 კითხულობს ბალანსს (მიღებს 100)
    t2 შეცვლის ბალანსს 110-ზე და დადასტურებს
    t3 ისევ კითხულობს ბალანსს (მიღებს 110, არა 100)

    შედეგი: ბალანსი შეიცვალა ერთ ტრანზაქციაში, რაც შეიძლება გამოიწვიოს არასწორი შედეგები.

  4. ფანტომური კითხვა (Phantom Read): მსგავსი ნეიტრალური კითხვაა, მაგრამ ეხება არა არსებული სტრიქონების ცვლილებას, არამედ დამატებას ან წაშლას, რომლებიც გავლენას ახდენენ შეკითხვის შედეგებზე.

    დრო ტრანზაქცია 1 ტრანზაქცია 2
    t1 ახორციელებს შეკითხვას SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' (მატნიშნում 5)
    t2 დამატებს ახალ შეკვეთას სტატუსით 'Pending' და დადასტურებს
    t3 ისევ ახორციელებს SELECT COUNT(*) FROM Orders WHERE Status = 'Pending' (მატნიშნում 6)

    შედეგი: ვრცელი შეკითხვის დროს გამოჩნდება "ფანტომური" სტრიქონები, რომლებიც პირველ კითხვაზე არ იყო.

ამ ანომალიებს თავიდან აცილება შესაძლებელია ტრანზაქციების სხვადასხვა იზოლაციის დონეების გამოყენებით.