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 эмес. Бир транзакциянын көбөйтүүсү жоголгон.

  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 алат)

    Жыйынтык: Суроо кайра иштетилгенде, "фантомдук" саптар пайда болот, алгачкы окууда болбогон.

Бул аномалияларды алдын алуу үчүн, транзакциялардын ар кандай изоляция деңгээлдери колдонулат.