تشذيب قاعدة بيانات GETH ethereumلتعدين العملة المشفرة Ethereum باستخدام آلية دلالة الحسنات (POS)، يتم استخدام برمجيات خاصة تحت اسم Validator. يتكون الValidator بدوره من جزئين: Execution Layer و Consensus Layer. يعد Consensus Layer هو عملية تعدين POS بحد ذاتها، بينما يُعتبر Execution Layer هو شبكة سلسلة الكتل السابقة Proof of Work (POW) لـ Ethereum التي عملت من عام 2015 حتى الدمج في عام 2022. تم نقل جميع البيانات التي تم تجميعها خلال هذا الوقت بالكامل إلى الشبكة الجديدة POS.

نظرًا لوجود عدة خيارات لبرمجيات الـ Validator، ستكون الاعتبارات التالية قابلة للتطبيق على عميل GETH، الأكثر شيوعًا.

يستخدم كل طبقة قاعدة بياناتها الخاصة، وبالنسبة لطبقة الـ Execution، تزيد هذه القاعدة بحجم 14 جيجابايت كل أسبوع. حجم القاعدة البيانات الإجمالي يبلغ بالفعل ما يقرب من 2 تيرابايت. بالنسبة للـ Validator الأرشيفي (المستخدم في خدمات متنوعة مثل Etherscan و beacoincha.in)، تكون متطلبات مساحة SSD أعلى بشكل أكبر، حيث تتجاوز 14 تيرابايت عند استخدام عميل GETH.

لتقليل متطلبات مساحة SSD للعقدة الكاملة (الـ Validator القياسي)، وضع المطورون إجراء قص قاعدة بيانات إلى آخر 128 كتلة لكل معاملة.

مدقق الإيثريوم للعقدة الكاملة

نظريًا، يتيح هذا الإجراء استخدام SSD بسعة 1 تيرابايت، ولكن يجب إجراء القص كل شهر. لذلك، من المستحسن شراء SSD بسعة 2 تيرابايت للـ Validator وأداء عملية تقليم القاعدة بيانات مرة واحدة في السنة. يستغرق هذا الإجراء حوالي 6-7 ساعات، خلالها ستكون عقدتك غير متصلة بالشبكة وقد تتعرض لعقوبات.

تحتوي طبقة الـ Consensus أيضًا على قاعدة بيانات خاصة بها، ولكن حجمها لا يزيد بسرعة مثل قاعدة الـ Execution. لذا، يكون التركيز الرئيسي على تقليل حجم قاعدة البيانات للـ Execution.منذ الإصدار 1.13.0، يدعم عميل GETH العلامة الجديدة --state.scheme=path بالإضافة إلى نوع قاعدة بيانات Pebble الجديد، إذا كنت تستخدم بالفعل --state.scheme=path أو ستقوم فقط بتثبيت مدقق ETH مع نوع قاعدة البيانات الجديد، لن تكون هناك حاجة لقص قاعدة البيانات بعد الآن. بالنسبة لكافة العملاء الآخرين الذين قاموا بالتحديث إلى الإصدار 1.13.0 أو أعلى، يستمر الإصدار القديم من قاعدة البيانات في العمل. للتبديل إلى قاعدة بيانات جديدة، تحتاج إلى إزالة قاعدة بيانات عميل Geth بالكامل (أمر geth Removalb)، وتحديد العلامة --state.scheme=path و--db.engine pebble في إعدادات GETH، وانتظر المزامنة الكاملة لـ العقدة لمدة 1 يومًا، بشرط أن يكون لديك SSD سريع ووحدة معالجة مركزية قوية وحديثة وإنترنت سريع.

الآن دعونا ننتقل إلى التعليمات حول كيفية أداء هذا القص لقاعدة البيانات لعارض GETH.

تقليم قاعدة بيانات لـ GETH

مهم: يمكنك قص القاعدة بيانات فقط إذا كان هناك ما لا يقل عن 40 جيجابايت من المساحة الحرة على وحدة التخزين SSD. إذا كانت لديك مساحة أقل على وحدة التخزين SSD، يمكنك زيادتها عن طريق تقليل ملف SWAP أو توسيع حجم القرص المنطقي. بديلًا لذلك، قم بنقل قاعدة بيانات طبقة الـ Consensus مؤقتًا إلى قرص آخر، أو كحل آخر، قم بأداء مزامنة جديدة من البداية، ولكن باستخدام قاعدة بيانات Pebble.

لفحص المساحة الحرة على القرص في Linux، استخدم الأمر:

df -h

نقطة أخرى: يجب أن يكون عميل GETH متزامنًا تمامًا ويعمل لمدة لا تقل عن 35 دقيقة بعد البدء لجمع البيانات اللازمة.

الخطوة الأولى هي إيقاف عملية GETH:

sudo systemctl stop geth

يمكنك أيضًا إيقاف طبقة الـ Consensus. أوامر إيقاف العمل لعميل PRYSM:

sudo systemctl stop prysmvalidator
sudo systemctl stop prysmbeacon

انتظر 3 دقائق قبل المتابعة إلى الخطوة التالية.

قبل أي إجراءات إضافية، يُفضل بدء مضاعف الطرفية، مثل TMUX، للتأكد من أن عملية التقليم لن تتوقف إذا فقدت الوصول إلى طرفية الخادم عن بُعد.

tmux

