يعد الاحتفاظ بجداول بيانات SQL Server في الذاكرة إحدى الوظائف التي يوفرها SQL Server، والتي نادرًا ما تشارك في عملية تطوير الأنظمة الصغيرة العامة. يتم تجميع المستندات ذات الصلة هنا لتوضيح كيفية وضع كافة بيانات الجدول في SQL Server في الذاكرة لتنفيذ قاعدة بيانات في الذاكرة وتحسين الأداء في الوقت الفعلي.
1، يقوم DBCC PINTABLE
بوضع علامة على الجدول المراد تثبيته، مما يعني أن Microsoft SQL Server لا يقوم بمسح صفحات الجدول من بناء
الجملة
DBCC PINTABLE (قاعدة البيانات_id، table_id)
لتحديد معرف قاعدة البيانات، استخدم الدالة DB_ID
لتحديد معرف الجدول، استخدم الدالة OBJECT_ID.
لا يؤدي
التعليق على
DBCC PINTABLE إلى قراءة الجدول في الذاكرة. عندما تتم قراءة الصفحات الموجودة في جدول في ذاكرة التخزين المؤقت بواسطة عبارات Transact-SQL العادية، يتم وضع علامة عليها كصفحات مقيمة في الذاكرة. لا يتم مسح الصفحات الموجودة في الذاكرة عندما يحتاج SQL Server إلى مساحة لقراءتها في الصفحات الجديدة. لا يزال SQL Server يسجل تحديثات الصفحة، وإذا لزم الأمر، يقوم بكتابة الصفحة المحدثة مرة أخرى إلى القرص. ومع ذلك، يحتفظ SQL Server بنسخة من الصفحات المتوفرة في ذاكرة التخزين المؤقت حتى يصبح الجدول غير مقيم باستخدام عبارة DBCC UNPINTABLE.
من الأفضل استخدام DBCC PINTABLE للاحتفاظ بالجداول الصغيرة التي يتم الرجوع إليها بشكل متكرر في الذاكرة. اقرأ صفحات الجدول الصغير في الذاكرة مرة واحدة، ولا يلزم قراءة جميع المراجع المستقبلية لبياناته من القرص.
ملاحظة: يمكن أن يوفر DBCC PINTABLE تحسينات في الأداء، ولكن يجب استخدامه بحذر. في حالة وجود جدول كبير، يستخدم الجدول في البداية جزءًا كبيرًا من ذاكرة التخزين المؤقت دون ترك ذاكرة تخزين مؤقت كافية للجداول الأخرى في النظام. إذا كان الجدول المستضاف أكبر من ذاكرة التخزين المؤقت، فسيقوم الجدول بملء ذاكرة التخزين المؤقت بأكملها. يجب على عضو دور الخادم الثابت لمسؤول النظام إيقاف تشغيل SQL Server وإعادة تشغيله ثم جعل الجدول غير موجود. تؤدي استضافة عدد كبير جدًا من الجداول إلى حدوث نفس المشكلة مثل استضافة الجداول الأكبر حجمًا من ذاكرة التخزين المؤقت.
مثال:
قم بتعريف @db_id int، @tbl_id int
استخدم DATABASE_NAME
Set @db_id = DB_ID('DATABASE_NAME')
Set @tbl_id = Object_ID('Department')
يمكنلـ DBCC pintable (@db_id, @tbl_id)
تعيين قسم الجدول ليكون ذاكرة- مقيم .
قم بتعريف @db_id int, @tbl_id int
استخدم DATABASE_NAME
Set @db_id = DB_ID('DATABASE_NAME')
Set @tbl_id = Object_ID('Department')
يمكنلـ DBCC UNpintable (@db_id, @tbl_id)
إلغاء تعيين قسم الجدول كمقيم في الذاكرة.
يمكنك استخدام أمر SQL التالي للكشف عن التنفيذ:
حدد ObjectProperty(Object_ID('Department'),'TableIsPinned')
إذا كانت نتيجة الإرجاع هي 1: فهذا يعني أنه تم تعيين الجدول ليكون موجودًا في الذاكرة؛ 0: فهذا يعني أنه لم يتم ضبطه على الذاكرة الاحتياطية.
2،
يمكن استخدام SP_TableOption لضبط قيم الخيارات للجداول المحددة من قبل المستخدم لتشغيل ميزة النص في الصف في الجداول التي تحتوي على أعمدة نصية أو نصية أو
صورية
sp_tableoption [ @TableNamePattern = ] 'جدول'
، [ @OptionName = ] 'option_name'
، [ @OptionValue = ] 'value'
حيث يكون لـ 'option_name' الاستخدام التالي:
pintable - عند التعطيل (الافتراضي)، فإنه يضع علامة على الجدول على أنه لم يعد مقيمًا في ذاكرة الوصول العشوائي (RAM). عند تمكينه، يتم وضع علامة على الجدول على أنه مقيم في ذاكرة الوصول العشوائي (RAM). (يمكن أن يكون الجدول المحدد مقيمًا في الذاكرة)
بالإضافة إلى ذلك، لا يتضمن قفل الجدول عند التحميل المجمع وقفل الصف المدرج والنص في الصف والقيم الاختيارية الأخرى جدولًا مقيمًا في الذاكرة لاستخدام محدد، يمكنك الاستعلام عن كتب SQL Server
القيمةعبر الإنترنت
لها الاستخدام التالي:
يتم تمكين option_name (صحيح، أو تشغيل، أو 1) أو معطل (خطأ، أو إيقاف، أو 0).
مثال:
EXEC sp_tableoption 'Department'، 'pintable'، 'true'
سيجعل قسم جدول البيانات موجودًا في الذاكرة.
EXEC sp_tableoption 'Department'، 'pintable'، 'false'
سوف يلغي قسم جدول البيانات الموجود في الذاكرة
..
يمكنك استخدام أمر SQL التالي للكشف عن التنفيذ:
حدد ObjectProperty(Object_ID('Department'),'TableIsPinned')
إذا كانت نتيجة الإرجاع هي 1: فهذا يعني أنه تم تعيين الجدول ليكون موجودًا في الذاكرة؛ 0: فهذا يعني أنه لم يتم ضبطه على الذاكرة الاحتياطية.
3. الاستنتاجات
عند تعيين جدول بيانات ليكون مقيمًا في الذاكرة، لا تتم قراءة الجدول فعليًا في الذاكرة حتى يتم استرداد الجدول. لذلك، يمكنك استخدام تعليمات SQL التالية لزيادة قسم جدول البيانات في الذاكرة:
حدد * من القسم
بالإضافة إلى ذلك، يمكنك استخدام تعليمات SQL التالية لعرض/اكتشاف كافة الجداول المعينة الموجودة في الذاكرة في قاعدة البيانات بسهولة:
SELECT * FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_TYPE = 'BASE TABLE'
AND OBJECTPROPERTY(object_id(TABLE_NAME), 'TableIsPinned' ) > 0