SQL-də DB kilidləri

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

1. SQL kontekstində verilənlər bazası kilidi nədir?

İki iclas və ya verilənlər bazası istifadəçiləri cədvəldə eyni məlumatları yeniləməyə və ya silməyə çalışdıqda, eyni vaxtda yeniləmə problemi yaranacaqdır. Bu problemin qarşısını almaq üçün verilənlər bazası ilk istifadəçi üçün məlumatları kilidləyir və məlumatları yeniləməsinə / silməsinə imkan verir. Yeniləmə / silmə işi bitdikdən sonra məlumatların kilidini açacaq əməliyyatı KOMİTASİYA edir və ya ROLLBACK edir. Verilərin kilidi sərbəst buraxıldıqda, başqa bir istifadəçi dəyişiklikləri üçün kilidləyə bilər.

Bu səbəbdən SQL kontekstində kilidləmə, istifadəçinin yeniləyəcəyi sətri və ya müəyyən bir sütunu tutmaq və başqa bir iclasa və ya istifadəçiyə məlumat daxil etməsinə / yeniləməsinə / silməsinə icazə verməməkdir. Məlumat kilidi çıxana qədər heç kimin məlumatdan istifadə etməsinə icazə verməyəcəkdir. Əməliyyat edildikdə və ya geri çəkildikdə məlumatların kilidi buraxılacaq.

2. Başqa bir sessiya kilidli məlumatları yeniləməyə çalışarkən nə baş verir?

Tutaq ki, iki mağaza gözətçisi X maddəsinin miqdarını aşağıda göstərildiyi kimi eyni zamanda yeniləyir. İlk istifadəçi məlumatları yeniləməyə çalışdıqda əməliyyatı başa çatdırması üçün məlumatları kilidləyir. Bu səbəbdən ikinci mağaza gözətçilərinin məlumatların kilidlənməsi tələbi gözləmə vəziyyətinə keçəcəkdir. İlk istifadəçi buraxana qədər məlumatların kilidlənməsini gözləyəcək. İlk istifadəçi kilidi buraxdıqdan sonra dərhal kilidi alır və məlumatlarını yeniləyir. İkinci istifadəçinin əməliyyatı tamamlandıqdan sonra əməliyyatını həyata keçirərək kilidi buraxır.

3. Fərqli verilənlər bazası kilidləmə üsulları hansılardır?

Database kilid müxtəlif səviyyələrdə yerləşdirilə bilər - tək satırda və ya çox satırda və ya xüsusi sütunda və ya bütün masada. Bu verilənlər bazası fərqli bir səviyyədə kilidlənir, kilidləmə zerafeti olaraq bilinir. Onları aşağıda tək -tək müzakirə edək:

  • Verilənlər bazası səviyyəsinin kilidlənməsi: Bu metodda bütün verilənlər bazası yenilənmə üçün kilidlənir. Burada hər hansı bir yeniləmə üçün yalnız bir istifadəçi və ya sessiya aktiv olacaq və digər istifadəçilər məlumatları yeniləyə bilməzlər. Bu metod bütün verilənlər bazasını kilidlədiyindən geniş istifadə olunmur. Bununla birlikdə, Oracle-da müstəsna kilid verilənlər bazası kilidi ilə eynidir və başqalarının bütün verilənlər bazasından istifadə etməsinə icazə vermir. Proqramın yeni versiyasına yüksəltmə və s. Kimi bir dəstək yeniləməsi həyata keçirildikdə faydalı olacaqdır.
  • Fayl Səviyyə Kilidi: Burada bütün verilənlər bazası faylı kilidlənəcək. Verilənlər bazası faylı dedikdə, bütün cədvəli, cədvəlin bir hissəsini və ya çoxlu hissəsini daxil edə bilər masaları. Fayl kilidi fərqli cədvəllərdən tam və ya qismən məlumatları ehtiva edə bildiyindən, bu tip kilid daha az yayılmışdır.
  • Cədvəl səviyyəsində kilidləmə: Bu üsulda bütün masa kilidlənəcək. Cədvəlin bütün sətirlərini yeniləməyimiz lazım olduqda bu faydalı olacaq. Dəyişikliklərin bütün cədvələ təsir etdiyi cədvəlin bəzi sütunlarını əlavə etdikdə/ sildikdə də faydalı olacaq. Buna görə də Oracle -da bu tip kilid kimi də tanınır DDL bağlamaq.
  • Səhifə və ya Blok Səviyyə Kilidi: Bu metodda verilənlər bazası sənədinin səhifəsi və ya bloku yenilənmə üçün kilidlənəcəkdir. Bir səhifə və ya blok cədvəlin tam və ya qismən məlumatlarını ehtiva edə bilər. Bu səhifə və ya blok məlumatların yerləşdiyi yaddaş yerindəki boşluğu əks etdirir. Bura bütün cədvəl məlumatları və ya qismən məlumatlar daxil ola bilər. Bu səbəbdən bu tip kilidləmə daha az olur.
  • Sıra Səviyyə Kilidi: Bu metodda cədvəlin bütün satırı yenilənmə üçün kilidlənir. Ən çox yayılmış kilidləmə mexanizmidir.
  • Sütun Səviyyə Kilidi: Bu metodda bir cədvəl satırının bəzi sütunları yenilənmə üçün kilidlənir. Bu tip kilidlər kilidləri idarə etmək və buraxmaq üçün çox sayda qaynaq tələb edir. Buna görə çox az istifadə olunan kilidləmə növüdür.

4. Kilidlər verilənlər bazası tərəfindən avtomatik istifadə olunur?

Bir istifadəçi UPDATE və ya DELETE əmrini verdikdə, verilənlər bazası dolayı olaraq məlumatın kilidini yerləşdirəcəkdir. İstifadəçinin məlumatlara açıq şəkildə kilid yazmasını tələb etmir. Veritabanı UPDATE və ya DELETE ifadələrini gördükdə, avtomatik olaraq kilid verilər üzərinə yerləşdirilir.

5. Kilid olduğu yerdə məlumatlar oxuna bilərmi?

Kilidli olduqda məlumatların oxunması istifadə edilən kilidləmə mexanizmindən asılıdır. Kilid xüsusi oxunursa, kilidli məlumatların oxunmasına imkan verməyəcəkdir

6. Verilənlər bazasının kilidlənməsinin mənası nədir?

Paralel yeniləmə probleminin qarşısını almaq üçün güncəlləyərkən məlumatları verilənlər bazasında kilidləyirik. Paralel Yeniləmə problemi, verilənlər bazasının bir çox seansının eyni məlumatları eyni vaxtda yeniləməyə çalışdığı problemdir. Bir istifadəçi DB-yə qoşulduqda DB sessiyası yaradılır. Eyni istifadəçi bir neçə dəfə DB-yə qoşula bilər və bu istifadəçi üçün birdən çox DB sessiyası yaradılacaqdır. Eyni DB-yə qoşulan fərqli bir istifadəçi olmamalıdır. Fərqli iclasda istifadəçi eyni məlumatları eyni zamanda yeniləməyə çalışır. Bu səbəbdən yenilənmə zamanı bəzi məlumat problemi olacaq. Buna verilənlər bazasının paralel yeniləmə problemi deyilir.

7. Kilid mübahisəsi nədir?

Kilid mübahisəsi, məlumatların kilidinin COMMIT və ya ROLLBACK verildiyi qədər sərbəst buraxılmayacağı bir müddətdir. Yavaş sistemlər səbəbindən kilidin sərbəst buraxılması üçün vaxt tələb oluna bilər və ya başqa bir məlumatda kilidin buraxılmasını gözləyən başqa bir kilid ola bilər. Bu sistemin qeyri-müəyyən bir müddətə kilidin sərbəst buraxılmasını gözləməsini təmin edəcəkdir. Bu çıxılmaz vəziyyətə gətirib çıxaracaq.

