خطا در استفاده از حالت خودکار مدیریت قفل. کنترل قفل داده های تراکنش، مکانیزم

دلایل اصلی تغییر به قفل های مدیریت شده:

  • دلیل اصلی توصیه 1C:Expert بر اساس شهادت یا 1C:TsUP است.
  • مشکلات با کاربران همزمان ()
  • با استفاده از Oracle، PostgreSQL و .

هزینه کار:

ماهیت قفل های مدیریت شده

هنگام کار در حالت کنترل قفل خودکار، 1C: Enterprise درجه بالایی از جداسازی داده را در یک تراکنش در سطح DBMS تنظیم می کند. این به شما این امکان را می دهد که بدون هیچ تلاش خاصی از جانب توسعه دهندگان برنامه، امکان به دست آوردن داده های ناقص یا نادرست را کاملاً از بین ببرید.

این یک رویکرد مناسب و صحیح برای تعداد کمی از کاربران فعال است. قیمت سهولت توسعه مقدار معینی قفل اضافی در سطح DBMS است. این قفل ها هم با ویژگی های اجرای مکانیسم های قفل در خود DBMS مرتبط هستند و هم با این واقعیت که DBMS نمی تواند (و نمی کند) معنی و ساختار فیزیکی اشیاء فراداده 1C: Enterprise را در نظر بگیرد.

هنگام کار با مناقشه زیاد برای منابع (تعداد زیادی از کاربران)، در برخی موارد تاثیر قفل های اضافی از نظر عملکرد در حالت موازی قابل توجه می شود.

پس از انتقال پیکربندی به حالت مدیریت شده، عملکرد اضافی "مدیر قفل" در پلت فرم فعال می شود و کنترل یکپارچگی داده ها اکنون نه در سمت DBMS، بلکه در سمت سرور 1C انجام می شود. این باعث افزایش بار روی سخت‌افزار سرور 1C می‌شود (پردازنده‌های سریع‌تر و حافظه بیشتری مورد نیاز است)، و در واقع حتی یک کندی جزئی (چند درصد) ایجاد می‌کند، اما وضعیت قفل‌ها را به طور قابل توجهی بهبود می‌بخشد (قفل‌های کمتر به دلیل قفل شدن روی یک شی، و نه در ترکیبی از جداول، منطقه مسدود کردن کمتر و در برخی موارد طول عمر قفل‌های خواندن کوتاه‌تر است، یعنی تا پایان تراکنش نیست). این همزمانی کلی را بهبود می بخشد.


پیکربندی های جدید از 1C بلافاصله در یک حالت کنترل شده پیاده سازی شدند.

  • سوال: آیا می توان ابتدا ممیزی انجام داد و سپس به FM منتقل شد؟

پاسخ: بله، ممیزی به عنوان یک توجیه اضافی برای امکان سنجی تغییر به قفل های مدیریت شده و همچنین برای ارزیابی سهم قفل های خودکار در کندی کلی و اینکه آیا به تلاش های اضافی در کنار انتقال نیاز است یا خیر، عمل می کند.

  • سوال: برای انتقال به UX، چه نوع دسترسی باید ارائه شود - RDP، TeamViewer؟ یا میتونم فایل کانفیگ رو براتون بفرستم؟

پاسخ: ما سعی می کنیم خود را به یک فناوری دسترسی از راه دور خاص محدود نکنیم، این کار انجام خواهد شد هر فناوری دسترسی از راه دور. اگر برای شما مهم نیست، پس RDP عملی تر است.
ما می‌توانیم بهینه‌سازی را بر اساس فایل پیکربندی ارسالی انجام دهیم، اما پس از آن نمی‌توانیم برخی از داده‌های واقعی را اشکال زدایی کنیم و باید با دقت بیشتری تست کنید. اگر بهینه سازی را روی یک نسخه از پایگاه داده انجام دهیم، می توانیم قبل از اینکه نتیجه کار را به شما ارائه دهیم، آن را با دقت بیشتری آزمایش کنیم.

  • سوال: ما 10 برنامه نویس تمام وقت داریم که هر روز چیزی را در کنفرانس تغییر می دهند. یک فروشگاه پیکربندی مشترک استفاده می شود." تعامل در حین انتقال به UX چگونه سازماندهی خواهد شد؟ یا باید همه برنامه نویس ها به مرخصی فرستاده شوند؟

پاسخ: به عنوان یک قاعده، تغییرات ما ظرف چند روز انجام می شود. بقیه زمان صرف آزمایش تغییرات ایجاد شده می شود، از جمله از نقطه نظر منطق مورد نیاز تعیین شده توسط تجارت و نه ملاحظات فنی. ما می توانیم در یک فایل پیکربندی جداگانه تغییراتی ایجاد کنیم cf، و سپس برنامه نویس شما آن را به مخزن متعهد می کند. هیچ کس مجبور نیست به تعطیلات برود. در گزینه های دیگر برای تعامل، فقط باید در مورد اینکه توسعه دهندگان شما قصد دارند کدام اشیاء را بگیرند، توافق کنید تا بتوانیم یک برنامه کاری مناسب برای هر دو طرف ایجاد کنیم. به عنوان یک قاعده، توسعه دهندگان شما نیازی ندارند که کل پیکربندی را ضبط کنند، یا "فرمان" را برای روز به ما بدهند.

سیستم 1C: Enterprise به شما امکان می دهد از دو حالت کار با پایگاه داده استفاده کنید: حالت قفل های خودکار در یک تراکنش و حالت قفل های کنترل شده در یک تراکنش.

تفاوت اساسی این حالت ها به شرح زیر است. حالت قفل خودکار نیازی به انجام هیچ گونه اقدامی برای مدیریت قفل ها در یک تراکنش از سوی توسعه دهنده ندارد. این قوانین توسط پلت فرم سیستم 1C: Enterprise از طریق استفاده از سطوح خاصی از جداسازی تراکنش در یک DBMS خاص تضمین می شوند. این حالت عملیات برای توسعه دهنده ساده ترین است، با این حال، در برخی موارد (به عنوان مثال، با کار همزمان فشرده تعداد زیادی از کاربران)، سطح جداسازی تراکنش استفاده شده در DBMS نمی تواند موازی کاری کافی را ارائه دهد، که خود را در شکل تعداد زیادی درگیری قفل در هنگام کار کاربران.

هنگام کار در حالت قفل مدیریت شده، سیستم 1C: Enterprise از سطح بسیار پایین تری از جداسازی تراکنش در DBMS استفاده می کند که می تواند همزمانی کاربران راه حل برنامه را به طور قابل توجهی افزایش دهد. با این حال، بر خلاف حالت قفل خودکار، این سطح از جداسازی تراکنش دیگر نمی تواند به تنهایی از انطباق با تمام قوانین کار با داده ها در یک تراکنش اطمینان حاصل کند. بنابراین، هنگام کار در حالت مدیریت شده، توسعه دهنده موظف است به طور مستقل قفل های تنظیم شده در تراکنش را مدیریت کند.

به طور خلاصه، تفاوت ها هنگام کار در حالت مسدود کردن خودکار و در حالت مسدود کردن کنترل شده در جدول زیر نشان داده شده است:

تنظیم حالت مسدود کردن در پیکربندی

این پیکربندی دارای ویژگی Data Lock Control Mode است. هر شیء برنامه پیکربندی همچنین دارای ویژگی Data Lock Control Mode است.
حالت کنترل قفل داده برای کل پیکربندی را می توان روی خودکار، مدیریت شده (پیش فرض برای یک پیکربندی جدید) یا خودکار و مدیریت شده تنظیم کرد. مقادیر خودکار و مدیریت شده به این معنی است که حالت مسدود کردن مربوطه برای همه اشیاء پیکربندی، صرف نظر از مقادیر تنظیم شده برای هر یک از اشیاء، استفاده خواهد شد. مقدار Automatic and Managed به این معنی است که برای یک شی پیکربندی خاص، حالت مشخص شده در ویژگی حالت کنترل قفل داده آن استفاده خواهد شد: خودکار یا مدیریت شده.
لازم به ذکر است که حالت کنترل قفل داده مشخص شده برای یک شی فوق داده برای آن دسته از تراکنش هایی تنظیم شده است که هنگام کار با داده های این شی (به عنوان مثال، هنگام تغییر داده های شی) توسط سیستم 1C: Enterprise آغاز می شود.
به عنوان مثال، اگر عملیات نوشتن یک شی در تراکنشی که توسط توسعه دهنده آغاز شده است (روش StartTransaction()) انجام شود، حالت کنترل قفل داده با مقدار پارامتر Locking Mode تعیین می شود.
متد StartTransaction() و نه مقدار ویژگی شی فوق داده Data Lock Control Mode.
به طور پیش فرض، پارامتر Blocking Mode بر روی Data Blocking Control Mode تنظیم شده است، بنابراین برای
برای استفاده از حالت قفل مدیریت شده در یک تراکنش صریح، باید مقدار این پارامتر را مشخص کنید
حالت کنترل قفل داده.

کار با قفل های مدیریت شده با استفاده از زبان داخلی

برای مدیریت قفل ها در یک تراکنش، از شی زبان داخلی DataLock استفاده می شود. نمونه ای از این شی را می توان با استفاده از سازنده ایجاد کرد و به شما امکان می دهد فضاهای قفل و حالت های قفل مورد نیاز را توصیف کنید. برای تنظیم تمام قفل های ایجاد شده، از متد Lock() شی DataLock استفاده کنید. اگر این روش در یک تراکنش (صریح یا ضمنی) اجرا شود، قفل ها به دست می آیند و با پایان تراکنش به طور خودکار آزاد می شوند. اگر متد Lock() خارج از تراکنش اجرا شود، هیچ قفلی به دست نخواهد آمد.

شرایطی تنظیم می شود که مقدار فیلد برابر با مقدار مشخص شده باشد یا مقدار فیلد در محدوده مشخص شده باشد.
شرایط را می توان به دو صورت تنظیم کرد:

  • با تعیین صریح نام و مقدار فیلد (روش SetValue() شی DataLockElement).
  • با تعیین یک منبع داده حاوی مقادیر مورد نیاز (ویژگی DataSource شی DataLockElement).

برای هر عنصر مسدود کننده، یکی از دو حالت مسدود کننده را می توان تنظیم کرد:

  • به اشتراک گذاشته شده،
  • استثنایی.

جدول سازگاری قفل مدیریت شده به شکل زیر است:

حالت قفل مشترک به این معنی است که داده های قفل شده را نمی توان تا پایان تراکنش فعلی توسط تراکنش دیگری تغییر داد.
قفل انحصاری به این معنی است که داده های قفل شده را نمی توان توسط تراکنش دیگری تا پایان تراکنش فعلی تغییر داد و همچنین نمی توان آنها را توسط تراکنش دیگری که دارای قفل مشترک روی داده است، خواند.

ویژگی های عملکرد در حالت "خودکار و کنترل شده".

هنگام کار در حالت کنترل بلوک خودکار و کنترل شده، دو ویژگی باید در نظر گرفته شود:

صرف نظر از حالتی که برای یک تراکنش مشخص شده است، سیستم مدیریت مناسب را نصب خواهد کرد
مسدود کردن
حالت کنترل قفل توسط تراکنش در بالاترین سطح تعیین می شود. به عبارت دیگر، اگر تراکنش دیگری در زمان شروع تراکنش آغاز شده باشد، تراکنش آغاز شده تنها می تواند در حالتی که برای تراکنش در حال اجرا تنظیم شده است، اجرا شود.

بیایید ویژگی های ذکر شده را با جزئیات بیشتری در نظر بگیریم.

اولین ویژگی این است که حتی اگر از حالت مدیریت قفل خودکار برای تراکنش استفاده شود، سیستم علاوه بر این قفل های مدیریت شده مربوطه را هنگام نوشتن داده در این تراکنش نصب می کند. نتیجه این است که تراکنش های اجرا شده در حالت قفل مدیریت شده ممکن است با تراکنش های اجرا شده در حالت مدیریت قفل خودکار تضاد داشته باشند.

ویژگی دوم این است که حالت مدیریت قفل که برای یک شی فراداده در پیکربندی مشخص شده است یا به صراحت هنگام شروع یک تراکنش مشخص شده است (به عنوان پارامتری برای متد StartTransaction()) فقط یک حالت "دخواه" است. حالت مدیریت قفل واقعی که در آن تراکنش اجرا خواهد شد به این بستگی دارد که آیا این اولین تماس برای شروع تراکنش است یا اینکه تراکنش دیگری قبلاً در این جلسه از سیستم 1C:Enterprise در آن لحظه شروع شده است.

به عنوان مثال، اگر هنگام ارسال یک سند، نیاز به مدیریت قفل ها در هنگام نوشتن مجموعه های رکوردهای ثبت نام دارید، حالت قفل مدیریت شده باید هم برای خود ثبت و هم برای سند تنظیم شود، زیرا نوشتن مجموعه های رکوردهای ثبت در تراکنش انجام می شود. هنگام نوشتن سند باز می شود.

مکانیزم مدیریت قفل دادهدر یک تراکنش به شما امکان می دهد تا داده های قابل تغییر را نه با استفاده از سیستم مدیریت پایگاه داده استفاده شده، بلکه با استفاده از پلت فرم قفل کنید. چنین مدیریت قفل داده نه از نظر داده های DBMS، بلکه از نظر دامنه داده انجام می شود. به لطف این، قفل ها با دقت بیشتری اعمال می شوند و همزمانی کاربر افزایش می یابد.

پیکربندی 1C: Enterprise 8 می تواند در یکی از سه حالت برای مدیریت قفل ها در تراکنش عمل کند:

  • خودکار؛
  • مدیریت شده - حالت استاندارد برای تنظیمات جدید؛
  • اتوماتیک و کنترل شده

که در حالت خودکارمدیریت قفل داده از سطوح جداسازی تراکنش خواندنی و سریال‌سازی تکرارپذیر ارائه شده توسط سیستم مدیریت پایگاه داده استفاده می‌کند. این سطوح جداسازی تراکنش، خواندن مداوم و یکنواخت داده‌ها را بدون نیاز به تلاش‌های مدیریت قفل اضافی از سوی توسعه‌دهنده تضمین می‌کند.

حالت مدیریت شدهبه شما این امکان را می دهد تا با استفاده از سطح پایین تری از جداسازی تراکنش های پایگاه داده (Read Committed) موازی کاری کاربر را در حالت عملکرد مشتری-سرور افزایش دهید. هنگام نوشتن داده ها در یک تراکنش، اشیاء زبان داخلی به طور خودکار داده های مورد نیاز را قفل می کنند. توسعه‌دهنده باید قفل‌های داده را در مواردی مدیریت کند که منطق کسب‌وکار مستلزم خواندن مداوم و مداوم داده‌ها در یک تراکنش است.

اتوماتیک و کنترل شدهحالت به شما امکان می دهد از توانایی مدیریت قفل ها در یک تراکنش فقط برای برخی از اشیاء پیکربندی استفاده کنید. این حالت را می توان برای بهینه سازی همزمانی کاربر با اشیاء برنامه های کاربردی منفرد (به عنوان مثال، چند مورد از پرکاربردترین اسناد) یا برای انتقال تدریجی پیکربندی های بزرگ به حالت مدیریت قفل تراکنش استفاده کرد.

