"Dirty Read", "Non-Repeatable read", "Phantom Read" və "Transaction Isolation Levels" nədir?

Bu məqalədə hər bir proqramçının mütləq şəkildə bilməli olduğu mövzulardan olan "Transaksiyanın İzolyasiya Səviyyələri" (Transaction Isolation Levels) ilə tanış olacağıq. Mövzunun əhəmiyyətini daha dəqiq başa düşmək üçün, "Isolation Level"-dan düzgün istifadə etmədikdə yarana biləcək halları nəzərdən keçirək.

  • Transaksiyalarda Deadlock-ların əmələ gəlməsi
  • Yalnış məlumatların oxunması
  • CRUD (Create, Read, Update, Delete) əməliyyatlarında gecikmələrin olması

Demek olar ki proqram təminatında istənməyəcək halların yaşanmasının əsas səbəblərindən biri (Verilənlər bazası ilə əlaqəl) "Isolation Level"-ın düzgün seçilməməsidir. İlk öncə məlumat bazaları ilə işləyən zaman hansı növ anomaliyalar (qeyri-normallıq) ilə qarşılaşdığımızı incəliyək. 
          Qeyd olunacaq anomaliyalar transaksiyaların paralel şəkildə işləməsi  
zamanı baş verir.




Dirty Read (Çirkli oxuma) – Bu anomaliya bir transaksiyanın "Commit" etmədiyi  dəyişikliyi digər transaksiyanın oxuması halında baş verir. T1 transaksiyası hər hansı bir məlumatı redaktə edir və T2 transaksiyası bu edilən dəyişikliyi oxuyur və ona uyğun bir əməliyyat edir. Daha sonra T1 transaksiyası hansısa bir səbəbdən etdiyi dəyişiklikləri "Rolls back" (Geri qaytarır) edir. Bu zaman T2 transaksiyası əslində var olmayan bir məlumatı oxumuş olduki bunada "Dirty Read" deyilir.


Non-Repeatable read (Təkrarlanmayan oxuma / Update zamanı baş verir) – Bu anomaliya bir transaksiya eyni sətri iki dəfə (və ya daha çox) oxuduğu zaman fərqli dəyərlər alması halında baş verir. Fərz edək ki, T1 transaksiyası bir sətri oxudu. Daha sonra T2 transaksiyası bu sətrin dəyərlərini dəyişdi və "Commit" etdi.Daha sonra T1 transaksiyası bu sətri yenidən müraciət edir və dəyərin dəyişdiyini görür. 
Phantom Read (Insert,Delete zamanı baş verir) – Bu anomaliya bir transaksiya daxilində eyni sorğunu təkrar icra etdikdə ilkindən fərqli sayda məlumatın olması halında baş verir. Fərz edək ki, T1 transaksiyası bəzi axtarış meyarlarına cavab verən sətirlər əldə edir. Daha sonra T2 transaksiyası T1 transaksiyası üçün axtarış meyarlarına uyğun gələn bəzi yeni sətrlər yaradır. T1 transaksiyası sətirləri oxuyan sorğunu yenidən icra edərsə, bu dəfə fərqli sətirlər alır.
Yuxarıda qeyd olunan anomaliyaların qarşısını almaq üçün "Transaction Isolation Level"-dan istifadə olunur. "Transaction Isolation Level"-ları fərqləndirən cəhətləri onların hansı sayda anomaliyanın qarşısını alması ilə bağlıdır. Beləki bir səviyyədə "Dirty Read" olmamasına baxmayaraq "Non-Repeatable read" və "Phantom Read" halı yaşana bilər.İndi isə hansı "Transaction Isolation Level"-ların olduğunu nəzərdən keçirək.

Read uncommitted - Adında da göründüyü kimi bir transaksiya başqa transaksiyaların "Commit" olunmamış dəyişikliyini oxuya bilir.

Read committed - Bu "Isolation Level"-da transaksiya başqa transaksiyaların yalnız "Commit" olunmuş dəyişikliyini oxuya bilir. "Dirty Read" -in qarışısı alınsada "Non-Repeatable read" və "Phantom Read" halı yaşana bilər.

Repeatable read - Transaksiya sətri oxuyan zaman başqa transaksiyaların bu sətiri redaktə etməsinə icazə vermir (transaksiya tamamlanana kimi). "Dirty Read" -in və "Non-Repeatable read" qarışısını alır ancaq "Phantom Read" halı yaşana bilər.

Serializable serialization - Bütün transaksiyalar ardıcıl şəkildə icra olunduğundan "Dirty Read", "Non-Repeatable read", "Phantom Read" halları yaşanmır. Mənfi cəhəti isə verilənlər bazasının sürətini aşağı salır və sorğular gec icra olunur.
    DEFAULT - Verilənlər bazasının idarə sistemləri tərəfindən susmaya görə (default) istifadə olunan "Transaction Isolation Level"-dır.  ORACLE (read has been submitted), MySQL (repeatable read), SQL Server (read committed), PostgreSQL(read committed)




    Yorum Gönder

    Daha yeni Daha eski