وصف التزامن

مكتمل

الميزة الأساسية لقواعد البيانات متعددة الاستخدام هي التزامن. يستخدم التزامن التأمين والحظر لتمكين البيانات من البقاء متسقة مع العديد من المستخدمين الذين يقومون بتحديث البيانات وقراءتها في نفس الوقت. على سبيل المثال، بسبب تكاليف الشحن، فإن جميع منتجاتنا لديها زيادة في الأسعار بقيمة 5 دولارات. وفي الوقت نفسه، وبسبب أسعار العملات، فإن جميع المنتجات لديها انخفاض سعر 3%. إذا حدثت هذه التحديثات في نفس الوقت بالضبط، فسيكون السعر النهائي متغيرا ومن المحتمل أن يكون هناك العديد من الأخطاء. باستخدام التأمين، يمكنك التأكد من اكتمال أحد التحديثات قبل بدء التحديث الآخر.

يحدث التزامن على مستوى المعاملة. يمكن أن تمنع معاملة الكتابة المعاملات الأخرى من التحديث وحتى قراءة نفس البيانات. وبالمثل، يمكن أن تمنع معاملة القراءة القراء الآخرين أو حتى بعض الكتاب. لهذا السبب، من المهم تجنب المعاملات أو المعاملات الطويلة بدون داع التي تغطي كميات زائدة من البيانات.

هناك العديد من مستويات عزل المعاملات المحددة التي يمكن استخدامها لتحديد كيفية تعامل نظام قاعدة البيانات مع العديد من المستخدمين. لأغراض هذه الوحدة النمطية، سننظر في فئات واسعة من مستوى العزل، والتأمين المتفائل، والتأمين المتشائم.

إشعار

ترتبط التفاصيل الكاملة لتأمين المعاملات بما يتجاوز التزامن بشكل أكبر بالأداء ولا تعتمد فقط على التعليمات البرمجية - على الرغم من أن التعليمات البرمجية الجيدة تعمل بشكل أفضل. يرجى مراجعة دليل تأمين معاملات SQL Server وإصدار الصف المتعمق للحصول على مزيد من التفاصيل. للحصول على معلومات حول الحظر، راجع أيضا وثائق أداء SQL Server.

التزامن الأمثل

مع التأمين المتفائل، هناك افتراض أن عددا قليلا من التحديثات المتعارضة سيحدث. في بداية المعاملة، يتم تسجيل الحالة الأولية للبيانات. قبل تنفيذ المعاملة، تتم مقارنة الحالة الحالية بالحالة الأولية. إذا كانت الحالات هي نفسها، يتم إكمال المعاملة. إذا كانت الحالات مختلفة، يتم التراجع عن المعاملة.

على سبيل المثال، لديك جدول يحتوي على أوامر مبيعات السنوات الأخيرة. يتم تحديث هذه البيانات بشكل غير متكرر، ولكن يتم تشغيل التقارير في كثير من الأحيان. باستخدام التأمين المتفائل، لا تمنع المعاملات بعضها البعض ويعمل النظام بشكل أكثر كفاءة. لسوء الحظ، تم العثور على أخطاء في السنوات الماضية البيانات والتحديثات تحتاج إلى إجراء. بينما تقوم معاملة واحدة بتحديث كل صف، تقوم معاملة أخرى بتحرير ثانوي إلى صف واحد في نفس الوقت. نظرا لتغيير حالة البيانات أثناء تشغيل المعاملة الأولية، يتم التراجع عن المعاملة بأكملها.

التزامن الحذر

مع التأمين المتشائم هناك افتراض أن العديد من التحديثات تحدث للبيانات في نفس الوقت. باستخدام التأمين يمكن أن يحدث تحديث واحد فقط في نفس الوقت، ويتم منع قراءة البيانات أثناء إجراء التحديثات. يمكن أن يمنع هذا التراجع الكبير، كما هو ملاحظ في المثال السابق، ولكن يمكن أن يتسبب في حظر الاستعلامات دون داع.

من المهم مراعاة طبيعة بياناتك والاستعلامات التي تعمل على البيانات عند تحديد ما إذا كنت ستستخدم التزامن المتفائل أو المتشائم لضمان الأداء الأمثل.

عزل اللقطة

هناك خمسة مستويات عزل مختلفة في SQL Server، ولكن لهذه الوحدة النمطية سنركز على READ_COMMITTED_SNAPSHOT_OFF فقط READ_COMMITTED_SNAPSHOT_ON. READ_COMMITTED_SNAPSHOT_OFF هو مستوى العزل الافتراضي ل SQL Server. READ_COMMITTED_SNAPSHOT_ON هو مستوى العزل الافتراضي لقاعدة بيانات Azure SQL.

سيحتفظ READ_COMMITTED_SNAPSHOT_OFF بتأمين الصفوف المتأثرة حتى نهاية المعاملة إذا كان الاستعلام يستخدم مستوى عزل المعاملة الملتزم بها للقراءة. في حين أنه من الممكن حدوث بعض التحديثات، مثل إنشاء صف جديد، فإن هذا سيمنع معظم التغييرات المتعارضة على البيانات التي تتم قراءتها أو تحديثها. هذا تزامن متشائم.

يأخذ READ_COMMITTED_SNAPSHOT_ON لقطة من البيانات. ثم يتم إجراء التحديثات على تلك اللقطة مما يسمح للاتصالات الأخرى بالاستعلام عن البيانات الأصلية. في نهاية المعاملة تتم مقارنة الحالة الحالية للبيانات مع اللقطة. إذا كانت البيانات هي نفسها، يتم الالتزام بالمعاملة. إذا كانت البيانات تختلف، يتم التراجع عن المعاملة.

لتغيير مستوى العزل إلى READ_COMMITTED_SNAPSHOT_ON إصدار الأمر التالي:

ALTER DATABASE *db_name* SET READ_COMMITTED_SNAPSHOT ON;

لتغيير مستوى العزل إلى READ_COMMITTED_SNAPSHOT_OFF إصدار الأمر التالي:

ALTER DATABASE *db_name* SET READ_COMMITTED_SNAPSHOT OFF;

إذا تم تغيير قاعدة البيانات لتشغيل لقطة ملتزمة بالقراءة، فإن أي معاملة تستخدم مستوى العزل الافتراضي للقراءة الملتزم به ستستخدم التأمين المتفائل.

إشعار

يحدث عزل اللقطة فقط للمعاملات الملتزم بها للقراءة. لا تتأثر المعاملات التي تستخدم مستويات العزل الأخرى.