به طور خلاصه، تفاوت ها هنگام کار در حالت مسدود کردن خودکار و در حالت مسدود کردن کنترل شده در جدول زیر نشان داده شده است:

اغلب، نیاز به مدیریت قفل های داده در یک تراکنش در فرآیند ارسال اسناد ایجاد می شود، زمانی که شما نیاز به خواندن و سپس نوشتن داده های تغییر یافته در همان جداول دارید. به عنوان مثال، اگر هنگام ارسال یک سند، تعادل را زیر نظر دارید.

مخصوصاً برای این منظور مجموعه سوابق دفاتر انباشت و دفاتر حسابداری دارای خاصیت هستند BlockForChange.

اگر نیاز به کنترل مانده ها و سپس ثبت حرکات در همان ثبت دارید، این ویژگی باید برای مجموعه رکوردهای این ثبت در ملک تنظیم شود. حرکات.

تأثیر این ویژگی مانند این است که توسعه دهنده به طور مستقل قفل های مدیریت شده لازم را برای 1C:Enterprise 8 نصب کرده باشد (در کد تجویز شده). در نتیجه، سایر تراکنش‌های مدیریت‌شده با استفاده از قفل مشابه، تا زمانی که تراکنش فعلی تکمیل نشده باشد، قادر به خواندن این ثبت نخواهند بود.

در زیر نمونه ای از کنترل "دستی" قفل های داده هنگام خواندن داده های ثبت تجمعی آورده شده است حسابداری اقلامدر پردازش اسناد فاکتور فروش. در این مثال، قفل های مدیریت شده به طور کامل با استفاده از زبان داخلی ایجاد و تنظیم می شوند.

سازوکار قفل های معاملاتیبرای دسترسی رقابتی کاربر به DBMS استفاده می شود.
تراکنش نوعی عملیات مداوم است که در طی آن وضعیت پایگاه داده تغییر می کند. این حداقل مقدار تغییر است: شما نمی توانید نیمی از تراکنش را انجام دهید. اگر تراکنش کامل نشود، پایگاه داده به حالت اولیه خود باز می گردد.
از آنجایی که یک تراکنش آرایه ای از داده ها را جمع آوری می کند، یک تفاوت ظریف در دسترسی به این آرایه ایجاد می شود: برای مثال، یک تراکنش داده ها را تغییر می دهد و دیگری سعی می کند آن را بخواند. نتیجه خواندن ممکن است نادرست باشد، زیرا شامل آخرین تغییرات نخواهد شد. بنابراین، جداسازی تراکنش در سطح DBMS کار می کند. سطوح ایزوله زیر ممکن است:

  • بدون تعهد بخوانید- در حالی که یک تراکنش آرایه را تغییر می دهد، دیگری نمی تواند آن را تغییر دهد، اما می تواند آن را بخواند. پایین ترین سطح عایق
  • متعهد بخوانید- در حالی که یک تراکنش آرایه را تغییر می دهد، دیگری نمی تواند آن را تغییر دهد یا بخواند
  • خواندنی تکراری- در حالی که یک تراکنش آرایه را می خواند، دیگری نمی تواند آن را تغییر دهد، اما می تواند آن را بخواند
  • قابل سریال سازی- در حالی که یک تراکنش آرایه را می خواند، دیگری نمی تواند آن را تغییر دهد یا بخواند. تمام عملیات به صورت متوالی است. حداکثر سطح عایق

اگر پیکربندی 1C: Enterprise روی تنظیم شده باشد حالت قفل خودکار، سپس سطح جداسازی تراکنش توسط DBMS انتخاب می شود. در مورد MS SQL، این سطوح Repeatable read یا Serializable خواهد بود، یعنی جداسازی داده ها نزدیک به حداکثر است. این مشکلات مربوط به صحت داده ها را حل می کند، اما می تواند منجر به مسدود شدن در سطح DBMS در طول کار فشرده کاربر شود. بنابراین، 1C: Enterprise عملکرد خاص خود را برای کار با قفل دارد که با فعال کردن حالت قفل مدیریت شده فعال می شود. در این مورد، سطح جداسازی تراکنش برای MS SQL Read تعهد می شود. پلتفرم خود داده ها را بدون تکیه بر DBMS جدا می کند.

