JavaRush /Курстар /All lectures for KY purposes /Транзакцияларды изоляциялоо деңгээлдери

Транзакцияларды изоляциялоо деңгээлдери

All lectures for KY purposes
Деңгээл , Сабак
жеткиликтүү

2.1 Read uncommitted

Транзакцияларды изоляциялоо деңгээли деген - бул параллель жүргүзүлүп жаткан транзакциялардын мезгилинде пайда болгон маалыматтардын дал келбестигинен коргоо даражасы. Бул коргоо СУБДнин ички механизмдери аркылуу кошумча программалоосу жок эле камсыз кылынат. SQL-92 стандарты изоляциялоонун төрт деңгээлдик шкаласын аныктайт.

  • Read uncommitted
  • Read committed
  • Repeatable read
  • Serializable

Бул деңгээлдеги изоляцияны ишке ашыруунун кадимки ыкмасы - өзгөрүүлөрдү жүргүзүү учурунда маалыматтарды блоктоо. Бул бир эле учурда ошол эле маалыматтарды өзгөртүү ырааттуу аткарылып, өзгөртүүлөр жоголбой турганын билдирет. Ошондой эле, транзакциялар, алар гана окуй турган болсо, бул деңгээлде блоктоло албайт.

2.2 Read committed

Көпчүлүк өнөр жай СУБДлары, анын ичинде Microsoft SQL Server, PostgreSQL жана Oracle, аяктаган окууну демейки шартта колдонушат. Бул туура эмес окуудан коргойт, бирок башка транзакциялар ийгиликтүү аяктап, өзгөртүүлөрдү бекитиши мүмкүн. Андыктан биринчи транзакция ар түрдүү маалымат топтому менен иштейт.

Аяктаган окуу блоктоо же версиялоо аркылуу ишке ашырылышы мүмкүн.

Окуу жана өзгөртүү маалыматтарын блоктоо.

Жазуучу транзакция окуган окуу же андан жогорку деңгээлдеги транзакциялар менен өзгөртүлө турган маалыматтарды блоктоп коет. Бул маалыматтар туура эмес же толук эмес түрдө окула турган жагдайды болтурбоо үчүн, бул «бүлдүрүп окуу» деп аталат. Ошентип, жазуучу транзакция башка транзакциялар менен окулган маалыматтар чындыгында блоктон чыгарылган маалыматтар менен дал келеринен ишене алат. Андан тышкары, окуучу транзакция тарабынан блоктоло турган маалыматтар SELECT операциясы аяктагандан кийин автоматтык түрдө бошотулат. Бирок, бул эки транзакция үчүн маалыматтардын бирдей болбой калышы мүмкүн. Ошентсе да, бул маалыматтардын дал келбестигинен пайда болгон каталардын алдын алат.

Параллель өзгөртүлгөн катарлардын көптөгөн версияларын сактоо.

Ар бир катарды өзгөртүүдө СУБД ал катардын жаңы версиясын түзөт. Маалыматтарды өзгөрткөн транзакция жаңы версия менен иштейт, ал эми башка окуучу транзакциялар акыркы бекитилген версиясын алат. Бул ыкма чоң ылдамдыкты камсыз кылат, себеби блокировкалоодон качат. Бирок, ал катарлардын версияларын сактоо үчүн көбүрөөк оперативдик жады талап кылат. Көптөгөн транзакциялар бир эле учурда маалыматтарды өзгөртүүгө аракет кылганда, өзгөртүүлөрдүн дал келбестиги пайда болушу мүмкүн. Анда биринчи бекитилген транзакция өзүнүн өзгөртүүлөрүн сактап калат. Калгандары бекитиле албайт. СУБД аларды артка кайтарып, катаны «Жазуу өзгөртүлгөн» жөнөтөт.

СУБД иштеп чыгуучулары ишке ашыруу ыкмасын тандап, параметрлерди орното алышат. Маселен, MS SQL демейки шартта блокировканы колдонот, бирок 2005 жана андан жогору версияларда READ_COMMITTED_SNAPSHOT параметрин коюуга болот. Oracle версиялык схеманы колдонот. Informix 11.1 версиясында USELASTCOMMITTED параметри аркылуу окуучу жана жазуучу транзакциялардын чыр-чатактарын болтурбоого болот, окуучу транзакция акыркы бекитилген маалыматтарды алат.

2.3 Repeatable read

«Кайра-кайра окула турган» деңгээл - бул окуучу транзакция мурда окуган маалыматтардын өзгөртүлгөнүн «көрбөйт» деңгээли. Бул учурда, эч бир башка транзакция, учурдагы транзакция аяктаганча, окуп жаткан маалыматтарды бузбайт. Демек, маалыматтар уруксатсыз өзгөрүүлөрдөн жана бузулуудан ишенимдүү корголот.

Транзакциянын буйруктары аткарылганда алынган бардык маалыматтар үчүн блокировкалар колдонулат. Бул башка транзакциялар бул маалыматтарды өзгөртүүгө тыюу салат, транзакция бүткүчө. Бирок башка транзакциялар учурдагы транзакцияда көрсөтүлгөн шарттар боюнча жаңы маалыматтарды кошо алышат. Буйрукту кайра аткарууда жаңы маалыматтарды алуу мүмкүн, бул фантомдук окууга алып келиши мүмкүн.

Блокировкалар транзакция бүткүчө кармалат, ар бир кадамдан кийин эмес. Бул READ COMMITTED изоляция деңгээлине караганда азыраак параллелдүүлүгүн билдирет. Бул деңгээлдерин жана андан жогорку деңгээлдерин зарылчылык жок учурда колдонбоо жакшы.

2.4 Serializable

Эң жогорку изоляция деңгээли. Транзакциялар бири-биринен толугу менен изоляцияланган. Ар бир транзакция, параллелдүү транзакциялар жок сыяктуу, аткарылат. Параллелдүү транзакциялар фантомдук окуу эффектине кабылган жок.

2.5 Реалдуу СУБДларда изоляция деңгээлдерин колдоо

СУБДлар ар дайым төрт деңгээлди колдобойт жана кошумча функциялары болушу мүмкүн. Кээ бирлери ар кандай изоляция камсыздоолоруна ээ болушу мүмкүн.

Oracle анча-мынча транзакциялык изоляция деңгээлин колдобойт, анткени бул ишке ашыруу «бүлдүрүп окууну» жокко чыгарат. Формалдуу түрдө Repeatable read деңгээли колдоого алынбайт. Read committed (демейки шартта) жана Serializable деңгээлдери гана колдоого алынат.

Oracle жеке буйруктар үчүн окуунун кайталануучулугун камсыз кылат. Мисалы, эгерде биринчи транзакция базадан катарлардын топтомун тандаса, ал эми параллелдүү экинчи транзакция ошол катарларды өзгөртсө, биринчи транзакция алган натыйжалуучу топтом өзгөрүүсүз катарларды камтыйт. Мындан тышкары, Oracle READ-ONLY транзакцияларды колдойт, алар Serializableке дал келет, бирок маалыматтарды өзгөртө албайт.

Microsoft SQL Server төрт транзакция изоляция деңгээлин колдойт. Андан кийин дагы бир деңгээл - SNAPSHOT келет. Ал транзакцияга анын башталганга чейин маалыматтардын абалын көрүүгө жол берет. Serializableден айырмасы, эгерде башка транзакция буга чейин ошол эле маалыматтарга өзгөртүүлөр киргизсе, транзакция ката кетириши мүмкүн. Анда COMMIT аткарылбайт.

Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION