ANALYZE وpg_statistic
حافظ على حداثة إحصاءات المخطط باستخدام ANALYZE، وافحص pg_statistic، واستخدم الإحصاءات الموسعة للأعمدة المترابطة
ANALYZE وpg_statistic درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
لماذا ANALYZE؟
يحتاج مخطط الاستعلامات إلى تقدير أعداد الصفوف وانتقائيتها لاختيار خطة جيدة. وتأتي هذه التقديرات من إحصاءات لكل عمود يجمعها ANALYZE.
متى تشغّل ANALYZE
يشغّل Autovacuum عملية ANALYZE تلقائياً استناداً إلى حدود تغيّر الصفوف. وبعد عمليات التحميل الكبيرة أو عمليات DELETE الواسعة، شغّله يدوياً حتى لا تتدهور الخطط:
ANALYZE orders;
ANALYZE (VERBOSE) orders;أخذ العينات
يأخذ ANALYZE عينات من بضع مئات من الصفوف لكل عمود. اضبط هدف الإحصاءات إذا كانت القيم الافتراضية تعطي تقديرات سيئة:
ALTER TABLE orders ALTER COLUMN customer_id SET STATISTICS 1000;
-- Up from default 100. ANALYZE will sample more rows.pg_statistic
كتالوج النظام الذي تُخزّن فيه الإحصاءات (استخدم طريقة العرض pg_stats لسهولة القراءة):
SELECT attname, n_distinct, most_common_vals, most_common_freqs, histogram_bounds
FROM pg_stats
WHERE schemaname = 'public' AND tablename = 'orders';ما الذي يفحصه المخطط
- n_distinct — عدد القيم المميزة
- most_common_vals — القيم الأكثر شيوعاً وتكراراتها
- histogram_bounds — نطاقات للاستعلامات ذات النطاق
- correlation — الترتيب الفيزيائي مقارنة بالترتيب المنطقي (يؤثر في تكلفة المسح)
الإحصاءات الموسعة
لا تلتقط إحصاءات الأعمدة المنفردة الارتباطات بين الأعمدة. وتلتقطها CREATE STATISTICS:
CREATE STATISTICS orders_country_status (dependencies)
ON country, status FROM orders;
ANALYZE orders;
-- Now the planner knows that country='US' AND status='paid' is correlated
-- (e.g. most US orders happen to be 'paid').أنواع الإحصاءات متعددة المتغيرات
dependencies— التبعيات الوظيفية (يتنبأ أحد الأعمدة بالآخر)ndistinct— تركيبات القيم المميزةmcv— القيم المركبة الأكثر شيوعاً (في PG 12 والإصدارات الأحدث)
تقديرات سيئة ← خطط سيئة
السبب الأكثر شيوعاً لسؤال "لماذا استعلامي بطيء؟" هو سوء تقدير عدد الصفوف. يختار المخطط Nested Loop لأنه يتوقع صفاً واحداً، بينما الواقع هو 1,000,000 صف.
EXPLAIN ANALYZE SELECT * FROM ... ;
-- Look at Plan rows vs actual rows. Big gap = run ANALYZE or add extended stats.فرض ANALYZE في عمليات الترحيل
بعد تحميل كبير للبيانات:
COPY users FROM ... ;
ANALYZE users;
-- Without ANALYZE, the planner has no idea the table just grew.الإحصاءات لا تتحدث تلقائياً عند انحراف البيانات
إذا كانت بيانات اليوم مختلفة جذرياً عن بيانات الأمس، فقد تظل الإحصاءات قديمة إلى أن تبدأ autoanalyze بالعمل. نفّذ ANALYZE يدوياً بعد تغيّر شكل البيانات.
pg_class.reltuples
يستخدم المخطط أيضاً عدداً مقدّراً للصفوف من pg_class. ويُحدّث هذا العدد بواسطة VACUUM وANALYZE. ويمكن التحقق منه بسرعة:
SELECT relname, reltuples FROM pg_class WHERE relname = 'orders';مراجعة
يغذّي ANALYZE مخطط الاستعلامات.
- شغّله بعد التغييرات الكبيرة على البيانات
- زد هدف STATISTICS للأعمدة المنحرفة
- استخدم CREATE STATISTICS لالتقاط الارتباطات بين الأعمدة
- الفجوة الكبيرة بين التقدير والواقع = أول ما ينبغي إصلاحه
تحقق سريع
يعرض EXPLAIN ANALYZE estimated rows=1، لكن actual rows=500,000، في شرط WHERE على عمود واحد. ما أول إصلاح ينبغي تنفيذه؟
الأسئلة الشائعة
هل درس «ANALYZE وpg_statistic» مجاني؟
نعم — نص درس «ANALYZE وpg_statistic» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «ANALYZE وpg_statistic»؟
حافظ على حداثة إحصاءات المخطط باستخدام ANALYZE، وافحص pg_statistic، واستخدم الإحصاءات الموسعة للأعمدة المترابطة تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «ANALYZE وpg_statistic»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- MVCC وأسباب التضخم
- VACUUM وautovacuum وvacuum_cost_delay
- ANALYZE وpg_statistic
- الفحص باستخدام الفهرس فقط وخريطة الرؤية