حالت قفل مدیریت شده در ویژگی های پیکربندی فعال است:

همچنین، حالت قفل را می توان برای اشیاء پیکربندی خاص تنظیم کرد:

اگر پیکربندی به طور کلی روی حالت قفل خودکار تنظیم شود، آنگاه تمام تراکنش‌ها برای همه رجیسترها بدون توجه به حالتی که برای شی پیکربندی تنظیم شده است، در حالت خودکار کار خواهند کرد. اگر Managed باشد، به طور مشابه، تمام تراکنش ها در Managed خواهند بود. اگر حالت پیکربندی روی Automatic و کنترل شده باشد، آنگاه حالت برای هر شی با تنظیمات آن تعیین می شود.

یک نقطه برای حالت خودکار و کنترل شده وجود دارد. یک تراکنش واحد برای یک کاربر ممکن است چندین تراکنش را از دیدگاه پلتفرم نشان دهد. به عنوان مثال، ارسال تعاملی یک سند به یک ثبت باعث می شود دوتراکنش ها - رکوردی از خود سند و در این تراکنش رکورد مجموعه ای از ردیف ها بر اساس ثبت. بسته به حالت مدیریت قفل برای خود سند و ثبتی که آن را جابجا می کند، چهار حالت ممکن است:

  1. حالت سند خودکار، حالت ثبت خودکار ->
  2. حالت سند مدیریت شده، حالت ثبت مدیریت -> ثبت با ثبت در حالت مدیریت شده
  3. حالت سند خودکار، حالت ثبت کنترل شده -> ثبت با ثبت در حالت خودکار
  4. حالت سند مدیریت شده، حالت ثبت خودکار -> استثنا (خطا)

سوال 06.59 امتحان 1C: Platform Professional. هنگام ارسال یک سند از طریق هر ثبتی، اگر سند دارای حالت مدیریت قفل تراکنش خودکار باشد و ثبت دارای حالت مدیریت شده باشد (گزینه "خودکار و مدیریت شده" در ویژگی های پیکربندی استفاده می شود)، چنین ارسالی منجر به موارد زیر می شود:

پاسخ صحیح دومی است، ما آن را با تراکنش اول تعیین می کنیم، اگر خودکار باشد، همه چیز خودکار است.

سوال 06.60 امتحان 1C: Platform Professional. هنگام ارسال یک سند از طریق هر ثبتی، اگر سند دارای حالت مدیریت شده برای مدیریت قفل تراکنش ها باشد و ثبت دارای حالت خودکار باشد (در ویژگی های پیکربندی از گزینه "Automatic and Management" استفاده می شود)، چنین ارسالی منجر به موارد زیر می شود:

  1. به یک وضعیت خطا
  2. کل تراکنش به صورت خودکار انجام می شود
  3. کل تراکنش به صورت کنترل شده انجام خواهد شد

پاسخ صحیح اول است، ما با اولین تراکنش تعیین می کنیم، اگر کنترل شود، پس خطا است.

سوال 06.61 امتحان 1C: Platform Professional. هنگام ارسال یک سند از طریق هر ثبت، اگر سند دارای یک حالت خودکار برای مدیریت قفل تراکنش ها باشد و ثبت دارای یک حالت مدیریت شده باشد (گزینه "مدیریت شده" در ویژگی های پیکربندی استفاده می شود)، چنین ارسالی منجر به موارد زیر می شود:

  1. به وضعیت خطا
  2. کل تراکنش به صورت خودکار انجام می شود
  3. کل تراکنش به صورت کنترل شده انجام خواهد شد


 

شاید خواندن آن مفید باشد: