Lock escalation در DB2
در مقاله های قبل با مفهوم قفل در DB2، انواع آن و راه های کاهش مشکلات درگیری قفل ها آشنا شدیم. در این مقاله مفهوم دیگری به نام Lock escalation (تشدید قفل) را معرفی می کنیم.
جهت مطالعه انواع ﻗﻔﻞ ﻫﺎ در DB2 اینجا کلیک کنید.
Lock escalation عمل آزاد کردن تعداد زیادی قفل در مقیاس پایین تر به منظور قرار دادن قفل در سطح بالاتری می باشد.
تصور کنید یک TableSpace با LOCKSIZE ROW و LOCKMAX 2000 تعریف شده است. اگر در انجام تراکنش ها، تعداد قفل ها به بیشتر از ۲۰۰۰ رکورد برسد، DB2 قفل های موجود را ارتقاء می دهد و آن را به LOCKSIZE PAGE تبدیل می کند.
اتفاقی که در این مرحله می افتد این است که در این TableSpace ظرفیت قفل گذاری از ۲۰۰۰ رکورد به ۲۰۰۰ صفحه تغییر کرده است و به همین ترتیب در هر escalation یک سطح به سطح قفل اضافه می گردد impotenciastop.com.
اگر در همین مثال، Lock escalation دیگری اتفاق بیفتد، LOCKSIZE به Tableیا پارتیشن (در Partitioned TableSpace) ارتقاء خواهد یافت.
مقاله ﻛﺎﻫﺶ ﻣﺸﻜﻼت درﮔﻴﺮى ﻗﻔﻞ ﻫﺎ در DB2 را می توانید در اینجا مطالعه نمایید.
Lock escalation، مفید یا مضر؟
فایده ی Lock escalation در این است که عملیات هایی که با سطح قفل قبلی، به دلیل اتمام ظرفیت قفل ها متوقف می شدند، می توانند با این Lock escalation با موفقیت به پایان برسند.
هر چند که این عملیات ها ممکن است همچنان به دلیل Lock timeout یا deadlock با شکست رو به رو شوند.
از نکات منفی Lock escalation این است که این عمل می تواند تاثیر منفی بر روی همزمانی با سایر برنامه هایی که نیاز به دسترسی به TableSpace دارند، بگذارد.
در مثال بالا بدون Lock escalation، تنها ۲۰۰۰ رکورد مجزا قفل خواهند شد و بقیه ی جدول قابل دسترسی می باشد، اما با رخ دادن عمل Lock escalation اگر این ۲۰۰۰ رکورد در ۱۵ صفحه ی جدول وجود داشته باشند، با ارتقاء سطح قفل به page، تمامی ۱۵ صفحه که می تواند دارای رکوردهای بسیار بیشتری از ۲۰۰۰ رکورد باشند، قفل و غیر قابل دسترسی خواهند بود.
جلوگیری از Lock escalation
- برای جلوگیری از اتفاق افتادن Lock escalation، اولین کار انتخاب کردن LOCKSIZE و LOCKMAX مناسب و بزرگتر از تعداد قفل های مورد نیاز برای تراکنش هایتان می باشد.
- همچنین شما از ورژن DB2 V.11.1.2.2 می توانید متغیر DB2_AVOID_LOCK_ESCALATION را در وضعیت ON قرار دهید. این متغیر باعث می شود تا برنامه هایی که به ماکزیمم تعداد قفل ها می رسند، متوقف شوند و Lock escalation اتفاق نیفتد.
- اگر سیاست کار شما و معماری برنامه تان اجازه می دهد، می توانید تعداد دفعات Commit را افزایش دهید. بیشتر بودن تعداد Commit باعث آزاد شدن قفل ها می شود و در نهایت تعداد قفل ها از LOCKMAX عبور نمی کند.
محتوای این مقاله بر گرفته از مطالب ارائه شده در کلاس DB2 fundamental Skills می باشد.
جهت مشاهده اطلاعات دوره آنلاین DB2 fundamental Skills ترم بهار ۹۹ اینجا کلیک کنید.
جهت مطالعه ببشتر در خصوص Lock escalation در DB2 به زبان انگلیسی می توانید از منابع زیر استفاده کنید: