احسب سيناريو ذاكرة InnoDB والخادم باستخدام الإعدادات الفعلية. القيم المعبأة توضح خادماً بذاكرة 16 GiB وليست توصيات.
وحدات ثنائية: 1 GiB = 1024 MiB. يقبل البايت أو K/M/G/T مثل 268435456 أو 256M أو 8G. تتم الحسابات في متصفحك.
فعّل JavaScript لاستخدام الحاسبة. تبقى الشروحات والاستعلامات متاحة أدناه.
نتائج السيناريو
- ذاكرة InnoDB
- سيناريو الحمل
- ضغط عند max_connections
- هامش السيناريو
- التخصيصات العامة والحصص
- ذاكرة الاتصالات الأساسية
- مخازن الاستعلامات النشطة
- الجداول المؤقتة والكتل المحلية
- حصة خادم قاعدة البيانات
- ذاكرة InnoDB المرصودة حالياً
- ذاكرة RSS الحالية للعملية
تقدير وليس حداً أقصى مضموناً
قد يتجاوز الحمل وإعدادات الجلسة والتخصيص غير المرصود هذا النموذج. يحتفظ سيناريو الضغط بأعداد العمليات ويجعل جميع الاتصالات نشطة. تحقق من RSS وحدود cgroup وswap والذروة تحت حمل ممثل. ملفات redo/undo وinnodb_redo_log_capacity تخزين وليست تخصيصات RAM مكافئة.
المعادلات والافتراضات
C = الاتصالات؛ A = الاستعلامات النشطة؛ T = الجداول المؤقتة لكل استعلام. تُضاف الحصص مرة واحدة.
InnoDB = innodb_buffer_pool_size × (1 + overhead / 100) + innodb_log_buffer_size + dictionary + locks + transactions + adaptive_hash + compression + InnoDB_extra
G = InnoDB + key_buffer_size + aria_pagecache_buffer_size (MariaDB) + query_cache_size (MariaDB / MySQL 5.7) + other_global
B = thread_stack + 2 × net_buffer_length + max_digest_length + session_extra
Q = sort_buffer_size × sorts + join_buffer_size × joins + read_buffer_size × scans + read_rnd_buffer_size × random_reads + query_extra
Total = G + C × B + A × Q + Temp
Stress: C = A = max_connections
تقدير ذاكرة InnoDB بدقة
ذاكرة InnoDB أكبر من innodb_buffer_pool_size. تحسب الأداة المجمع وحصة قابلة للتعديل لهياكله وinnodb_log_buffer_size المشترك والتخصيصات الإضافية التي تدخلها. توثق MySQL ذاكرة إضافية تقارب 10% لهياكل المجمع؛ وتعتمد الحصة الفعلية على الإصدار والحمل، خصوصاً مع MariaDB. استخدم القيمة الفعلية للخادم الجاري فقد تختلف عن الإعداد المطلوب بعد تقريب حجم المجمع.
قد يضيف القاموس والفهرس التجزئي التكيفي والأقفال وهياكل المعاملات والضغط ذاكرة. أضف فقط التخصيصات غير المدرجة في المجمع أو حصته. سعة redo وملفات redo ومساحات undo تخزين قرصي وليست تخصيصات RAM مكافئة. لا يشمل مجموع InnoDB المحركات الأخرى أو Performance Schema أو مخازن الاتصالات والاستعلامات أو نظام التشغيل.
اجمع الإعدادات الفعلية
تقرأ العبارات التالية البيانات فقط. يتجاهل SHOW ... WHERE المتغيرات غير المدعومة. يشمل Threads_running استعلام القياس وهو لقطة مؤقتة؛ استخدم تزامناً ممثلاً وذروات مسجلة. يشير Max_used_connections إلى ذروة الاتصالات لا الاستعلامات النشطة. تحقق أيضاً من إعدادات جلسات التطبيق؛ فالجلسة الحالية لا تمثل جميع الجلسات.
SELECT VERSION();
SHOW GLOBAL VARIABLES WHERE Variable_name IN (
'innodb_buffer_pool_size', 'innodb_log_buffer_size', 'innodb_page_size',
'key_buffer_size', 'aria_pagecache_buffer_size', 'query_cache_size',
'max_connections', 'thread_handling', 'thread_stack', 'net_buffer_length',
'max_digest_length', 'max_allowed_packet', 'sort_buffer_size',
'join_buffer_size', 'read_buffer_size', 'read_rnd_buffer_size',
'tmp_table_size', 'max_heap_table_size', 'internal_tmp_mem_storage_engine',
'temptable_max_ram', 'temptable_max_mmap', 'temptable_use_mmap'
);
SHOW GLOBAL STATUS WHERE Variable_name IN (
'Threads_connected', 'Threads_running', 'Max_used_connections',
'Created_tmp_tables', 'Created_tmp_disk_tables',
'Innodb_buffer_pool_pages_total', 'Innodb_buffer_pool_pages_data',
'Innodb_buffer_pool_pages_free'
);
SHOW SESSION VARIABLES WHERE Variable_name IN (
'sort_buffer_size', 'join_buffer_size', 'read_buffer_size',
'read_rnd_buffer_size', 'tmp_table_size', 'max_heap_table_size',
'internal_tmp_mem_storage_engine', 'max_allowed_packet'
);
SHOW ENGINE INNODB STATUS;
قس ذاكرة InnoDB والعملية
إذا وفر الإصدار جدول ذاكرة Performance Schema وكانت أدوات رصد InnoDB مفعلة، افحص التخصيصات الحالية. تختلف التغطية حسب الإصدار ولا يعيد تفعيل العدادات لاحقاً بناء جميع التخصيصات السابقة. غياب الصفوف أو وجود أصفار لا يثبت انعدام استخدام الذاكرة. لا تجمع ذروات الأدوات الفردية لاستنتاج ذروة متزامنة. أدخل المجموع الحالي في حقل قياس InnoDB الاختياري؛ يبقى منفصلاً عن النموذج.
SELECT EVENT_NAME,
ROUND(CURRENT_NUMBER_OF_BYTES_USED / 1048576, 2) AS current_mib,
ROUND(HIGH_NUMBER_OF_BYTES_USED / 1048576, 2) AS high_mib
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/innodb/%'
ORDER BY CURRENT_NUMBER_OF_BYTES_USED DESC;
SELECT ROUND(SUM(CURRENT_NUMBER_OF_BYTES_USED) / 1048576, 2)
AS instrumented_innodb_mib
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/innodb/%';
في Linux تكون RSS أدناه بوحدة KiB؛ استخدم اللاحقة K أو اقسم على 1024 للحصول على MiB. تغطي RSS العملية كاملة. ضع في الحسبان حدود cgroup وذاكرة النظام المؤقتة والذاكرة المحتفظ بها لدى المخصص والخدمات الأخرى.
ps -C mariadbd,mysqld -o pid=,rss=,comm=
قواعد الجداول المؤقتة والحدود العملية
في MariaDB وMySQL عند استخدام MEMORY يحد الأصغر من tmp_table_size وmax_heap_table_size كل جدول مؤقت داخلي. قد تتعايش جداول ومخازن ربط متعددة داخل استعلام واحد. يطبق النموذج الأعداد المختارة على الاستعلامات النشطة ولا يخصص جميع المخازن لكل اتصال خامل.
في MySQL TempTable يُشارك حد temptable_max_ram بين الجلسات. ابتداءً من 8.0.28 يحد tmp_table_size أيضاً كل جدول منفرد؛ يستخدم النوع الأقدم الحد المشترك فقط. تقع الكتل المحلية خارج حد RAM وقد تبقى حتى انتهاء الخيط. يحجز النموذج كتلة لكل اتصال وقد تتجاوز الكتلة مثال 1 MiB. قد تضيف ملفات mmap صفحات مقيمة؛ حد حجم الملف ليس تخصيص RAM مكافئاً.
يجعل سيناريو الضغط جميع اتصالات max_connections نشطة بالشكل نفسه للاستعلام. ليس حداً أقصى مضموناً. أضف حصصاً لجداول المستخدم MEMORY ونمو مخازن الشبكة وSQL/BLOB وbinlog والنسخ المتماثل والعبارات المحضرة وذاكرة الخيوط والتخصيصات الأخرى. تحقق من النموذج مقارنة بذروات العملية تحت حمل ممثل. لا يفرض التقدير أو هدف الضبط سقفاً للذاكرة.
المصادر والتحقق
تم التحقق في 13 أكتوبر 2026. تستند الشروحات الأصلية إلى Releem وأدلة الخوادم. يذكر مثال Releem مئتي اتصال وحدود 32 MiB ثم يضرب في 16 MB. النتيجة المتسقة لجدول واحد لكل اتصال هي 6400 MiB = 6.25 GiB. قواعد المحرك المحدد لها الأولوية على المعادلة العامة.