Skip to Sidebar Skip to Content
اقرأ-تك اقرأ-تك
ضيفنا الكريم

  • قائمة القراءة
  • تسجيل الدخول
  • الرئيسية
  • المقالات
  • خطط الاشتراك
  • - اصدارتنا
  • ورقة وقلم
  • مدونات فطين
  • شنطة مبرمج
  • النشرة الأسبوعية
  • كنوز
  • - تعرف علينا
  • من نحن
  • الشراكات
  • كتاب المحتوى
  • اكتب معنا
  • تواصل معنا
  • - بنود الخدمة
  • سياسة الخصوصية
  • الشروط والأحكام
الوسوم
  • Backend
  • Distributed Systems
  • System Design
  • Databases
  • LinkedIn
  • X
  • Facebook
  • Telegram
  • GitHub
جميع الحقوق محفوظة لمنصة اقرأ-تِك 2024©
How Shopify Mitigates Deadlocks in High Concurrency Environments
  • Databases
  • Backend

How Shopify Mitigates Deadlocks in High Concurrency Environments

عشان نضمن الـ Data Integrity فالـ MySQL بيحتاج يعمل Lock على البيانات قبل ما يعمل Update على أي Record موجود ، لو فيه عمليات متعددة (Multiple Processes) بتحاول تعمل Update للبيانات في نفس الجدول في نفس الوقت، فممكن يحصل "deadlock"

  • Mahmoud Youssef by Mahmoud Youssef
    Mahmoud Youssef Mahmoud Youssef
    CEO & Founder
    • X
    • Facebook
    • Website
  • 29 Aug, 2024
  • •
  • 1 min read
  • Share on X
  • Share on Facebook
  • Share on LinkedIn
  • Share on Pinterest
  • Email

المقدمة

عشان نضمن الـ Data Integrity فالـ MySQL بيحتاج يعمل Lock على البيانات قبل ما يعمل Update على أي Record موجود ، لو فيه عمليات متعددة (Multiple Processes) بتحاول تعمل Update للبيانات في نفس الجدول في نفس الوقت، فممكن يحصل "deadlock" حسب طريقة تخزين البيانات على الـ Disk وحسب إدارة MySQL ليها.

ده ممكن يحصل حتى لو العمليات المختلفة دي بتتعامل مع Records مختلفة. فتعالوا نشوف في المقال ده ازاي Shopify بتشرح مشكلة الـ "deadlocks" في MySQL أثناء عمليات الـ Updates للبيانات، ونشوف إزاي الـ "composite primary keys" ممكن يكون حل للمشكلة دي بشكل فعال.

Deadlock Problem

لما MySQL بيعمل Update/Insert اللي هي (up-sert) لمجموعة من الـ Records اللي فيها بيانات جديدة وموجودة، بيحاول يضيف كل الـ Records ويعملهم Insert. فبالنسبة للسجلات اللي موجودة بالفعل، لو حصل "collision" على الـ "unique constraint" ده بيبقى معناه إن التحديث مطلوب بدل الإضافة. وعشان MySQL يقدر انه يعمل Update للسجلات دي بأمان، بيحتاج يعمل "gap lock".

لما العملية دي بتتكرر بشكل متزامن عن طريق أكتر من Process بتحاول تعمل نفس الكلام، الكلام ده بيبقى عرضة لحدوث "deadlocks".

وده طبعًا بيحصل لأن الـ "gap lock" بيستهدف الـ Record اللي بيتحدث فعليًا والـ Record اللي قبله على طول في الـ Index ، فـ MySQL بيعمل كده عشان يقدر يحدث الـ Index كمان.

لو الـ pkid بطبيعته Sequential ، فده معناه إن البيانات هتتخزن بنفس ترتيب الـ Sequence ده. فلما يجي MySQL يحتاج يعمل "gap locks" عشان يدير العمليات المتعددة اللي بتحدث البيانات، ممكن وقتها يحصل تداخل في الـ "gap locks" اللي محتاجها العمليات المختلفة.

وعلى حسب عدد العمليات اللي شغالة في نفس الوقت وعدد الـ "unique constraint collisions" اللي بتحصل، ممكن ده طبعًا يؤدي لحدوث "deadlocks". وبناءً على تكرار الـ "deadlocks" دي ، ممكن تأثر بشكل كبير على أداء التطبيق ككل.

والـ "deadlocks" ممكن تحصل حتى لو العمليات شغالة على دفعات مختلفة (Multiple Batches) من السجلات.


ETL Jobs on Transactions Table

الصورة دي بتوضح جدول اسمه transactions. الجدول ده بيتم تحديثه بشكل متزامن عن طريق عمليات ETL بتشتغل على كل account بشكل مستقل. ورغم إن كل عملية بتستهدف مجموعة مختلفة من الـ Records في الجدول transaction، إلا إن متطلبات الـ Locks بينهم ممكن تتداخل وتسبب "deadlocks".


Mitigating Deadlocks Solution

هذا المقال مخصص للأعضاء المنتسبين لخطط الاشتراك المدفوعة فقط

اشترك الآن وتصفح كافة المقالات المميزة واستمتع بمحتوى حصري وابق على اطلاع دائم بالتحديثات المستمرة.

اشترك الآن 🚀

هل لديك حساب؟ تسجيل الدخول

في هذا المقال
اشترك الآن واكمل قراءة المقال
قناة اقرأ-تِك على التليجرام قناة اقرأ-تِك على التليجرام

مقالات ذات صلة

  • Redis Persistence 1 min read

    Redis Persistence

    Mahmoud Youssef Mahmoud Youssef • 4 Jul, 2025
    Mahmoud Youssef Mahmoud Youssef
    CEO & Founder
    • X
    • Facebook
    • Website
  • How YouTube Supports Billions of Users With MySQL 2 min read

    How YouTube Supports Billions of Users With MySQL

    Mahmoud Youssef Mahmoud Youssef • 19 Apr, 2025
    Mahmoud Youssef Mahmoud Youssef
    CEO & Founder
    • X
    • Facebook
    • Website
  • How Slack Handles Billions of Tasks in Milliseconds 3 min read

    How Slack Handles Billions of Tasks in Milliseconds

    Mahmoud Youssef Mahmoud Youssef • 11 Apr, 2025
    Mahmoud Youssef Mahmoud Youssef
    CEO & Founder
    • X
    • Facebook
    • Website
  • How Netflix Migrates Critical Traffic at Scale With No Downtime 4 min read

    How Netflix Migrates Critical Traffic at Scale With No Downtime

    Mahmoud Youssef Mahmoud Youssef • 5 Apr, 2025
    Mahmoud Youssef Mahmoud Youssef
    CEO & Founder
    • X
    • Facebook
    • Website
  • ElasticSearch 1 min read

    ElasticSearch

    Alaa Elkzaz Alaa Elkzaz • 31 Mar, 2025
    Alaa Elkzaz Alaa Elkzaz
    Co-Founder & Software Engineer
    • Website
  • Redis 1 min read

    Redis

    Alaa Elkzaz Alaa Elkzaz • 31 Mar, 2025
    Alaa Elkzaz Alaa Elkzaz
    Co-Founder & Software Engineer
    • Website
  • How Canva Built Scalable and Reliable Content Usage Counting Service 2 min read

    How Canva Built Scalable and Reliable Content Usage Counting Service

    Mahmoud Youssef Mahmoud Youssef • 17 Jan, 2025
    Mahmoud Youssef Mahmoud Youssef
    CEO & Founder
    • X
    • Facebook
    • Website
  • Deep Dive Into SQL Window Functions: Explained Visually Part II - Lead and Lag 5 min read

    Deep Dive Into SQL Window Functions: Explained Visually Part II - Lead and Lag

    Ahmed Anwar Ahmed Anwar • 8 Jan, 2025
    Ahmed Anwar Ahmed Anwar
    Software Technical Writer
    • Website
  • Change Data Capture at Pinterest 2 min read

    Change Data Capture at Pinterest

    Mahmoud Youssef Mahmoud Youssef • 21 Dec, 2024
    Mahmoud Youssef Mahmoud Youssef
    CEO & Founder
    • X
    • Facebook
    • Website
  • Demystifying SQL Unique Constraints 2 min read

    Demystifying SQL Unique Constraints

    Nahla Hatem Nahla Hatem • 8 Dec, 2024
    Nahla Hatem Nahla Hatem
    Data Engineer
    • Website

اشترك الآن بنشرة اقرأ‑تِك الأسبوعية

لا تدع أي شيء يفوتك. واحصل على أحدث المقالات المميزة مباشرة إلى بريدك الإلكتروني وبشكل مجاني!

اقرأ-تك اقرأ-تك
  • الرئيسية
  • المقالات
  • خطط الاشتراك
  • - اصدارتنا
  • ورقة وقلم
  • مدونات فطين
  • شنطة مبرمج
  • النشرة الأسبوعية
  • كنوز
  • - تعرف علينا
  • من نحن
  • الشراكات
  • كتاب المحتوى
  • اكتب معنا
  • تواصل معنا
  • - بنود الخدمة
  • سياسة الخصوصية
  • الشروط والأحكام
الوسوم
  • Backend
  • Distributed Systems
  • System Design
  • Databases
  • LinkedIn
  • X
  • Facebook
  • Telegram
  • GitHub
جميع الحقوق محفوظة لمنصة اقرأ-تِك 2024©