ورقةُ المواصفات تقارن الميغابايت في الثانية، وخادمُ الوِب لا يكاد يقرأ ملفًّا كبيرًا من أوّله إلى آخره أبدًا. بل يقرأ آلاف القطع الصغيرة دفعةً واحدة — صفوفًا وصفحاتِ فهارس وملفّاتِ جلسات — وذلك قياسٌ آخر بالكلّيّة.
الرقم الذي يعني
- قرصٌ دوّار — بضع مئات من العمليّات في الثانية، لأنّ ذراعًا ماديّة عليها أن تتحرّك.
- قرصٌ صلبٌ بواجهة SATA — عشرات الآلاف، تحدّه واجهةٌ صُمّمت للأقراص الدوّارة.
- NVMe — مئات الآلاف، يخاطب المعالج مباشرةً بطوابير كثيرة في آن.
عمقُ الطابور هو الفرق الحقيقيّ: لـ SATA طابورٌ واحد سعته 32، ولـ NVMe آلافُ الطوابير، عمقُ كلٍّ منها آلاف. وعشرون عاملَ PHP يطلبون شيئًا في اللحظة نفسها هم هذا الشكل بعينه.
أين تحسّه
- قاعدةُ بياناتٍ تقرأ قراءاتٍ صغيرةً كثيرة — أي كلُّ صفحةٍ في نظام محتوًى تقريبًا.
- الجلسات والمخازن المكتوبة ملفّاتٍ.
- نسخةٌ احتياطية أو استيرادٌ أو حذفٌ كبير، حيث العملُ كلُّه عمليّاتٌ صغيرة.
وأين لا تحسّه
إن كانت مجموعة العمل تسع الذاكرة فالقرص لا يكاد يُمَسّ، ولا يغيّر NVMe إلّا القليل. وشراءُ تخزينٍ أسرع والجوابُ ذاكرةٌ أكثر خطأٌ شائع وباهظ.
قِس جهازك أنت
fio --name=rand --rw=randread --bs=4k --size=1G --numjobs=4 --iodepth=32 --runtime=30 --time_based --group_reporting
هذا يقيس القراءات العشوائية الصغيرة على عمق، وهو النمط الذي تُنتجه قاعدة البيانات. أمّا مقاييسُ التسلسل فتقيس شيئًا لا يفعله خادمك أبدًا.
افحص انتظار الإدخال والإخراج أوّلًا:
top، ورقمُ %wa. فقربُه من الصفر معناه أنّ التخزين ليس عنقَك الضيّق، أيًّا كان القرص.