هذا ضروري في حالة فقدان الوصول إلى الطرفية عن بُعد. في هذه الحالة، لن تتوقف عملية قص قاعدة البيانات إلى جانب جلسة العمل.

الآن، يمكنك بدء تقليل حجم القاعدة بيانات.

الأمر لقص القاعدة بيانات:

 geth snapshot prune-state

إذا كنت قد قمت بتثبيت العارض وفقًا لتعليمات Somer Esat على Medium، مما يعني أن GETH يُطلق باستخدام systemd، فسيكون الأمر مختلفًا:

sudo -u <user> geth --datadir <path> snapshot prune-state

على سبيل المثال: sudo -u geth geth --datadir /var/lib/geth snapshot prune-state

أو sudo -u goeth geth --datadir /var/lib/goethereum snapshot prune-state

تعتمد اختيار الأمر على مكان تخزين قاعدة بيانات GETH على الخادم. يمكنك العثور على مسار قاعدة البيانات في ملف خدمة geth:

sudo nano /etc/systemd/system/geth.service

يتم تحديد مسار قاعدة البيانات تحت علم --datadir.

إذا تم القيام بذلك بشكل صحيح، ستبدأ عملية تقليم قاعدة البيانات، تنقسم إلى 3 مراحل:

المرحلة الأولى هي بناء فلتر Bloom، استغرقت حوالي 2 ساعة وقليل على جهاز الكمبيوتر الخاص بي.

تقليل قاعدة بيانات المدقق الأثير

 

elapsed: كم من الوقت قد مر

 

 

eta: الوقت المقدر حتى نهاية العملية

 

ستبدأ عملية قص القاعدة بيانات الفعلية، مستغرقة حوالي 4 ساعات إضافية

تشذيب بيانات الحالة eth geth

بعد القص، ستتم ضغط قاعدة البيانات، وتظهر في الوحدة كـ "Compacting database." قد تستغرق هذه العملية حوالي ساعة إضافية

بعد الانتهاء الناجح من مهمة تقليم قاعدة بيانات محقق Ethereum، ستشير رسالة إلى "State pruning successful."

أوقف TMUX:

tmux kill-server

بعد ذلك، قم ببدء عمل عميل GETH والعارض إذا كان قد تم إيقافه أيضًا:

sudo systemctl start geth

sudo systemctl start prysmbeacon

sudo systemctl start prysmvalidator

خطأ: "Snapshot not old enough yet: need 128 more blocks"

يحدث هذا الخطأ إذا لم يكن عقدتك قد قامت بالتشغيل لمدة كافية قبل قرار تقليم قاعدة البيانات. يُفضل أن يعمل GETH لمدة لا تقل عن 35 دقيقة قبل القص.

أيضًا، يحدث هذا الخطأ إذا اخترت الأمر الخاطئ لقص قاعدة بيانات عميل GETH. حدد المسار الصحيح أو استخدم تنسيق أمر مختلف.

طريقة أخرى لبدء تقليم قاعدة بيانات Ethereum GETH

قم بتحرير ملف الخدمة geth.service الحالي:

sudo nano /etc/systemd/system/geth.service

أضف السطر التالي إلى نهاية ExecStart:

snapshot prune-state

يجب أن تظل جميع البارامترات الأخرى دون تغيير.

أعد تحميل systemd:

sudo systemctl daemon-reload

ابدأ خدمة GETH:

sudo systemctl start geth

يمكنك مراقبة تقدم تقليم قاعدة البيانات باستخدام الأمر:

journalctl -fu geth

بعد الانتهاء من تقليم قاعدة بيانات GETH، قم بإزالة السطر snapshot prune-state من ملف الخدمة geth.service:

sudo nano /etc/systemd/system/geth.service

أعد تحميل systemd:

sudo systemctl daemon-reload

ابدأ خدمة GETH:

sudo systemctl start geth

استغرقت العملية الكاملة لتقليم قاعدة بيانات عميل GETH حوالي 7 ساعات على خادم يحتوي على معالج Ryzen 1700X وذاكرة RAM بحجم 32 جيجابايت، وSSD بحجم 2 تيرابايت ADATA XPG GAMMIX S11 Pro.

إذا كانت تكوينات خادمك أضعف بشكل كبير، فإن الوقت الإجمالي الذي يستغرقه تقليم القاعدة بيانات سيكون أطول. وعلى العكس من ذلك، على جهاز كمبيوتر أكثر قوة، قد يستغرق التقليم وقتًا أقل.

ختامًا: تعتبر عملية تقليم قاعدة بيانات عارض ETH الذي يعمل بواسطة عميل GETH وظيفة مفيدة للغاية حيث تتيح استخدام SSD أصغر بكثير مما هو مطلوب فعليًا. يزيل ذلك أيضًا المشاكل إذا كانت SSD بحجم 2 تيرابايت غير كافية بالفعل لدعم عارض Ethereum. في غضون ساعات قليلة، يمكنك تقليم القاعدة بيانات وتجنب الحاجة إلى مزامنة GETH الكاملة لمدة أسبوعين للانتقال إلى Pebble، حيث يحدث تقليم القاعدة بيانات تلقائيًا.

إذا قررت عدم الانتقال إلى Pebble، تذكر تنفيذ الأمر snapshot prune-state بشكل دوري بينما لا يزال هناك 40 جيجابايت من المساحة الحرة على SSD الخاص بك.