لاحظنا تحسناً واضحاً أثناء اختبارات الأداء في PmaControl: انخفض متوسط زمن فحص الذاكرة المؤقتة الكامل نفسه من 8.112 إلى 2.015 مللي ثانية بين بنائي ProxySQL 2.7.3 و3.0.5 اللذين اختبرناهما. هذا يعني وقتاً أقل بنسبة 75.16%، أي أن متوسط الزمن أصبح أقصر بمقدار 4.03 مرات.
ننشر الأرقام وتعريفها والاستعلامات ومنهجية القياس لتوضيح معنى هذه النتيجة بدقة. المهمة المقاسة هي فحص فعالية الذاكرة المؤقتة الذي ينفذه PmaControl عبر واجهة Admin في ProxySQL.
النتائج عند تنفيذ العمل نفسه
| المقياس | ProxySQL 2.7.3 | ProxySQL 3.0.5 | انخفاض الزمن |
|---|---|---|---|
| المتوسط, ms/audit | 8.112204 | 2.014760 | 75.16 % |
| وسيط متوسطات الدفعات, ms/audit | 7.895812 | 2.053810 | 73.99 % |
| أكبر متوسط للدفعات, ms/audit | 11.914402 | 2.919234 | 75.50 % |
| ذروة الذاكرة المخصصة لـ PHP بوحدة MiB | 4 | 4 | دون تغيير |
الأزمنة في الجدول بوحدة ms/audit، أي مللي ثانية لكل تدقيق، باستثناء مقياس الذاكرة. يُحسب الوسيط والحد الأقصى من 15 متوسطاً لدفعات تحتوي كل منها على 10 عمليات تدقيق. لذلك لا يمثل الحد الأقصى أبطأ استدعاء فردي ولا إحدى النسب المئينية لزمن الاستجابة. تحتفظ ملفات البيانات بالدقة الأصلية، بينما يقرّب الرسم الأزمنة إلى ثلاث منازل عشرية.
تشير ذروة 4 MiB إلى الذاكرة المخصصة لعملية PHP، ولا تقيس استهلاك خادم ProxySQL للذاكرة.

