سؤال

لقد قمت بإنشاء فهرس جديد على طاولة بسجل 35 مليون سجل ، وقد تم تشغيله لمدة يوم واحد تقريبًا الآن. في السابق عندما قمت بإنشاء فهارس استغرقت 20 دقيقة ، كانت هناك أعمدة مع ذلك. IdNex الجديد على Varchar (45)

لقد استخدمت الأمر ProcessList الذي يوضح أن إنشاء الفهرس لا يزال قيد التقدم مع الإخراج التالي

65417 | Repair with keycache | CREATE INDEX insert_index on checkins(dateinserted)

كنت أتساءل عما إذا كان يمكن لأي شخص أن يقدم لي نصيحة حول معرفة ما إذا كان الاستعلام قد مات بالفعل ويجلس في قائمة العملية. ربما حدث خطأ ما في مرحلة ما ولست على علم.

شكرًا

هل كانت مفيدة؟

المحلول

الفهرس الخاص بك بناء ، ولكن ببطء شديد.

لدى MySQL طريقتين متاحتين لمؤشرات البناء:

  1. عن طريق الفرز. هذه هي أسرع طريقة ، ولكنها تستخدم الكثير من الذاكرة.
  2. بواسطة KeyCache. بطيء ، بطيء ، بطيء - ولكن يستخدم القليل من الذاكرة.

تشبه طريقة keycache إلى حد ما نوع الإدراج: يتم إدراج القيم في الفهرس في وقت واحد. هذه هي الطريقة نفسها التي يستخدمها الخادم عند استخدام عبارة INSERT لإضافة صفوف إلى الجدول.

تقوم طريقة الفرز بفرز جميع القيم باستخدام QuickSort ، ثم تقوم بإنشاء الفهرس من ذلك. إنه سريع للغاية ، ولكنه يتطلب الكثير من الذاكرة ومساحة القرص المؤقت.

يمكن لبعض متغيرات الخادم زيادة المساحة المتاحة لطريقة الفرز ، وبالتالي السماح لها بالعمل مع جداول أكبر. انظر myisam_max_sort_file_size

http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_myisam_max_sort_file_size

في Linux ، يمكنك تتبع تقدم إصلاح الفهرس عن طريق التحقق من حجم الملفات المؤقتة المستخدمة لإنشاء الفهرس. سيقوم الأمر التالي بإدراج جميع الملفات التي يتم فتحها بواسطة عملية MySQL:

sudo ls -l /proc/[mysql-pid]/fd  

ثم تحقق من حجم تلك التي تحتوي على تجزئة باسمها - هذه هي الملفات المؤقتة.

نصائح أخرى

ضع في اعتبارك أن حجم الفهرس سيكون 35M*45 على الأقل. إذا كان عمود UTF8 ، فسيكون 35 مترًا*45*3. هذا أكثر من 4 العربات! إذا لم يكن لديك الكثير من ذاكرة الوصول العشوائي لدعم أنه سيتعين عليه القيام بالكثير من الوصول إلى القرص وقتل الأداء حقًا.

هل يمكنك تطبيع هذا العمود في جدول آخر؟

إذا لم تكن القيم تميل إلى تختلف بما فيه الكفاية في أول 8 أحرف؟ قد تكون قادرًا على الابتعاد عن فهرسة الـ 8 الأولى فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top