"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إنشاء فهرس على جدول إنتاج MySQL كبير بدون قفل الجدول؟

كيفية إنشاء فهرس على جدول إنتاج MySQL كبير بدون قفل الجدول؟

تم النشر بتاريخ 2024-11-17
تصفح:320

How to Create an Index on a Large MySQL Production Table Without Table Locking?

كيفية إنشاء فهرس على جدول إنتاج MySQL كبير بدون قفل الجدول

خلفية المشكلة:

قد يكون إنشاء فهرس على جدول MySQL كبير مهمة شاقة، خاصة في بيئة الإنتاج حيث يكون الوصول دون انقطاع أمرًا بالغ الأهمية. يمكن أن تؤدي عبارات CREATE INDEX التقليدية إلى قفل جدول كامل، مما يؤدي إلى حظر جميع العمليات المتزامنة.

اعتبارات إصدار MySQL:

  • في MySQL 5.6 والإصدارات الأحدث، تحديثات الفهرس يتم إجراؤها عبر الإنترنت، مما يسمح باستمرار عمليات القراءة والكتابة أثناء إنشاء الفهرس.
  • ومع ذلك، في MySQL 5.5 والإصدارات الأقدم، بما في ذلك جداول InnoDB وMyISAM، ستمنع تحديثات الفهرس عمليات الكتابة إلى الجدول.

منهج الماجستير الدائري:

بالنسبة لإصدارات MySQL قبل الإصدار 5.6، أحد الأساليب الفعالة هو الأسلوب الرئيسي الدائري:

  1. إعداد رئيسي ثانوي ( Master B) النسخ المتماثل من السيد الأساسي (Master A).
  2. قم بإجراء تحديث المخطط على Master B (مما يسمح له بالتخلف أثناء الترقية).
  3. تأكد من توافق تغيير المخطط مع أوامر النسخ المتماثل من مخطط الإصدار المنخفض على Master A.
  4. قم بتبديل جميع العملاء تلقائيًا من Master A إلى Master B.
  5. قم بتحديث المخطط على Master A واجعله Master ثانوي.

أداة تغيير مخطط pt-online-schema الخاصة بـ Percona:

تعمل هذه الأداة على أتمتة النهج الرئيسي الدائري من خلال:

  • إنشاء جدول جديد مع المخطط المحدث.
  • الاحتفاظ بالجدول الجديد متزامنًا مع الجدول الأصلي باستخدام مشغل.
  • نسخ الصفوف على دفعات من الجدول الأصلي.
  • استبدال الجدول الأصلي مع الجدول الجديد.

اعتبارات AWS RDS:

بالنسبة لقواعد بيانات MySQL المستضافة على RDS من Amazon، يمكن استخدام ميزة "قراءة ترويج النسخة المتماثلة" لتسهيل يتغير المخطط دون قفل الجدول. يتضمن ذلك إجراء تغييرات على العبد المخصص للقراءة فقط ومن ثم ترقيته ليصبح السيد الجديد.

التقنيات البديلة:

  • استخدم مؤقتًا الجدول: إنشاء جدول مؤقت بالفهرس الجديد، وإدراج البيانات من الجدول الأصلي، واستبدال الجدول الأصلي بالجدول المؤقت.
  • تقسيم الجدول: تقسيم الجدول إلى أقسام أصغر، وقم بإنشاء الفهرس على كل قسم على حدة، ثم قم بدمج الأقسام معًا مرة أخرى.
  • استخدم عملية الخلفية: قم بإنشاء عملية خلفية منفصلة تقوم بإنشاء الفهرس تدريجيًا أثناء الجدول يظل متاحًا للعمليات العادية. هذا الأسلوب غير مدعوم في جميع إصدارات MySQL.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3