سؤال

وأنا أقرأ SQL خادم التصعيد قفل من MSDN الصفحة حول SQL خادم قفل التصعيد

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

ويرجع الفضل في ذلك مسبقا، جورج

هل كانت مفيدة؟

المحلول

<اقتباس فقرة>   

هل يمكن لأحد أن يفسر بطريقة بسيطة لماذا هناك حاجة التصعيد قفل وما هو ما يسمى فوق القفل من فضلك؟

عند تحديث جدول وقفل على التوالي، تحتاج إلى تسجيل هذه الحقيقة بطريقة أو بأخرى: هذا هو صف واحد، تم تحديثه ومؤمن

.

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

وSQL خادم يحتفظ قائمة الأقفال في الذاكرة، في حين لا أوراكل في على tablespaces.

وهذا هو الأرجح لأن أوراكل قديمة (أكبر مني)، و SQL Server من الشباب مقارنة مع أوراكل.

والحفاظ على الموارد مؤقتة (مثل الأقفال) في التخزين الدائم ليس حل واضح لذلك من وجهة نظر المصمم. شيء واحد فقط أن أذكر: قد تحتاج إلى الكتابة على القرص لإجراء SELECT FOR UPDATE

وقد وضعت الميزات الأساسية أوراكل في 80 في وقت مبكر، عندما حفظ الأشياء في الذاكرة وليس خيارا على الإطلاق. انهم فقط <م> قد استخدام مساحة القرص بطريقة أو بأخرى.

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

وحيث للحفاظ على قفل لصف إن لم يكن في الصف نفسه؟

ومطوري نظام قفل SQL خادم، وعندما قررت اختراع تصميم RDBMS بهم يسمى سايبيس لتخزين الأشياء مؤقتة (ط. ه. أقفال) في التخزين المؤقت (ط. ه. RAM).

ولكن تصميم أوراكل دائما متوازنة: إذا كان لديك 1،000،000 الصفوف في قاعدة البيانات الخاصة بك، ثم لديك مساحة تخزين 1،000،000 الأقفال، وإذا كان لديك مليار الصفوف، يمكنك تخزين مليار الأقفال، الخ

والتصميم SQL خادم هو flawy في هذا المعنى، لأن RAM ومساحة القرص الصلب قد يكون غير متوازن. قد يكون لديك 16M من ذاكرة الوصول العشوائي وعدة تيرابايت من مساحة القرص بسهولة. وأنت الذاكرة فقط لا يمكن ان تحمل جميع الأقفال.

وهذا هو السبب عندما يصل عدد مرات تأمين حد معين، SQL خادم تقرر تصعيد الأقفال: بدلا من الاحتفاظ أقفال ل، مثلا، 10 الصفوف الفردية في صفحة بيانات (الذي يتطلب 10 السجلات)، تستقر صفحة البيانات بأكملها (الذي يتطلب 1 رقم قياسي).

وأوراكل، من ناحية أخرى، عند تحديث صف واحد، ويكتب فقط القفل الحق في datapage.

وهذا هو السبب في أقفال أوراكل هي على مستوى الصف.

وأوراكل لا "إدارة" الأقفال في الحس السليم للكلمة: كنت لا تستطيع، مثلا، والحصول على قائمة من الصفحات المؤمنة في أوراكل

وعندما تحتاج الصفقة لتحديث صف واحد، فإنه يذهب فقط إلى الصف، ويرى ما اذا كان مؤمن.

وإذا كان كذلك، يبدو الذي الصفقة تحمل خصلة (ويرد هذه المعلومات ضمن واصف القفل في صفحة البيانات) ويضيف نفسه إلى قائمة الانتظار إخطار تلك المعاملة ل: عندما تموت المعاملات تأمين، ويحصل على إخطار نسخة أصلية واحدة والأقفال البيانات.

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

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

ولكن منذ أوراكل تخزين datablocks وصفها يتم تنفيذ العمليات الفعلية أعلاه في الذاكرة على أي حال، وأداء نفس أو على مقربة منه.

نصائح أخرى

إذا التقديرات محسن SQL الخادم / تقرر أن استعلام سوف "زيارة" كافة الصفوف في نطاق معين سيكون أكثر فعالية لعقد قفل واحد على هذا النطاق بدلا من أن يكون للتفاوض العديد من الأقفال (أقفال يجب أن يتم اختبار لنوع). هذا بالإضافة إلى أقل استهلاكا للموارد التأمين (نظام الموارد واسعة).

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

وUPDATE: A مؤشر غطاء للاستعلام يعني أن البحث في تتجمع لن تحتاج إلى القيام بها، وهذا يقلل من فرص منع إدراج في جدول

.

والنفقات العامة القفل يعني أن إدارة تأمين جدول واحد هو أفضل الأداء الإقتصادي الأداء الحكمة من إدارة الكثير من اغلاقات. لأن كل قفل يأخذ بعض الذاكرة، والكثير من اغلاقات يمكن أن تستهلك الكثير من الذاكرة من تأمين جدول واحد. لذلك التصعيد قفل يذهب من row-> صفحة المكان> تأمين جدول.

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

لمعلومات محددة بشأن كيفية الحفاظ على الأقفال، ويمكنك ان ترى الفصل 8 من Microsoft SQL Server 2005: محرك التخزين (أنا لا ينتمي، وهذا هو فقط أول من المعلومات الداخلية جئت عبر). إذا كان لديك حساب books24x7، انها هناك. فإنه يدل على آلة> ذاكرة 16GB هناك 2 ^ 25 (33554432) فتحات في الجدول قفل التجزئة، مع الحد الأعلى من 2 ^ 31 فتحات.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top