PDA

View Full Version : اموزش:مفهوم قفل کردن داده ها



oliya24
سه شنبه 03 مرداد 1391, 17:23 عصر
سلام دوستان عزیز برنامه نویسان محترم
خسته نباشید
بعد از مدتی که تصمیم داشتم یه اموزش حداقلی در مورد مفهوم قفل کردن داده ها در اس کیو ال رو بگزارم امروز به لطف خداتونستم عملیش کنم و در خدمت تمامی شما دوستان باشم
----------------------------------------------------------------------------------------------------------------------------------در ابتدا شما را با یک سناریو اشنا میکنم که در این سناریو میتوانید دلیل استفاده از این اموزش رو فرا بگیرید
---------------------------------------------------------------------------------------------------------------------------------فرض کنید که شما و همسرتان دارای یک حساب مشترک بانکی هستید و هر کدام یک کارت عابر بانک دارید حالا فرض کنید که موجودی حساب شما 100 هزار تومان میباشدو شما هر دو به صورت همزمان درخواست 60 هزار تومان میکنید سیستم عابر بانک با توجه به انکه موجودی حساب شما 100 هزار تومان یعنی بیشتر از مبلغ درخواستی است هر دو درخواست را میپذیرد و از انجا که پذیرفتن یک درخواست مانع پذیرش درخواست بعدی نمیشود هر دو درخواست ر پرداخت میکند . در نتیجه بانک 20 هزار تومان به شما بیشتر از موجودی حساب میدهد خوب برای جلوگیری کردن از این بحران راهی وجود دارد به نام قفل کردن داده ها
در واقع لازم است که تراکنش اول مثلا درخواست پول همسرتان داده های مربوط به حساب را قفل کند و تا زمانیکه تراکنشش به پایان نرسیده امکان اغاز تراکنش دیگری را ندهد !!!!!مثلا درخواست پول توسط شما (تراکنش دوم)
------------------------------------------------------------------------------------------------------------------------------
نوع قفل:که بر دو نوع هستند 1:اشتراکی یا sharedکه به ان قفل خواندن نیز میگویند و 2:اختصاصی exclusiveکه به ان قفل نوشتن نیز میگویند
پس نتیجه میگیریم که هر بار فرایندی داده ها را میخواند یک قفل اشتراکی را اعمال میکند در ضمن دستور select قفل خواندن را اعمال میکند و دستورات دیگر هم مثل insert-update-delete هم در جایی که اطلاعات یک جدول را برای به روز اوریجدولی دیگر میخوانند این قفل را اعمال میکنند
هر با که فرایندی داده ها را تغییر دهد قفل exclusive اعمال میشود معمولا در جریان عملیات درج و..قفلهای اختصاصی اعمال میشوندو دستوراتی مانند create -alter -drop هم از این قفل استفاده میکنند
------------------------------------------------------------------------------------------------------------------------------

oliya24
سه شنبه 03 مرداد 1391, 17:56 عصر
سطوح ایزولاسیون در تراکنشها
1:read committed
2:read unmommitted
3:repatable read
4:serializable
هر کدام معنای فارسی خاصی دارن و سطح پیشفرض اس کیو ال سرور سطح 1 میباشد در این سطح قفلهای اختصاصی در طول تراکنش ماندگار هستند اما قفلهای اشتراکی به محض انکه صفحه مورد نظر دیگر مورد نیاز نباشد رها خواهد شد به این ترتیب اگر فرایند بعدا بخواهد چیزی را از همان صفحه بخواند باید مجددا یک قفل اشتراکی بر روی ان بگذارد به این سطح سطح ایزولاسیون صفر هم گفته میشه
سطح READ UNCOMMITTED
در این سطح برای انجام عملیات خواندن قفلی گذاشته نمیشود بنابراین میتوان مقادیر موجود در اشیا قفل شده حتی اگر دارای قفل اختصاصی باشند را نیز خواند که این نوع خواندن را خواندن کثیف میگویند dirty read یعنی مقایری که هنوز تحویل نشده اند و ممکن است بعدا عقبگرد شوند نیز خوانده میشود
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
سطح read committed:در این سطح برای عملیات خواندن قفل گذاشته میشود اما به محض انکه صفحه مورد نظر خوانده شد قفل برداشته میشود قفلهای اختصاصی رعایت میشوند و اگر دوباره خواندن همان صفحه مجددا لازم شود روی ان قفل جدیدی گذاشته میشود بنابراین ممکن است در بار دوم مقادیر خوانده شده با مقادیر خوانده شده در بار اول متفاوت باشند چون در این فاصل سایر فرایندها قادر به تغییر دادن داده های مزبور بوده
سطح :REPEATABLE REA:این سطح برای انجام عملیات خواندن قفل گذاشته میشود و این قفلها تا پایان تراکنش برداشته نمشوند قفلهای اختصاصی رعایت میشوند به این ترتیب سایر فرایندها نمیتوانند داده های خوانده شده قبلی را تغغیر دهند بنابراین اگر در ادامه تراکنش همان مقادیر را دوباره بخوانید همان نتایج را بدست خواهید اورد
ادامه دارد