ملخص
MySQL هو نظام لإدارة قواعد بيانات العلاقات تم تطويره باستخدام لغات برمجة C وC، تم إنشاؤه بواسطة MySQL AB، التي أسسها David Axmark وAllan Larsson وMichael Widenius. الإصدار الأحدث هو MySQL 9.0.
MySQL هو مشروع مفتوح المصدر بترخيص GNU.
يعد MySQL نظام إدارة قواعد البيانات الأكثر شهرة وإفادة الآن لأنه مفتوح المصدر، ويحتوي على ميزات كاملة، وأداء عالٍ.
بنيان
طبقة العميل
- الطبقة الأولى من بنية نظام MySQL.
- الخدمات المهمة لهذه الطبقة هي معالجة الاتصال والمصادقة والأمان.
- التعامل مع الاتصال: إدارة الاتصالات من العملاء. عندما يريد العميل الاتصال بخادم MySQL، يتم إنشاء موضوع جديد للاتصال. يقوم الخادم بتخزين سلاسل الرسائل مؤقتًا عند إنشاء اتصالات جديدة.
- المصادقة: عندما يتصل العميل بالخادم، يجب عليه توفير معلومات المصادقة لإنشاء اتصال. عادةً، يقوم العملاء بالمصادقة باستخدام اسم مستخدم وكلمة مرور.
- الأمان: يوفر MySQL العديد من الميزات لحماية قاعدة البيانات والتحقق من أذونات المستخدم بعد المصادقة.
طبقة الخادم
- الطبقة التالية من MySQL مسؤولة عن معالجة عبارات الاستعلام وتوفير العديد من الأدوات المساعدة.
- الميزات الرئيسية:
- المحلل اللغوي: عندما يطلب العميل عبارة استعلام، يقوم الخادم بتحليلها لإنشاء شجرة استعلام، وإعادة كتابة الاستعلام، وتحديد الترتيب والفهارس التي سيتم استخدامها لتنفيذ عبارة الاستعلام.
- المُحسِّن: يعمل على تحسين عبارة الاستعلام قبل التنفيذ. لا يهتم المُحسِّن بالمحرك المستخدم، ولكن يمكن لمحرك التخزين أن يؤثر على عملية التحسين لاستعلام محدد.
- ذاكرة التخزين المؤقت للاستعلام: تقوم ذاكرة التخزين المؤقت للاستعلام بتخزين نتيجة عبارة الاستعلام. إذا طلب العميل نفس الاستعلام مرة أخرى، فسيقوم الخادم بإرجاع النتيجة المخزنة مؤقتًا، متجاوزًا خطوات التحليل والتحسين. تم إهمال هذه الميزة في الإصدار 8.0 أو أعلى بسبب مشكلة عنق الزجاجة.
- الخدمات والمرافق:
- النسخ الاحتياطي والاستعادة
- الأمان: مستخدم الموفر ونظام الأذونات
- النسخ المتماثل: هذه عملية لنسخ ومزامنة البيانات من الخادم الرئيسي إلى العديد من الخوادم الفرعية.
- تَجَمَّع
- التقسيم: تقسيم الجدول إلى عدة أجزاء باستخدام منطق محدد.
- Workbench: هي أداة مرئية مصممة للتفاعل مع MySQL واستخدامها.
طبقة التخزين
- إنها طبقة من المسؤولية عن الطريقة التي نخزن بها البيانات في قاعدة البيانات.
- افتراضيًا، يستخدم MySQL محرك التخزين InnoDB.
- يدعم MySQL العديد من محركات التخزين المختلفة:
- InnoDB (افتراضي)
- MyISAM
- ذاكرة
- ملف CSV
- أرشيف
- الثقب الأسود
- دمج
- المتحدة
تحسين الأداء لـ MySQL
تحسين بيان SQL
شرح البيان
- توقع الاستعلام بدون تنفيذ
explain sql_statememnt
- شرح الاستعلام بعد التنفيذ
explain analyze sql_statement
تقنية الفهرسة
- يقوم بترقية الأداء عند الاستعلام والبحث.
- عند إنشاء فهرس لعدة أعمدة، يكون العمود الأول مهمًا جدًا. يقرر أداء بيان الاستعلام. على سبيل المثال، إذا قمت بإنشاء فهرس على (الاسم، تاريخ الميلاد)، فإن الاستعلام الذي يستخدم عمود "الاسم" سوف يستخدم هذا الفهرس، ولكن الاستعلام الذي يستخدم عمود "عيد الميلاد" لن يستخدمه.
- بناء جملة إنشاء فهرس جديد:
create index idx_birthday on customers(birthday);
- سيؤدي الأمر إلى جعل الفهرس المحدد غير قابل للوصول إلى مُحسِّن الاستعلام، وبالتالي يمنع اعتباره في خطط تنفيذ الاستعلام:
alter table customers alter index idx_birthday invisible;
تقسيم
- عندما يكون حجم قاعدة البيانات أكبر من 2 غيغابايت (أو أكثر من 10 ملايين سجل)، يجب عليك استخدام التقسيم لقاعدة البيانات هذه.
- عند استخدام التقسيم، سوف يتحسن الأداء.
- يجب أن تعتمد خطة التقسيم على العمود الذي يتم استخدامه بشكل متكرر في عبارات WHERE.
تحسين معلمات قاعدة البيانات
ضرب ذاكرة التخزين المؤقت
- إنها النسبة المئوية للبيانات التي يقوم النظام بتحميلها من ذاكرة التخزين المؤقت بدلاً من التخزين الفعلي.
- إذا كانت النسبة أقل من 90% فيجب عليك تحسينها.
- تعتمد على معلمتين:
-
Innodb_buffer_pool_read_requests: تم إرسال إجمالي الطلب إلى Buffer Pool. الأمر: إظهار الحالة العامة مثل '%Innodb_buffer_pool_read_requests%
-
Innodb_buffer_pool_reads: يجب قراءة إجمالي الطلبات التي لم يتم العثور عليها في تجمع المخزن المؤقت في الذاكرة من القرص. الأمر: إظهار الحالة العامة مثل '%Innodb_buffer_pool_reads%
- صيغة الحساب:
(Innodb_buffer_pool_read_requestss - Innodb_buffer_pool_reads) x100 / Innodb_buffer_pool_read_requests
ضرب ذاكرة التخزين المؤقت للجدول
- سيقوم MySQL بتخزين الجدول مؤقتًا للاستعلام عنه بسرعة في الذاكرة.
- إذا كانت النسبة أقل من 80% فيجب عليك تحسينها.
- تعتمد على معلمتين:
-
Open_tables: يتم فتح إجمالي الجداول في ذاكرة التخزين المؤقت. الأمر: إظهار الحالة العامة مثل "Open_tables
-
Opened_tables: يتم فتح إجمالي الجداول. الأمر: إظهار الحالة العامة مثل "Opened_tables
- صيغة الحساب: Open_tables/Opened_tables
ضرب ذاكرة التخزين المؤقت لتعريف الجدول
- عند تنفيذ استعلام، تتطلب MySQL معلومات حول الجدول، مثل اسمه وعدد الأعمدة وعدد الصفوف. ويشار إلى هذه المعلومات باسم تعريف الجدول.
- إذا كانت النسبة أقل من 80% فيجب عليك تحسينها.
- تعتمد على معلمتين:
-
Open_table_definitions: إجمالي جداول التعريف موجودة في ذاكرة التخزين المؤقت. الأمر: إظهار الحالة العامة مثل "Open_table_definitions"
-
Opened_tables: إجمالي جداول التعريف مطلوبة. الأمر: إظهار الحالة العامة مثل "Opened_tables"
- صيغة الحساب: Open_table_definitions/Opened_table_definitions
الجدول المؤقت في الذاكرة
- يجب أن تستخدم العديد من عبارات SQL مثل Order وGroup By و... جدولاً مؤقتًا.
- إذا كانت النسبة أقل من 80% فيجب عليك تحسينها.
- تعتمد على معلمتين:
-
Created_tmp_disk_tables: يتم إنشاء إجمالي الجداول المؤقتة على القرص. الأمر: إظهار الحالة العامة مثل "%Created_tmp_disk_tables%"
-
Created_tmp_tables: يتم إنشاء إجمالي الجداول المؤقتة. الأمر: إظهار الحالة العامة مثل "%Created_tmp_tables%"
- صيغة الحساب: (Created_tmp_tables - Created_tmp_disk_tables)/ Created_tmp_tables
خاتمة
تقدم هذه المدونة معرفة قائمة على الأبحاث حول MySQL. MySQL هو نظام لإدارة قواعد البيانات العلائقية معروف بتكلفته المنخفضة وأدواته المساعدة الشاملة وأدائه العالي، مما يجعله مناسبًا لمجموعة واسعة من المشاريع. على الرغم من أن هذه المدونة تغطي العديد من ميزات وجوانب MySQL، إلا أن هناك المزيد مما يمكن استكشافه. سوف أتعمق أكثر في الميزات والمعرفة الإضافية في المدونات المستقبلية.
شكرًا لك على القراءة، ونراكم في مدونتي القادمة.
وثيقة مرجعية
- وثائق MySQL
- دورة MySQL - تران كووك هوي
- ويكيبيديا - ماي إس كيو إل