بن بست در اوراکل

 

بن بست (Deadlock) در اوراکل

 

بن بست (DEADLOCK) در Oracle:
  • بن بست هنگامی رخ می دهد که دو یا چند Sessions (جلسه) منتظر اطلاعات قفل شده توسط یکدیگر باشند و در نتیجه مسدود می شود.
  • شما صبر می کنید ، شما مسدود شده اید. شما در حال تلاش برای تغییر برخی از داده هایی هستید که Session (جلسه) دیگر در حال تغییر است.
  • شما “ردیف X” را قفل کرده اید. آنها “ردیف y” را قفل کردند. شما باید “ردیف y” را قفل کنید ، آنها را مسدود می کنید. اکنون آنها باید “ردیف x” را قفل کنند. آنها توسط شما مسدود می شوند. شما اکنون به بن بست رسیده اید – منتظر هرکدام هستید. ما یکی از اظهارات را خاتمه می دهیم (دیگری شما و آنها فقط در آنجا برای همیشه منتظر یکدیگر می نشینیم).
آن Session (جلسه) تصمیم می گیرد که آیا باید:
a) commit
b) rollback
c) do something else
wait for lock در اوراکل

 

  • یکی از عوامل بوجود آمدن Deadlock در اوراکل به خاطر طراحی ضعیف دیتابیس و همچنین کد نویسی ضعیف در سطح اپلیکیشن می باشد که می توان با همکاری DBA با تیم Developer از بوجود آمدن اینگونه مسائل جلوگیری کرد.
  • بعضی اوقات بخاطر پروسس های هست که بصورت batch در اوراکل اجرا می شود و زمان زیادی طول میکشد و یا با هم Overlap-همپوشانی دارند و همچنین تعداد session های زیاد که بر روی یک سطر از جدول در حال عملیات هستند موجب Deadlock می شود.
  • یکی از ساده ترین راه ها این است که یوزرهایی که باعث lock شدن در اوراکل می شوند را پیدا کرده و سپس kill کنید.
پیشگیری:
  • یکی از آنها Tune کردن اپلیکیشن می باشد. بصورتی که از روش optimistic برای DML استفاده نمایید.
  • در بعضی شرایط بحرانی اضافه کردن مقدار INITRANS بر روی جداول و ایندکس های که بیشترین استفاده را در اوراکل دارند تاثیر گذار خواهد بود.
  • از block size های کوچکتر در Oracle استفاده نمایید مثلا db2k_cache_size و این پست را مشاهده کنید.
  • همیشه برای foreign keys ایندکس در اوراکل بسازید.
  • برای تشخیص Deadlock از $ORACLE_HOME/rdbms/admin/dbmslock.sql. استفاده کنید. بهتر است که قبل از وقوع آن همیشه اسکریپت مانیتورینگ Deadlock را در زمانهای مختلف اجرا کنید.
  • یک ابزار هم هست به نام Oracle Solaris Studio Thread Analyzer برای پیدا کردن Deadlock در برنامه ها.

 

Rate this post

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این قسمت نباید خالی باشد
این قسمت نباید خالی باشد
لطفاً یک نشانی ایمیل معتبر بنویسید.

keyboard_arrow_up
Oracle APEX Capabilities (OAC)