- الاستخدام
- تطبيقات وأدوات بملف بيانات واحد وكاتب واحد في كل مرة
- نضبط
journal_mode=WAL- النسخ الاحتياطي
- نسخة حيّة من الملف، لا نسخًا مباشرًا لملف قيد الاستخدام
قواعد البيانات
حيث تتحدد سرعة الموقع أو بطؤه: قاعدة بياناته.
نثبّت قاعدة البيانات التي يقوم عليها تطبيقك ونضبطها ونُعِدّ لها نسخًا متماثلة ونحفظ نسخها الاحتياطية، ونثبت صلاحية النسخ الاحتياطية باستعادتها فعلًا.
سبعة محركات في مخطط واحد
كل مربع قاعدة بيانات نثبّتها ونضبطها ونحفظ نسخها الاحتياطية. والخطوط تبيّن كيف تعمل معًا في الأنظمة التي نشغّلها — فمعظم التطبيقات تحتاج إلى اثنتين أو ثلاث منها، لا إلى واحدة.
- الاستخدام
- المتاجر وWordPress ومعظم تطبيقات PHP
- نضبط
innodb_buffer_pool_size- النسخ الاحتياطي
- نسخ احتياطية كاملة مع السجلات الثنائية، إلى أي لحظة
- الاستخدام
- الذاكرة المؤقتة والجلسات والطوابير والعدّادات
- نضبط
maxmemory-policy- النسخ الاحتياطي
- لقطات وملف إلحاق
- الاستخدام
- المحاسبة وERP والتقارير والاستعلامات المعقدة
- نضبط
shared_buffers · work_mem- النسخ الاحتياطي
- نسخ احتياطية أساسية مع سجل WAL المؤرشف، إلى أي لحظة
- الاستخدام
- العمل نفسه الذي يؤديه MySQL، وعناقيد Galera
- نضبط
innodb_buffer_pool_size- النسخ الاحتياطي
- mariabackup مع السجلات الثنائية، إلى أي لحظة
- الاستخدام
- البحث في المنتجات والمقالات، والتصفية، والسجلات
- نضبط
JVM heap · shards- النسخ الاحتياطي
- لقطات؛ ويمكن إعادة بناء الفهرس من قاعدة البيانات الرئيسية
- الاستخدام
- سجلات يتغير شكلها باستمرار: أحداث، وكتالوجات، ومحتوى
- نضبط
wiredTiger cacheSizeGB- النسخ الاحتياطي
- مجموعة نسخ متماثلة، مع سجل oplog للاستعادة إلى لحظة محددة
- 1حين يتجاوز التطبيق حدود ملف واحد، ينتقل إلى خادم قاعدة بيانات.
- 2بدأت MariaDB تفرّعًا من MySQL؛ ومعظم التطبيقات تنتقل بينهما دون تعديل.
- 3يقف Redis في المقدمة: تبقى الإجابات المتكررة والجلسات في الذاكرة.
- 4الذاكرة المؤقتة نفسها أمام تطبيقات PostgreSQL.
- 5يُغذّى فهرس البحث من قاعدة البيانات الرئيسية، ولا يحدث العكس أبدًا.
- 6يغطي JSONB في PostgreSQL كثيرًا من مهام المستندات قبل الحاجة إلى MongoDB.
أي قاعدة بيانات لأي مهمة
التطبيق هو الذي يحدد في الغالب، ونحن نتبعه. وحيث يكون الخيار مفتوحًا، فهكذا نختار.
| المهمة | ما نختاره | يصلح أيضًا | السبب |
|---|---|---|---|
| متجر، أو موقع WordPress، أو تطبيق PHP | MySQL · MariaDB | PostgreSQL | ما بُني عليه التطبيق واختُبر، مع أوسع دعم. |
| المحاسبة وERP والتقارير ذات عمليات الربط الكثيفة | PostgreSQL | MySQL 8 | معاملات صارمة، ودوال النوافذ، ومخطِّط استعلامات مصمَّم للاستعلامات المعقدة. |
| الذاكرة المؤقتة والجلسات والطوابير وحدود المعدّل | Redis | Memcached | إجابات من الذاكرة. احفظ فيها ما يمكن إعادة بنائه إن فُقد. |
| البحث في المنتجات أو المقالات | OpenSearch · Elasticsearch | MySQL · PostgreSQL full-text | ترتيب حسب الصلة، وتسامح مع الأخطاء الإملائية، وتصفية وأوجه تصنيف لا يقدّمها استعلام LIKE. أما للكتالوج الصغير فيكفي البحث النصي الكامل المدمج في قاعدة البيانات. |
| تطبيق جوال، أو أداة سطح مكتب، أو خدمة داخلية صغيرة | SQLite | —لا بديل | لا خادم يحتاج إلى تشغيل: ملف واحد، يُنسخ احتياطيًا بنسخه بطريقة آمنة. |
| أحداث أو سجلات أو بيانات يتغير شكلها باستمرار | MongoDB | PostgreSQL JSONB | مستندات مرنة؛ وPostgreSQL حين تحتاج أيضًا إلى عمليات الربط والمعاملات. |
| قراءات تتجاوز طاقة خادم واحد | MySQL · MariaDB · PostgreSQL replicas | —لا بديل | تتوزع القراءات على النسخ المتماثلة، بينما تبقى الكتابة على خادم رئيسي واحد. |
استعلام بطيء واحد، اكتُشف وأُصلح
معظم الصفحات البطيئة سببها استعلام واحد. يسمّيه سجل الاستعلامات البطيئة، ويبيّن EXPLAIN سبب بطئه، وكثيرًا ما يكون فهرس واحد هو الإصلاح كله.
SELECT id, total, created_at
FROM orders
WHERE customer_id = 4821
ORDER BY created_at DESC
LIMIT 20;
قبل
- type
- ALL
- key
- NULL
- Extra
- Using where; Using filesort
يقرأ كل صفوف الجدول، ثم يرتّب ما وجده.
الإصلاح: فهرس واحد
ALTER TABLE orders
ADD INDEX idx_customer_created (customer_id, created_at);
بعد
- type
- ref
- key
- idx_customer_created
- Extra
- Backward index scan
يقرأ صفوف هذا العميل وحدها، مرتّبة سلفًا.
النسخة الاحتياطية لا تُحتسب إلا بعد استعادتها
النسخة الليلية وحدها تُضيّع يومًا كاملًا. أما مع الاحتفاظ بسجل التغييرات أيضًا، فنستطيع إعادة قاعدة البيانات إلى الثانية التي سبقت الخطأ.
00:00
الاستعادة حتى هنا14:31:59
أمر DELETE دون WHERE14:32:00
- استعادة آخر نسخة احتياطية كاملة
على خادم منفصل، لتبقى قاعدة البيانات العاملة كما هي أثناء عملنا.
- إعادة تطبيق السجل حتى اللحظة السابقة
السجلات الثنائية لـ MySQL وMariaDB، وسجل WAL المؤرشف لـ PostgreSQL، وسجل oplog لـ MongoDB.
- التحقق منها، ثم إعادة البيانات
إما أن تُنسخ الصفوف المفقودة إلى مكانها، وإما أن تحل النسخة المستعادة محل الأصلية — والقرار لك، والفرق بين يديك.
الاستعادة إلى لحظة محددة تتوقف على المحرك:
- MySQL · MariaDB · PostgreSQL · MongoDBإلى أي ثانية يغطيها السجل
- Redisإلى آخر عملية كتابة يحفظها ملف الإلحاق
- SQLiteإلى آخر نسخة من الملف
- OpenSearch · Elasticsearchإلى آخر لقطة، ثم يُعاد البناء من المصدر
اختبارات الاستعادة جزء من الرعاية التي نتفق عليها معك: على خادم منفصل، وفق جدول محدد، مع تدوين كل نتيجة. فالنسخة الاحتياطية التي لم يستعدها أحد أملٌ، لا نسخة احتياطية.
بقية العمل
ما تحتاجه قاعدة البيانات من يوم تثبيتها حتى يوم ترقيتها، والإعدادات التي تمسها كل خطوة.
-
التثبيت وتحديد الموارد
الإصدار الذي يدعمه تطبيقك، من المستودع الرسمي للجهة المطوِّرة. وتُقسَّم الذاكرة بين قاعدة البيانات والتطبيق والنظام قبل ضبط أي شيء آخر.
innodb_buffer_pool_size · shared_buffers · maxmemory · -Xmx -
الفهارس والاستعلامات البطيئة
يُقرأ سجل الاستعلامات البطيئة، وتُحلَّل أسوأ الاستعلامات، وتُضاف الفهارس أو تُحذف مع تدوين السبب.
slow_query_log · pg_stat_statements · EXPLAIN ANALYZE -
النسخ المتماثل
نسخة ثانية تتبع الأولى، لتوزيع عمليات القراءة ولتتولى العمل حين يتعطل الخادم الرئيسي.
GTID · Galera · streaming replication · replica set -
الأمان
الاستماع على الشبكة الخاصة فقط، ومستخدم واحد لكل تطبيق بالصلاحيات التي يحتاجها وحدها، واتصالات مشفّرة أينما خرجت البيانات من الخادم.
bind-address · TLS · GRANT · SCRAM · ACL -
المراقبة
الاتصالات، وتأخر النسخ المتماثل، ومساحة القرص، والاستعلامات البطيئة، مع تنبيه قبل بلوغ الحد لا بعده.
max_connections · Seconds_Behind_Source · pg_stat_replication -
الترقيات
تُجرَّب أولًا على نسخة، والنسخ المتماثلة قبل الخادم الرئيسي، وطريق التراجع مكتوب قبل أن نبدأ.
pg_upgrade · mariadb-upgrade · rolling restart

أخبرنا بما تفعله قاعدة بياناتك
أي محرك، وما حجمها، وأين تعمل، وما الذي يقلقك بشأنها. نفحصها أولًا، ثم نسعّر الإعداد أو الرعاية بعد محادثة واحدة.