الخميس، 6 أغسطس 2026

بعض الأمور التي تعلمتها حول تشغيل SQLi

مرحباً! أعمل حالياً على موقع Django، وقررت استخدام SQLite كقاعدة بيانات. عندما بدأتُ استخدام SQLite كقاعدة بيانات لموقع ويب، قرأتُ العديد من المقالات التي تُشير إلى أنه من الآمن تماماً استخدام SQLite في بيئة الإنتاج لموقع صغير، وأعتقد أن هذا صحيح تماماً، لكن ما لم أُدركه تماماً هو أن SQLite تبقى قاعدة بيانات، وقواعد البيانات معقدة، ولا أملك خبرة كبيرة في تشغيلها.
لذا، إليكم بعض الأمور البسيطة التي تعلمتها حول تشغيل SQLite. هذا هو الموقع الرابع الذي أستخدم فيه SQLite، وأعتقد أن هذا الموقع أصعب لأنني، بفضل قوة Django ORM، أحمّل قاعدة البيانات مهاماً أكثر مما كنتُ أقوم به سابقاً بدون Django.
بدأتُ بتفعيل وضع WAL كما هو مذكور في جميع المقالات، متمنياً أن تسير الأمور على ما يُرام.
يبدو أن أمر ANALYZE مهم. اليوم، كنتُ أُجري استعلامًا (باستخدام FTS5 من SQLite للبحث النصي الكامل) على جدول يحتوي على 4000 صف، واستغرق 5 ثوانٍ. بدا لي هذا غير منطقي: فالحواسيب سريعة!
اتضح أن ما كان عليّ فعله هو تشغيل أمر ANALYZE! فورًا، انخفض وقت تنفيذ الاستعلام من 5 ثوانٍ إلى حوالي 0.05 ثانية (أو رقم صغير جدًا لدرجة أنني لم أُعر الأمر اهتمامًا). ما زلتُ لا أعرف بالضبط ما الخطأ الذي حدث في خطة الاستعلام، لكنني أرجّح أنه كان خطأً تربيعيًا غير مقصود.
يُنشئ أمر ANALYZE "إحصائيات" (أظن أنها تتعلق بعدد الصفوف في كل جدول؟ وربما أشياء أخرى؟) حتى يتمكن مُخطط الاستعلام من اتخاذ خيارات أفضل.
ربما أتعلم يومًا ما قراءة خطة الاستعلام.

ليست هناك تعليقات:

إرسال تعليق

القوائم المترابطة المتضمنة (Intrusive linked lists)

القوائم المتصلة المتداخلة (Intrusive linked lists) هي نوع من القوائم المتصلة التي تكون فيها روابط الربط مُضمَّنةً داخل البنية نفسها التي يجر...