ماذا تعني وحدة ms/audit
يعني التدقيق هنا استدعاءً كاملاً واحداً للدالة QueryCacheEffectiveness::run()، وليس جميع الفحوص الخاصة بالخادم. ينفذ الفحص استعلامي SELECT للقراءة فقط: يقرأ الأول قواعد التخزين المؤقت النشطة وعدادات مطابقتها، ويقرأ الثاني عدادات الذاكرة المؤقتة والحجم المضبوط. تعيد بيانات الاختبار صفاً واحداً ثم سبعة صفوف.
يشمل المؤقت فحص PHP بالكامل: تنفيذ استعلامات SQL الأصلية، والاتصال عبر loopback، وجلب النتائج ومعالجتها في PmaControl. يبقى إنشاء الاتصال الأولي وتشغيل عملية PHP وHTTP وعرض الواجهة خارج نافذة القياس. هذه أزمنة مرصودة من جهة العميل، ولا تعزل زمن التنفيذ الداخلي في ProxySQL.
فيما يلي الاستعلامان مع تنسيق يسهل قراءتهما. المنطق نفسه مستخدم في كلا الإصدارين.
SELECT r.rule_id, r.cache_ttl, r.digest,
r.match_digest, r.match_pattern,
COALESCE(h.hits, 0) AS hits
FROM runtime_mysql_query_rules r
LEFT JOIN stats_mysql_query_rules h
ON h.rule_id = r.rule_id
WHERE r.active = 1 AND r.cache_ttl > 0
ORDER BY r.rule_id;
SELECT Variable_Name AS name, Variable_Value AS value
FROM stats_mysql_global
WHERE Variable_Name IN (
'Query_Cache_count_GET', 'Query_Cache_count_GET_OK',
'Query_Cache_count_SET', 'Query_Cache_Memory_bytes',
'Query_Cache_Entries', 'Query_Cache_Purged'
)
UNION ALL
SELECT variable_name, variable_value
FROM global_variables
WHERE variable_name = 'mysql-query_cache_size_MB';
يحسب الحقل stats_mysql_query_rules.hits مرات مطابقة القاعدة، وليس إصابات الذاكرة المؤقتة المنسوبة إلى تلك القاعدة. عدادات الذاكرة المؤقتة تراكمية ولا تكفي وحدها لتحديد معدل إصابات حديث. القيمة mysql-query_cache_size_MB المقروءة من MAIN هي هدف مضبوط لعملية التنظيف وليست حداً صارماً؛ ولا يتحقق هذا الفحص من قيمتها في runtime.
منهجية اختبار الأداء
استخدم اختبار المصدر آلة افتراضية مشتركة للاختبار تعمل بنظام Ubuntu 24.04.4 LTS، مع 2 vCPU و4 GiB من RAM وPHP 8.4.26. استخدمت الاتصالات loopback وبنائي ProxySQL الأصليين التاليين:
2.7.3-12-g50b7f85لسلسلة 2.7؛3.0.5-60-g7e9e009لسلسلة 3.0.
تتضمن البيانات المنشورة لكل إصدار 15 دفعة من 10 عمليات تدقيق مقاسة، بعد 3 استدعاءات للإحماء لكل دفعة: أي 150 عملية تدقيق كاملة لكل إصدار، و300 إجمالاً، و600 استعلام SELECT. كود PHP المساعد ونصوص SQL متطابقة؛ وتُفحص بصمة الكود وأعداد الصفوف المعادة في كل دفعة واستدعاء.
تناوبت التجربة الأصلية بين نسختي PmaControl القديمة والمصححة في 15 زوجاً من نوع AB/BA، مع عملية PHP منفصلة لكل نسخة. تختار هذه المقالة النسخة المصححة فقط. داخل كل عملية اختُبر ProxySQL 2.7.3 قبل 3.0.5: لم يتناوب ترتيب إصداري ProxySQL. الأعداد البالغة 600 استدعاء و900 SELECT في التجربة الكاملة، التي تشمل النسخة القديمة، ليست أحجام عينات المقارنة المعروضة هنا.
لماذا نقارن الفحص الكامل
رافق الاختبار إصلاحاً وظيفياً: كانت قاعدة صالحة ذات معرّف بإشارة rule_id=-1 وTTL مقداره 5,000 مللي ثانية تؤدي سابقاً إلى إيقاف الفحص بعد القراءة الأولى. كان الفحص يبلغ خطأً عن عدم توفر الإحصاءات، ولم يكن يصل إلى الاستعلام الثاني.
مقارنة تلك النتيجة الناقصة بالفحص المصحح تعني مقارنة مقدارين مختلفين من العمل. لذلك نستخدم الكود المساعد المصحح نفسه على إصداري ProxySQL، مع القراءتين والملاحظات الكاملة. التحسن المنشور يقارن بنيتي ProxySQL في هذا السيناريو، ولا يُنسب إلى إصلاح التحقق في PmaControl. أُعيد التحقق من القياسات الموجودة، ولم نشغّل اختبار أداء جديداً من أجل هذه المقالة.
ما الذي يمكن استنتاجه من هذا التحسن
في هذه البيئة، كان المتوسط ووسيط متوسطات الدفعات وأكبر متوسط للدفعات أقل على بناء 3.0 المختبر. بقيت ذروة الذاكرة المخصصة لـ PHP دون تغيير. إنه تحسن قابل للقياس في مهمة مراقبة.
تخص النتيجة آلة افتراضية مشتركة ومجموعات نتائج صغيرة وفحصاً محدداً. وهي لا تثبت معدل معالجة استعلامات التطبيقات أو تأخر توجيه frontend أو تحقق التحسن نفسه تحت تزامن مرتفع. لا يفصل الاختبار مراحل الخادم prepare/step/copy/finalize، ولا يثبت زمناً لـ SQL دون 1 مللي ثانية، ولا يقيّم سعة الإنتاج أو متانة حفظ البيانات. لم يُحدد مجال ثقة إحصائي، وترتيب الإصدارات ثابت.
ضمن هذا النطاق، استغرق فحص الذاكرة المؤقتة الكامل في المتوسط نحو ربع الزمن. تحسن جميل يا ProxySQL!
إعادة حساب النتائج
تحتوي البيانات العامة على الدفعات الثلاثين المختارة، و300 مدة فردية، وأعداد الصفوف وبيانات المنهجية. أزيلت المسارات الداخلية والرسائل التشخيصية، وبقيت القياسات دون تغيير. يستخدم سكربت Python المكتبة القياسية فقط لإعادة حساب الجدول، ولا يعيد تشغيل اختبار الأداء.
يُحسب انخفاض الزمن بالصيغة 100 × (1 − time_3.0 / time_2.7)، والنسبة بالصيغة time_2.7 / time_3.0. جميع الدفعات متساوية الحجم. تحدد البصمة أدناه الكود المساعد الذي حُمّل فعلياً؛ ويشير commit إلى مراجعة طلب الدمج التي تحتوي على هذا التنفيذ.
curl -fsSLO https://pmacontrol.com/downloads/proxysql-2.7-vs-3.0/benchmark-data.json
curl -fsSLO https://pmacontrol.com/downloads/proxysql-2.7-vs-3.0/analyze.py
python3 analyze.py benchmark-data.json
PmaControl revision:
b4e7b4c6ca72cf27077ddbdb1f2c89af05800b5a
QueryCacheEffectiveness helper SHA-256:
c47a169935f665259554bd0fbaa85e90af9cbcd3983bf7ad3548e2caaf63d4dc
الرسوم والمشاركة والمصادر
- الرسم الكامل بصيغة PNG بأبعاد 1600 × 2000
- مصدر SVG قابل للتعديل يتضمن جميع العناصر
- بيانات اختبار الأداء بصيغة JSON
- سكربت Python لإعادة الحساب
- منشور LinkedIn باللغة الإنجليزية
- أرشيف الرسوم وسكربتات إنشائها
الرسم باللغة الإنجليزية لتسهيل مشاركته، وتعرض هذه المقالة جميع تفسيراته وقياساته. يتيح زر PDF في الصفحة أيضاً تصدير المقالة مع صورها.
العمل الأصلي: طلب دمج PmaControl رقم 6389 وتذكرة النشر رقم 6390. تتطلب روابط Forgejo هذه صلاحية الوصول إلى المستودع، بينما الملفات القابلة للتنزيل أعلاه عامة.
تعليقات (0)
لا توجد تعليقات حتى الآن.
اترك تعليقا