0Pricing
PostgreSQL Performance & Query Optimization · درس

منع التفاف معرّف المعاملة

افهم كيف يمكن لمعرّفات المعاملات ذات 32 بت في PostgreSQL أن تلتف، ولماذا يمنع التنظيف المكثف ذلك، وكيف تراقب وتتفادى إيقاف التشغيل المخيف بسبب الالتفاف

منع التفاف معرّف المعاملة درس مجاني في PostgreSQL Performance & Query Optimization على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PostgreSQL Performance & Query Optimization، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PostgreSQL Performance & Query Optimization 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

What is Transaction ID Wraparound?

PostgreSQL labels every row version with the transaction ID (XID) that created it. XIDs are 32-bit, so there are only about 4 billion of them. They are compared in a circular fashion, and if old rows are not frozen, the comparison can break.

Why It is Dangerous

If XIDs wrap before old rows are frozen, recent rows could appear to be in the future and become invisible. To protect your data, PostgreSQL will refuse new writes before that happens.

Freezing Rows

VACUUM marks very old, still-visible rows as frozen, meaning they are visible to all transactions forever. Frozen rows no longer depend on their original XID, so they are safe from wraparound.

The vacuum_freeze_min_age Setting

This controls how old a row's XID must be before VACUUM freezes it. Lower values freeze sooner; higher values defer work but increase wraparound risk.

SHOW vacuum_freeze_min_age;

Autovacuum to the Rescue

When a table's oldest XID exceeds autovacuum_freeze_max_age, autovacuum triggers an anti-wraparound vacuum automatically, even if the table is otherwise idle.

SHOW autovacuum_freeze_max_age;

Monitoring Database Age

Check how close each database is to wraparound by reading the age of its oldest unfrozen XID.

SELECT datname, age(datfrozenxid)
FROM pg_database
ORDER BY age(datfrozenxid) DESC;

Monitoring Per-Table Age

Drill down to find the specific tables driving the age up. The one with the highest age is the next anti-wraparound target.

SELECT relname, age(relfrozenxid)
FROM pg_class
WHERE relkind = 'r'
ORDER BY age(relfrozenxid) DESC
LIMIT 10;

The Warning Signs

The server log warns as you approach the limit:

  • database must be vacuumed within N transactions
  • Eventually the database goes read-only to protect itself

Never ignore these messages.

Manual Freeze

If a table is far behind, run a vacuum that freezes everything immediately rather than waiting for autovacuum.

VACUUM (FREEZE, VERBOSE) big_table;

Best Practices

To stay safe:

  • Keep autovacuum enabled and well-tuned
  • Avoid extremely long-running transactions that pin the oldest XID
  • Monitor age(datfrozenxid) with alerts
  • Investigate any table that resists freezing

Estimating Time Until Trouble

You can roughly gauge headroom by comparing the oldest XID age against the ~2 billion safe limit. If a database is consistently climbing toward it, investigate what blocks freezing before alerts fire.

SELECT datname,
       2000000000 - age(datfrozenxid) AS xids_left
FROM pg_database
ORDER BY xids_left ASC;

Quick Check

Test your wraparound knowledge.

Recap

You learned wraparound prevention:

  • 32-bit XIDs can wrap after ~4 billion transactions
  • VACUUM freezes old rows to make them permanently visible
  • Autovacuum runs anti-wraparound vacuums automatically
  • Monitor age(datfrozenxid) at database and table level
  • Avoid long transactions and heed the log warnings

الأسئلة الشائعة

هل درس «منع التفاف معرّف المعاملة» مجاني؟

نعم — نص درس «منع التفاف معرّف المعاملة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PostgreSQL Performance & Query Optimization، انتقل إلى CoddyKit PRO. تتضمن دورة PostgreSQL Performance & Query Optimization 4 دروس في المجموع.

ماذا ستتعلم في «منع التفاف معرّف المعاملة»؟

افهم كيف يمكن لمعرّفات المعاملات ذات 32 بت في PostgreSQL أن تلتف، ولماذا يمنع التنظيف المكثف ذلك، وكيف تراقب وتتفادى إيقاف التشغيل المخيف بسبب الالتفاف تتمرن على PostgreSQL Performance & Query Optimization مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PostgreSQL Performance & Query Optimization؟

لا تُشترط خبرة سابقة. PostgreSQL Performance & Query Optimization على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «منع التفاف معرّف المعاملة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PostgreSQL Performance & Query Optimization هذا؟

نعم. كل درس في PostgreSQL Performance & Query Optimization يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. فهم MVCC وVACUUM
  2. تهيئة Autovacuum وضبطه
  3. تأثير مستويات عزل المعاملات
  4. منع التفاف معرّف المعاملة
← العودة إلى PostgreSQL Performance & Query Optimization