8. Kilid artması nədir? Bir nümunə verin.

Kilid artması, aşağı səviyyədə son dərəcə artan kilidlər səbəbindən kilidlərin daha yüksək səviyyəyə qaldırılması prosesidir. Məsələn, bir masa üçün satır səviyyəsində bir çox kilid varsa, bu kilidi hər sıra səviyyəsində olmaqdan çox masa səviyyəsinə qaldırmaq daha yaxşı olar. Bu, hər sıra üçün qıfılların saxlanılması xərclərinin azaldılmasına kömək edəcəkdir. Masadakı kilidlərin sayını azaldır və performansı kəskin şəkildə artırır. Bu tip kilid artma məhdud sayda RDBMS - Sybase, SQL Server, DB2 və s. Tərəfindən dəstəklənir. Bu verilənlər bazalarında kilid artması avtomatik olaraq baş verir. Verilənlər bazası masadakı kilidləri yoxlayır və daha yüksək səviyyəyə qaldırılmalı olub olmadığını təyin edir. Bununla yanaşı aşağıda göstərilən bu avtomatik yoxlamaları aktivləşdirərək və ya söndürərək də eskalasiyaya nəzarət edə bilərik.

ALTER TABLE EMPLOYEES SET (LOCK_ESCALATION = DISABLE); // Disables lock escalations
ALTER TABLE EMPLOYEES SET (LOCK_ESCALATION = TABLE); // escalates to table level

Əsasən masadakı qıfılların sayının azaldılmasında və qıfılların saxlanmasına kömək edir. Bu da öz növbəsində sorğunun performansını artırmağa kömək edir.

9. Verilənlər bazasının dalana dirənməsi nədir?

Bir çıxılmaz vəziyyət, verilənlər bazasında bir istifadəçinin və ya sessiyanın məlumatlarda kilid əldə edilməsini, başqa bir istifadəçi və ya seansın ilk istifadəçinin və ya seansın əməliyyatı tamamlayıb kilidi buraxmasını gözlədiyi bir vəziyyətdir. Bu, kilid əldə etməyi gözləmək bir dövr təşkil edir və heç vaxt kilidi buraxmayacaq deməkdir. Məsələn, X istifadəçisi Transaction TXN_Y-nin kilidini tamamlayıb buraxacağını gözlədiyini düşünək. Eyni zamanda Y istifadəçisi, X istifadəçisinin TXN_X əməliyyatını tamamlayıb kilidi buraxmasını gözləyir. Ancaq burada TXN_X və TXN_Y bir-birindən əməliyyatı tamamlayacaq və kilidi buraxacaqlarını gözləyirlər. Hər ikisi bir-birini gözlədiyindən kilidi heç vaxt buraxmayacaqlar. Beləliklə, bu gözləmə əbədi olacaqdır. Bu vəziyyətə çıxılmaz vəziyyət deyilir.

10. Dalana qapanmanın qarşısının alınması və aşkarlanması arasındakı fərq nədir?

Dıxılmaz vəziyyətin qarşısının alınmasında, hər kilidləmə istəyi dalana səbəb ola biləcəyini yoxlamaq üçün yoxlanılacaq. Sistemdə heç bir kilid yaratmazsa, məlumat kilidi veriləcəkdir. Yəni kilidləmə tələbini yoxlayaraq sistemdəki dalana qapılma ehtimalı dayandırılır. Lakin onun üsulu çıxılmaz vəziyyəti tapmaq üçün çox səy və qaynaq tələb edir. Kilidin aşkarlanması sistemdəki çıxılmaz vəziyyətdən qaçınmaq üçün məşhur metodlardan biridir. Bu metodda sistemdə kilidlənməyə səbəb olan kilidləmə istəklərindən biri ləğv olunur ki, digər əməliyyatlar kilidi tamamlayaraq sərbəst buraxsın. Artıq ləğv edilən əməliyyat əməliyyatı başlayacaq və gözləmədən tamamlayacaqdır.

Crack Sistemi Dizayn Müsahibələri
Translate »