إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يتم تحديد جودة مجموعة الصفوف بعدد الصفوف في مجموعة الصفوف. زيادة الذاكرة المتاحة يمكن أن تعظم عدد الصفوف التي يضغطها مؤشر مخزن الأعمدة في كل مجموعة صفوف. استخدم هذه الطرق لتحسين معدلات الضغط وأداء الاستعلام لفهارس متاجر الأعمدة.
لماذا حجم مجموعة الصفوف مهم
نظرا لأن مؤشر مخزن الأعمدة يمسح الجدول عن طريق مسح أجزاء أعمدة مجموعات الصفوف الفردية، فإن تعظيم عدد الصفوف في كل مجموعة صفوف يعزز أداء الاستعلام. عندما تحتوي مجموعات الصفوف على عدد كبير من الصفوف، يتحسن ضغط البيانات مما يعني أن هناك بيانات أقل للقراءة من القرص.
لمزيد من المعلومات حول مجموعات الصفوف، راجع دليل فهارس Columnstore.
الحجم المستهدف لمجموعات الصفوف
للحصول على أفضل أداء للاستعلام، الهدف هو تعظيم عدد الصفوف لكل مجموعة صفوف في مؤشر مخزن الأعمود. يمكن أن يكون الحد الأقصى لمجموعة الصفوف 1,048,576 صفا. لا بأس ألا يكون لديك الحد الأقصى لعدد الصفوف في كل مجموعة صفوف. تحقق مؤشرات Columnstore أداء جيدا عندما تحتوي مجموعات الصفوف على ما لا يقل عن 100,000 صف.
يمكن تقليم مجموعات الصف أثناء الضغط
أثناء إعادة تحميل جماعي أو إعادة بناء مؤشر تخزين الأعمود، أحيانا لا تتوفر ذاكرة كافية لضغط جميع الصفوف المخصصة لكل مجموعة صفوف. عندما يكون هناك ضغط في الذاكرة، تقوم مؤشرات columnstore بتقليص أحجام مجموعات الصفوف حتى يتمكن الضغط من خلال الضغط في مخزن الأعمدة (columnstore).
عندما لا تكون هناك ذاكرة كافية لضغط ما لا يقل عن 10,000 صف في كل مجموعة صفوف، يتم توليد خطأ.
لمزيد من المعلومات حول التحميل بالجملة، انظر تحميل الجملة في فهرس مخزن الأعمدة المجمع.
كيفية مراقبة جودة مجموعة الصفوف
عرض الإدارة الديناميكي (DMV) (sys.dm_db_column_store_row_group_physical_stats يحتوي على تعريف العرض الذي يطابق قاعدة بيانات SQL) الذي يكشف معلومات مفيدة مثل عدد الصفوف في مجموعات الصفوف وسبب التقليم إذا كان هناك تقليم. يمكنك إنشاء العرض التالي كطريقة مفيدة للاستفسار من إدارة المرور للحصول على معلومات حول تقليم مجموعات الصفوف.
CREATE VIEW dbo.vCS_rg_physical_stats
AS
WITH cte
AS
(
select tb.[name] AS [logical_table_name]
, rg.[row_group_id] AS [row_group_id]
, rg.[state] AS [state]
, rg.[state_desc] AS [state_desc]
, rg.[total_rows] AS [total_rows]
, rg.[trim_reason_desc] AS trim_reason_desc
, mp.[physical_name] AS physical_name
FROM sys.[schemas] sm
JOIN sys.[tables] tb ON sm.[schema_id] = tb.[schema_id]
JOIN sys.[pdw_table_mappings] mp ON tb.[object_id] = mp.[object_id]
JOIN sys.[pdw_nodes_tables] nt ON nt.[name] = mp.[physical_name]
JOIN sys.[dm_pdw_nodes_db_column_store_row_group_physical_stats] rg ON rg.[object_id] = nt.[object_id]
AND rg.[pdw_node_id] = nt.[pdw_node_id]
AND rg.[distribution_id] = nt.[distribution_id]
)
SELECT *
FROM cte;
يشير العمود trim_reason_desc إلى ما إذا كانت مجموعة الصفوف قد تم تقليمها (trim_reason_desc = NO_TRIM يعني عدم وجود تقليم وأن مجموعة الصفوف ذات جودة مثالية). تشير أسباب التشطيم التالية إلى تقليم مبكر لمجموعة الصفوف:
- التحميل الضخم: يستخدم هذا السبب عندما يكون عدد الصفوف القادمة للحمل أقل من مليون صف. يقوم المحرك بإنشاء مجموعات صفوف مضغوطة إذا كان هناك أكثر من 100,000 صف يتم إدخاله (بدلا من إدخاله في مخزن دلتا)، لكنه يضبط سبب التريم على BULK LOAD. في هذا السيناريو، فكر في زيادة حمل الدفعات لتشمل المزيد من الصفوف. أيضا، أعد تقييم نظام التقسيم الخاص بك للتأكد من أنه ليس دقيقا جدا لأن مجموعات الصفوف لا يمكن أن تمتد عبر حدود التقسيم.
- MEMORY_LIMITATION: لإنشاء مجموعات صفوف تحتوي على مليون صف، يتطلب المحرك كمية معينة من الذاكرة العاملة. عندما تكون الذاكرة المتاحة لجلسة التحميل أقل من الذاكرة العاملة المطلوبة، يتم تقليم مجموعات الصفوف مبكرا. تشرح الأقسام التالية كيفية تقدير الذاكرة المطلوبة وتخصيص المزيد من الذاكرة.
- DICTIONARY_SIZE: يشير هذا السبب إلى أن تقليم مجموعة الصفوف حدث لأن هناك عمودا واحدا على الأقل من الوتر مع سلاسل عريضة و/أو ذات كاردينالية عالية. حجم القاموس محدود ب 16 ميجابايت في الذاكرة، وبمجرد الوصول إلى هذا الحد يتم ضغط مجموعة الصفوف. إذا واجهت هذا الموقف، فكر في عزل العمود المسبب للمشكلة في جدول منفصل.
كيفية تقدير متطلبات الذاكرة
الحد الأقصى للذاكرة المطلوبة لضغط مجموعة صفوف واحدة هو، تقريبا، كما يلي:
- 72 ميجابايت +
- #rows * #columns * 8 بايت +
- #rows * #short سلاسل أعمدة * 32 بايت +
- #long-string-columns * 16 ميجابايت لقاموس الضغط
ملاحظة
حيث تستخدم الأعمدة القصيرة السلاسل أنواع بيانات سلاسل = <32 بايت، والأعمدة الطويلة السلاسل تستخدم أنواع بيانات سلاسل بحجم > 32 بايت.
يتم ضغط السلاسل الطويلة بطريقة ضغط مصممة لضغط النص. تستخدم طريقة الضغط هذه قاموسا لتخزين أنماط النصوص. الحد الأقصى لحجم القاموس هو 16 ميجابايت. هناك قاموس واحد فقط لكل عمود سلاسل طويلة في مجموعة الصفوف.
طرق لتقليل متطلبات الذاكرة
استخدم التقنيات التالية لتقليل متطلبات الذاكرة لضغط مجموعات الصفوف إلى مؤشرات columnstore.
استخدم أعمدة أقل
إذا أمكن، صمم الجدول بأعمدة أقل. عند ضغط مجموعة صفوف في مخزن الأعمود، يقوم مؤشر مخزن الأعمدة بضغط كل جزء من العمود بشكل منفصل. لذلك تزداد متطلبات الذاكرة لضغط مجموعة صفوف مع زيادة عدد الأعمدة.
استخدم أعمدة سلاسل أقل
أعمدة أنواع بيانات السلاسل تتطلب ذاكرة أكثر من أنواع البيانات الرقمية والتاريخية. لتقليل متطلبات الذاكرة، فكر في إزالة أعمدة السلاسل من جداول الحقائق ووضعها في جداول ذات أبعاد أصغر.
متطلبات إضافية للذاكرة لضغط السلاسل النصية:
- أنواع بيانات السلاسل التي تصل إلى 32 حرفا قد تتطلب 32 بايت إضافية لكل قيمة.
- أنواع بيانات السلاسل التي تزيد عن 32 حرفا تضغط باستخدام طرق القاموس. كل عمود في مجموعة الصفوف قد يتطلب ما يصل إلى 16 ميجابايت إضافية لبناء القاموس.
تجنب التقسيم الزائد
تخلق فهارس Columnstore مجموعة صفوف واحدة أو أكثر لكل قسم. بالنسبة لتخزين البيانات في Azure Synapse Analytics، يزداد عدد الأقسام بسرعة لأن البيانات موزعة وكل توزيع مقسم. إذا كان الجدول يحتوي على عدد كبير جدا من التقسيمات، فقد لا يكون هناك عدد كاف من الصفوف لملء مجموعات الصفوف. عدم وجود صفوف لا يخلق ضغطا على الذاكرة أثناء الضغط، لكنه يؤدي إلى مجموعات صفوف لا تحقق أفضل أداء لاستعلام مخزن الأعمود.
سبب آخر لتجنب التقسيم الزائد هو وجود عبء ذاكرة لتحميل الصفوف في فهرس مخزن الأعمدة على جدول مقسم. أثناء التحميل، يمكن للعديد من الأقسام استقبال الصفوف الواردة، والتي تحفظ في الذاكرة حتى يكون لكل قسم عدد كاف من الصفوف للضغط. وجود عدد كبير جدا من الأقسام يخلق ضغطا إضافيا على الذاكرة.
تبسيط استعلام التحميل
تشارك قاعدة البيانات منحة الذاكرة للاستعلام بين جميع المشغلات في الاستعلام. عندما يكون لاستعلام التحميل فرز وربط مركب، تقل الذاكرة المتاحة للضغط.
صمم استعلام التحميل بحيث يركز فقط على تحميل الاستعلام. إذا كنت بحاجة لتشغيل تحويلات على البيانات، قم بتشغيلها بشكل منفصل عن استعلام التحميل. على سبيل المثال، قم بترتيب البيانات في جدول كومة، وتشغيل التحويلات، ثم تحميل جدول المراحل في مؤشر مخزن الأعمود.
ضبط MAXDOP
كل توزيع يضغط مجموعات الصفوف داخل مخزن الأعمدة بالتوازي عندما يكون هناك أكثر من نواة وحدة معالجة مركزية متاحة لكل توزيعة. يتطلب التوازي موارد ذاكرة إضافية، مما قد يؤدي إلى ضغط الذاكرة وتقليم مجموعات الصفوف.
لتقليل ضغط الذاكرة، يمكنك استخدام تلميح استعلام MAXDOP لإجبار عملية التحميل على العمل في الوضع التسلسلي داخل كل توزيعة.
CREATE TABLE MyFactSalesQuota
WITH (DISTRIBUTION = ROUND_ROBIN)
AS SELECT * FROM FactSalesQuota
OPTION (MAXDOP 1);
طرق تخصيص المزيد من الذاكرة
حجم وحدة DWU وفئة موارد المستخدم معا يحددان مقدار الذاكرة المتاحة لاستعلام المستخدم. لزيادة منحة الذاكرة لاستعلام التحميل، يمكنك إما زيادة عدد وحدات DWU أو زيادة فئة الموارد.
- لزيادة وحدات DWUs، انظر كيف أقوم بتوسيع الأداء؟
- لتغيير فئة الموارد لاستعلام، راجع مثال تغيير فئة مورد المستخدم.
الخطوات التالية
للعثور على المزيد من الطرق لتحسين الأداء في Synapse SQL، راجع نظرة عامة على الأداء.