استخدام الموارد / الذاكرة

autovacuum_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي.
نوع البيانات integer
القيمة الافتراضية -1
القيم المسموح بها -1-2097151
نوع المعلمة ديناميكي
الوثائق autovacuum_work_mem

dynamic_shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة.
نوع البيانات التعداد
القيمة الافتراضية posix
القيم المسموح بها posix
نوع المعلمة للقراءة فقط
الوثائق dynamic_shared_memory_type

hash_mem_multiplier

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف متعدد work_mem لاستخدامه لجداول التجزئة.
نوع البيانات عددي
القيمة الافتراضية 2
القيم المسموح بها 1-1000
نوع المعلمة ديناميكي
الوثائق hash_mem_multiplier

huge_pages

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores.
نوع البيانات التعداد
القيمة الافتراضية try
القيم المسموح بها on,off,try
نوع المعلمة ثابت
الوثائق huge_pages

‏‏الوصف

الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة كتل تصل إلى 2 ميغابايت، بدلا من صفحات 4 كيلوبايت القياسية.

يمكن أن يوفر استخدام صفحات ضخمة مزايا الأداء التي تؤدي إلى إلغاء تحميل وحدة المعالجة المركزية بشكل فعال:

  • فهي تقلل الحمل المقترن بمهام إدارة الذاكرة مثل عدد أقل من حالات فقدان المخزن المؤقت لمظهر الترجمة (TLB).
  • إنها تقصر الوقت اللازم لإدارة الذاكرة.

على وجه التحديد، في PostgreSQL، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.

ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص، ما يزيد من استقرار الأداء.

التوصيات

  • بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. يمكن أن يؤدي تعطيل الصفحات الضخمة إلى تعريض الأداء للخطر.
  • إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يفعل ذلك، فاحتفظ بالإعداد huge_pages TRY للانتقال السلس والأداء الأمثل.

ملاحظات خاصة ب Azure

بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. لا تتوفر الميزة للخوادم التي بها أقل من أربعة vCores. يتم ضبط عدد الصفحات الضخمة تلقائيا إذا تم تغيير أي إعدادات ذاكرة مشتركة، بما في ذلك التعديلات إلى shared_buffers.

huge_page_size

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف حجم الصفحة الضخمة التي يجب طلبها.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0
نوع المعلمة للقراءة فقط
الوثائق huge_page_size

logical_decoding_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في فك التشفير المنطقي.
نوع البيانات integer
القيمة الافتراضية 65536
القيم المسموح بها 65536
نوع المعلمة للقراءة فقط
الوثائق logical_decoding_work_mem

maintenance_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 1024-2097151
نوع المعلمة ديناميكي
الوثائق maintenance_work_mem

‏‏الوصف

maintenance_work_mem هي معلمة تكوين في PostgreSQL. وهو يحكم مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUMو CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام، maintenance_work_mem محجوز للمهام التي تحافظ على بنية قاعدة البيانات وتحسينها.

النقاط الرئيسية

  • غطاء ذاكرة الفراغ: إذا كنت ترغب في تسريع تنظيف المجموعات الميتة عن طريق زيادة maintenance_work_mem، فكن على دراية بوجود VACUUM قيود مضمنة لجمع معرفات المجموعة الميتة. يمكن استخدام ما يصل إلى 1 غيغابايت فقط من الذاكرة لهذه العملية.
  • فصل الذاكرة للإخلاء التلقائي: يمكنك استخدام autovacuum_work_mem الإعداد للتحكم في الذاكرة التي تستخدمها عمليات الإخلاء التلقائي بشكل مستقل. يعمل هذا الإعداد كمجموعة فرعية من maintenance_work_mem. يمكنك تحديد مقدار استخدام الإخلاء التلقائي للذاكرة دون التأثير على تخصيص الذاكرة لمهام الصيانة الأخرى وعمليات تعريف البيانات.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة maintenance_work_mem الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لن يكون لأي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة maintenance_work_mem الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة maintenance_work_mem وفقا للقيم الموجودة في الصيغة التالية.

الصيغة المستخدمة لحساب قيمة maintenance_work_mem هي (long)(82.5 * ln(memoryGiB) + 40) * 1024.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة maintenance_work_mem
2 GiB 99328 كيبيبايت
4 جيجابيت 157696 KiB
8 جيجابيت 216064 KiB
16 جيجابيت 274432 KiB
32 غيغابايت 332800 كيبيبايت
48 جيبي بايت 367616 كي بي
64 جيبي بايت 392192 KiB
80 جيبي بايت 410624 KiB
128 جيبي بايت 450560 كيبيبايت
160 جيجابايت 468992 KiB
192 جيجابايت 484352 KiB
256 غيغابايت 508928 KiB
384 جيجابايت 542720 كيبيبايت
432 جيجابايت 552960 كيبيبايت
672 جيبي بايت 590848 KiB

max_prepared_transactions

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0-262143
نوع المعلمة ثابت
الوثائق max_prepared_transactions

max_stack_depth

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت.
نوع البيانات integer
القيمة الافتراضية 2048
القيم المسموح بها 2048
نوع المعلمة للقراءة فقط
الوثائق max_stack_depth

min_dynamic_shared_memory

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف مقدار الذاكرة المشتركة الديناميكية المحجوزة عند بدء التشغيل.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0
نوع المعلمة للقراءة فقط
الوثائق min_dynamic_shared_memory

shared_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 16-1073741823
نوع المعلمة ثابت
الوثائق shared_buffers

‏‏الوصف

shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. وهو بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه لجميع عمليات قاعدة البيانات.

عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. إذا كانت البيانات المطلوبة موجودة، يتم استردادها بسرعة وتجاوز قراءة قرص أكثر استهلاكا للوقت. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص، وتقلل بشكل فعال من عدد عمليات الإدخال/الإخراج المطلوبة.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لا يكون لأي تغييرات لاحقة في تحديد المنتج للحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة shared_buffers الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.

بالنسبة للأجهزة الظاهرية التي تحتوي على ذاكرة تصل إلى 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 16384.

بالنسبة للأجهزة الظاهرية التي تحتوي على أكثر من 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 32768.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة shared_buffers
2 GiB 32768
4 جيجابيت 131072
8 جيجابيت 262144
16 جيجابيت 524288
32 غيغابايت 1048576
48 جيبي بايت 1572864
64 جيبي بايت 2097152
80 جيبي بايت 2621440
128 جيبي بايت 4194304
160 جيجابايت 5242880
192 جيجابايت 6291456
256 غيغابايت 8388608
384 جيجابايت 12582912
432 جيجابايت 14155776
672 جيبي بايت 22020096

shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية.
نوع البيانات التعداد
القيمة الافتراضية mmap
القيم المسموح بها mmap
نوع المعلمة للقراءة فقط
الوثائق shared_memory_type

temp_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات.
نوع البيانات integer
القيمة الافتراضية 1024
القيم المسموح بها 100-1073741823
نوع المعلمة ديناميكي
الوثائق temp_buffers

vacuum_buffer_usage_limit

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين حجم تجمع المخزن المؤقت ل فراغ وتحليل وإخلاء تلقائي.
نوع البيانات integer
القيمة الافتراضية 2048
القيم المسموح بها 0-16777216
نوع المعلمة ديناميكي
الوثائق vacuum_buffer_usage_limit

work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة.
نوع البيانات integer
القيمة الافتراضية 4096
القيم المسموح بها 4096-2097151
نوع المعلمة ديناميكي
الوثائق work_mem

‏‏الوصف

تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن أمثلة هذه العمليات الفرز والتجزئة.

على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة عمل أو لكل استعلام. من خلال تعيين حجم كاف work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة إلى القرص.

النقاط الرئيسية

  • ذاكرة الاتصال الخاصة: work_mem هي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. هذه الذاكرة مميزة عن منطقة الذاكرة المشتركة التي shared_buffers تستخدم.
  • الاستخدام الخاص بالاستعلام: لا تستخدم work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلب work_memالاستعلامات البسيطة مثل SELECT 1 . ومع ذلك، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء من work_mem.
  • العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر عدة نهايات خلفية متوازية، قد تستخدم كل نهاية خلفية مجموعة واحدة أو عدة أجزاء من work_mem.

مراقبة work_mem وضبطها

من الضروري مراقبة أداء النظام باستمرار والضبط work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:

  • نتيجة تحليلات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تقوم بإنشاء ملفات مؤقتة. يشير هذا الموقف إلى الحاجة المحتملة لزيادة work_mem.
  • أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب ملفات مؤقتة عالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشاكل.
تعديل متعدد المستويات

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

  • مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تكون الذاكرة مكثفة، ففكر في work_mem تخصيص القيمة لهذا المستخدم. ALTER ROLE استخدم الأمر لتحسين أداء عمليات المستخدم.

  • مستوى الدالة/الإجراء: إذا كانت وظائف أو إجراءات معينة تولد ملفات مؤقتة كبيرة، يمكن أن تكون زيادة work_mem القيمة على مستوى الوظيفة أو الإجراء المحدد مفيدة. ALTER FUNCTION استخدم الأمر أو ALTER PROCEDURE لتخصيص ذاكرة إضافية لهذه العمليات على وجه التحديد.

  • مستوى قاعدة البيانات: قم بتغيير work_mem على مستوى قاعدة البيانات إذا كانت قواعد بيانات معينة فقط هي التي تولد أعدادا كبيرة من الملفات المؤقتة.

  • المستوى العمومي: إذا كشف تحليل النظام الخاص بك أن معظم الاستعلامات تنشئ ملفات مؤقتة صغيرة، بينما يقوم عدد قليل فقط بإنشاء ملفات كبيرة، فقد يكون من الحكمة زيادة work_mem القيمة عالميا. يسهل هذا الإجراء معظم الاستعلامات لمعالجتها في الذاكرة، بحيث يمكنك تجنب العمليات المستندة إلى القرص وتحسين الكفاءة. ومع ذلك، كن حذرا دائما وراقب استخدام الذاكرة على الخادم الخاص بك للتأكد من أنه يمكنه التعامل مع القيمة المتزايدة work_mem .

تحديد الحد الأدنى لقيمة work_mem لعمليات الفرز

للعثور على الحد الأدنى work_mem من القيمة لاستعلام معين، خاصة الذي ينشئ ملفات قرص مؤقتة أثناء عملية الفرز، ابدأ بالنظر في حجم الملف المؤقت الذي تم إنشاؤه أثناء تنفيذ الاستعلام. على سبيل المثال، إذا كان الاستعلام يقوم بإنشاء ملف مؤقت 20 ميغابايت:

  1. اتصل بقاعدة البيانات الخاصة بك باستخدام psql أو عميل PostgreSQL المفضل لديك.
  2. تعيين قيمة أولية work_mem أعلى قليلا من 20 ميغابايت لحساب عناوين إضافية عند المعالجة في الذاكرة. استخدم أمرا مثل: SET work_mem TO '25MB'.
  3. تشغيل EXPLAIN ANALYZE على الاستعلام المسبب للمشاكل في نفس جلسة العمل.
  4. راجع الإخراج ل "Sort Method: quicksort Memory: xkB". إذا كان يشير إلى "external merge Disk: xkB"، فرفع work_mem القيمة بشكل تزايدي وأعد الاختبار حتى "quicksort Memory" يظهر. ظهور "quicksort Memory" إشارات إلى أن الاستعلام يعمل الآن في الذاكرة.
  5. بعد تحديد القيمة من خلال هذا الأسلوب، يمكنك تطبيقها إما عالميا أو على مستويات أكثر دقة (كما هو موضح سابقا) لتناسب احتياجاتك التشغيلية.

autovacuum_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي.
نوع البيانات integer
القيمة الافتراضية -1
القيم المسموح بها -1-2097151
نوع المعلمة ديناميكي
الوثائق autovacuum_work_mem

dynamic_shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة.
نوع البيانات التعداد
القيمة الافتراضية posix
القيم المسموح بها posix
نوع المعلمة للقراءة فقط
الوثائق dynamic_shared_memory_type

hash_mem_multiplier

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف متعدد work_mem لاستخدامه لجداول التجزئة.
نوع البيانات عددي
القيمة الافتراضية 2
القيم المسموح بها 1-1000
نوع المعلمة ديناميكي
الوثائق hash_mem_multiplier

huge_pages

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores.
نوع البيانات التعداد
القيمة الافتراضية try
القيم المسموح بها on,off,try
نوع المعلمة ثابت
الوثائق huge_pages

‏‏الوصف

الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة كتل تصل إلى 2 ميغابايت، بدلا من صفحات 4 كيلوبايت القياسية.

يمكن أن يوفر استخدام صفحات ضخمة مزايا الأداء التي تؤدي إلى إلغاء تحميل وحدة المعالجة المركزية بشكل فعال:

  • فهي تقلل الحمل المقترن بمهام إدارة الذاكرة مثل عدد أقل من حالات فقدان المخزن المؤقت لمظهر الترجمة (TLB).
  • إنها تقصر الوقت اللازم لإدارة الذاكرة.

على وجه التحديد، في PostgreSQL، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.

ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص، ما يزيد من استقرار الأداء.

التوصيات

  • بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. يمكن أن يؤدي تعطيل الصفحات الضخمة إلى تعريض الأداء للخطر.
  • إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يفعل ذلك، فاحتفظ بالإعداد huge_pages TRY للانتقال السلس والأداء الأمثل.

ملاحظات خاصة ب Azure

بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. لا تتوفر الميزة للخوادم التي بها أقل من أربعة vCores. يتم ضبط عدد الصفحات الضخمة تلقائيا إذا تم تغيير أي إعدادات ذاكرة مشتركة، بما في ذلك التعديلات إلى shared_buffers.

huge_page_size

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف حجم الصفحة الضخمة التي يجب طلبها.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0
نوع المعلمة للقراءة فقط
الوثائق huge_page_size

logical_decoding_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في فك التشفير المنطقي.
نوع البيانات integer
القيمة الافتراضية 65536
القيم المسموح بها 64-2147483647
نوع المعلمة ديناميكي
الوثائق logical_decoding_work_mem

maintenance_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 1024-2097151
نوع المعلمة ديناميكي
الوثائق maintenance_work_mem

‏‏الوصف

maintenance_work_mem هي معلمة تكوين في PostgreSQL. وهو يحكم مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUMو CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام، maintenance_work_mem محجوز للمهام التي تحافظ على بنية قاعدة البيانات وتحسينها.

النقاط الرئيسية

  • غطاء ذاكرة الفراغ: إذا كنت ترغب في تسريع تنظيف المجموعات الميتة عن طريق زيادة maintenance_work_mem، فكن على دراية بوجود VACUUM قيود مضمنة لجمع معرفات المجموعة الميتة. يمكن استخدام ما يصل إلى 1 غيغابايت فقط من الذاكرة لهذه العملية.
  • فصل الذاكرة للإخلاء التلقائي: يمكنك استخدام autovacuum_work_mem الإعداد للتحكم في الذاكرة التي تستخدمها عمليات الإخلاء التلقائي بشكل مستقل. يعمل هذا الإعداد كمجموعة فرعية من maintenance_work_mem. يمكنك تحديد مقدار استخدام الإخلاء التلقائي للذاكرة دون التأثير على تخصيص الذاكرة لمهام الصيانة الأخرى وعمليات تعريف البيانات.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة maintenance_work_mem الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لن يكون لأي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة maintenance_work_mem الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة maintenance_work_mem وفقا للقيم الموجودة في الصيغة التالية.

الصيغة المستخدمة لحساب قيمة maintenance_work_mem هي (long)(82.5 * ln(memoryGiB) + 40) * 1024.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة maintenance_work_mem
2 GiB 99328 كيبيبايت
4 جيجابيت 157696 KiB
8 جيجابيت 216064 KiB
16 جيجابيت 274432 KiB
32 غيغابايت 332800 كيبيبايت
48 جيبي بايت 367616 كي بي
64 جيبي بايت 392192 KiB
80 جيبي بايت 410624 KiB
128 جيبي بايت 450560 كيبيبايت
160 جيجابايت 468992 KiB
192 جيجابايت 484352 KiB
256 غيغابايت 508928 KiB
384 جيجابايت 542720 كيبيبايت
432 جيجابايت 552960 كيبيبايت
672 جيبي بايت 590848 KiB

max_prepared_transactions

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0-262143
نوع المعلمة ثابت
الوثائق max_prepared_transactions

max_stack_depth

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت.
نوع البيانات integer
القيمة الافتراضية 2048
القيم المسموح بها 2048
نوع المعلمة للقراءة فقط
الوثائق max_stack_depth

min_dynamic_shared_memory

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف مقدار الذاكرة المشتركة الديناميكية المحجوزة عند بدء التشغيل.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0
نوع المعلمة للقراءة فقط
الوثائق min_dynamic_shared_memory

shared_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 16-1073741823
نوع المعلمة ثابت
الوثائق shared_buffers

‏‏الوصف

shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. وهو بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه لجميع عمليات قاعدة البيانات.

عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. إذا كانت البيانات المطلوبة موجودة، يتم استردادها بسرعة وتجاوز قراءة قرص أكثر استهلاكا للوقت. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص، وتقلل بشكل فعال من عدد عمليات الإدخال/الإخراج المطلوبة.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لا يكون لأي تغييرات لاحقة في تحديد المنتج للحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة shared_buffers الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.

بالنسبة للأجهزة الظاهرية التي تحتوي على ذاكرة تصل إلى 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 16384.

بالنسبة للأجهزة الظاهرية التي تحتوي على أكثر من 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 32768.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة shared_buffers
2 GiB 32768
4 جيجابيت 131072
8 جيجابيت 262144
16 جيجابيت 524288
32 غيغابايت 1048576
48 جيبي بايت 1572864
64 جيبي بايت 2097152
80 جيبي بايت 2621440
128 جيبي بايت 4194304
160 جيجابايت 5242880
192 جيجابايت 6291456
256 غيغابايت 8388608
384 جيجابايت 12582912
432 جيجابايت 14155776
672 جيبي بايت 22020096

shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية.
نوع البيانات التعداد
القيمة الافتراضية mmap
القيم المسموح بها mmap
نوع المعلمة للقراءة فقط
الوثائق shared_memory_type

temp_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات.
نوع البيانات integer
القيمة الافتراضية 1024
القيم المسموح بها 100-1073741823
نوع المعلمة ديناميكي
الوثائق temp_buffers

vacuum_buffer_usage_limit

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين حجم تجمع المخزن المؤقت ل فراغ وتحليل وإخلاء تلقائي.
نوع البيانات integer
القيمة الافتراضية 256
القيم المسموح بها 0-16777216
نوع المعلمة ديناميكي
الوثائق vacuum_buffer_usage_limit

work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة.
نوع البيانات integer
القيمة الافتراضية 4096
القيم المسموح بها 4096-2097151
نوع المعلمة ديناميكي
الوثائق work_mem

‏‏الوصف

تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن أمثلة هذه العمليات الفرز والتجزئة.

على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة عمل أو لكل استعلام. من خلال تعيين حجم كاف work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة إلى القرص.

النقاط الرئيسية

  • ذاكرة الاتصال الخاصة: work_mem هي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. هذه الذاكرة مميزة عن منطقة الذاكرة المشتركة التي shared_buffers تستخدم.
  • الاستخدام الخاص بالاستعلام: لا تستخدم work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلب work_memالاستعلامات البسيطة مثل SELECT 1 . ومع ذلك، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء من work_mem.
  • العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر عدة نهايات خلفية متوازية، قد تستخدم كل نهاية خلفية مجموعة واحدة أو عدة أجزاء من work_mem.

مراقبة work_mem وضبطها

من الضروري مراقبة أداء النظام باستمرار والضبط work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:

  • نتيجة تحليلات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تقوم بإنشاء ملفات مؤقتة. يشير هذا الموقف إلى الحاجة المحتملة لزيادة work_mem.
  • أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب ملفات مؤقتة عالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشاكل.
تعديل متعدد المستويات

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

  • مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تكون الذاكرة مكثفة، ففكر في work_mem تخصيص القيمة لهذا المستخدم. ALTER ROLE استخدم الأمر لتحسين أداء عمليات المستخدم.

  • مستوى الدالة/الإجراء: إذا كانت وظائف أو إجراءات معينة تولد ملفات مؤقتة كبيرة، يمكن أن تكون زيادة work_mem القيمة على مستوى الوظيفة أو الإجراء المحدد مفيدة. ALTER FUNCTION استخدم الأمر أو ALTER PROCEDURE لتخصيص ذاكرة إضافية لهذه العمليات على وجه التحديد.

  • مستوى قاعدة البيانات: قم بتغيير work_mem على مستوى قاعدة البيانات إذا كانت قواعد بيانات معينة فقط هي التي تولد أعدادا كبيرة من الملفات المؤقتة.

  • المستوى العمومي: إذا كشف تحليل النظام الخاص بك أن معظم الاستعلامات تنشئ ملفات مؤقتة صغيرة، بينما يقوم عدد قليل فقط بإنشاء ملفات كبيرة، فقد يكون من الحكمة زيادة work_mem القيمة عالميا. يسهل هذا الإجراء معظم الاستعلامات لمعالجتها في الذاكرة، بحيث يمكنك تجنب العمليات المستندة إلى القرص وتحسين الكفاءة. ومع ذلك، كن حذرا دائما وراقب استخدام الذاكرة على الخادم الخاص بك للتأكد من أنه يمكنه التعامل مع القيمة المتزايدة work_mem .

تحديد الحد الأدنى لقيمة work_mem لعمليات الفرز

للعثور على الحد الأدنى work_mem من القيمة لاستعلام معين، خاصة الذي ينشئ ملفات قرص مؤقتة أثناء عملية الفرز، ابدأ بالنظر في حجم الملف المؤقت الذي تم إنشاؤه أثناء تنفيذ الاستعلام. على سبيل المثال، إذا كان الاستعلام يقوم بإنشاء ملف مؤقت 20 ميغابايت:

  1. اتصل بقاعدة البيانات الخاصة بك باستخدام psql أو عميل PostgreSQL المفضل لديك.
  2. تعيين قيمة أولية work_mem أعلى قليلا من 20 ميغابايت لحساب عناوين إضافية عند المعالجة في الذاكرة. استخدم أمرا مثل: SET work_mem TO '25MB'.
  3. تشغيل EXPLAIN ANALYZE على الاستعلام المسبب للمشاكل في نفس جلسة العمل.
  4. راجع الإخراج ل "Sort Method: quicksort Memory: xkB". إذا كان يشير إلى "external merge Disk: xkB"، فرفع work_mem القيمة بشكل تزايدي وأعد الاختبار حتى "quicksort Memory" يظهر. ظهور "quicksort Memory" إشارات إلى أن الاستعلام يعمل الآن في الذاكرة.
  5. بعد تحديد القيمة من خلال هذا الأسلوب، يمكنك تطبيقها إما عالميا أو على مستويات أكثر دقة (كما هو موضح سابقا) لتناسب احتياجاتك التشغيلية.

autovacuum_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي.
نوع البيانات integer
القيمة الافتراضية -1
القيم المسموح بها -1-2097151
نوع المعلمة ديناميكي
الوثائق autovacuum_work_mem

dynamic_shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة.
نوع البيانات التعداد
القيمة الافتراضية posix
القيم المسموح بها posix
نوع المعلمة للقراءة فقط
الوثائق dynamic_shared_memory_type

hash_mem_multiplier

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف متعدد work_mem لاستخدامه لجداول التجزئة.
نوع البيانات عددي
القيمة الافتراضية 2
القيم المسموح بها 1-1000
نوع المعلمة ديناميكي
الوثائق hash_mem_multiplier

huge_pages

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores.
نوع البيانات التعداد
القيمة الافتراضية try
القيم المسموح بها on,off,try
نوع المعلمة ثابت
الوثائق huge_pages

‏‏الوصف

الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة كتل تصل إلى 2 ميغابايت، بدلا من صفحات 4 كيلوبايت القياسية.

يمكن أن يوفر استخدام صفحات ضخمة مزايا الأداء التي تؤدي إلى إلغاء تحميل وحدة المعالجة المركزية بشكل فعال:

  • فهي تقلل الحمل المقترن بمهام إدارة الذاكرة مثل عدد أقل من حالات فقدان المخزن المؤقت لمظهر الترجمة (TLB).
  • إنها تقصر الوقت اللازم لإدارة الذاكرة.

على وجه التحديد، في PostgreSQL، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.

ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص، ما يزيد من استقرار الأداء.

التوصيات

  • بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. يمكن أن يؤدي تعطيل الصفحات الضخمة إلى تعريض الأداء للخطر.
  • إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يفعل ذلك، فاحتفظ بالإعداد huge_pages TRY للانتقال السلس والأداء الأمثل.

ملاحظات خاصة ب Azure

بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. لا تتوفر الميزة للخوادم التي بها أقل من أربعة vCores. يتم ضبط عدد الصفحات الضخمة تلقائيا إذا تم تغيير أي إعدادات ذاكرة مشتركة، بما في ذلك التعديلات إلى shared_buffers.

huge_page_size

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف حجم الصفحة الضخمة التي يجب طلبها.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0
نوع المعلمة للقراءة فقط
الوثائق huge_page_size

logical_decoding_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في فك التشفير المنطقي.
نوع البيانات integer
القيمة الافتراضية 65536
القيم المسموح بها 64-2147483647
نوع المعلمة ديناميكي
الوثائق logical_decoding_work_mem

maintenance_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 1024-2097151
نوع المعلمة ديناميكي
الوثائق maintenance_work_mem

‏‏الوصف

maintenance_work_mem هي معلمة تكوين في PostgreSQL. وهو يحكم مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUMو CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام، maintenance_work_mem محجوز للمهام التي تحافظ على بنية قاعدة البيانات وتحسينها.

النقاط الرئيسية

  • غطاء ذاكرة الفراغ: إذا كنت ترغب في تسريع تنظيف المجموعات الميتة عن طريق زيادة maintenance_work_mem، فكن على دراية بوجود VACUUM قيود مضمنة لجمع معرفات المجموعة الميتة. يمكن استخدام ما يصل إلى 1 غيغابايت فقط من الذاكرة لهذه العملية.
  • فصل الذاكرة للإخلاء التلقائي: يمكنك استخدام autovacuum_work_mem الإعداد للتحكم في الذاكرة التي تستخدمها عمليات الإخلاء التلقائي بشكل مستقل. يعمل هذا الإعداد كمجموعة فرعية من maintenance_work_mem. يمكنك تحديد مقدار استخدام الإخلاء التلقائي للذاكرة دون التأثير على تخصيص الذاكرة لمهام الصيانة الأخرى وعمليات تعريف البيانات.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة maintenance_work_mem الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لن يكون لأي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة maintenance_work_mem الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة maintenance_work_mem وفقا للقيم الموجودة في الصيغة التالية.

الصيغة المستخدمة لحساب قيمة maintenance_work_mem هي (long)(82.5 * ln(memoryGiB) + 40) * 1024.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة maintenance_work_mem
2 GiB 99328 كيبيبايت
4 جيجابيت 157696 KiB
8 جيجابيت 216064 KiB
16 جيجابيت 274432 KiB
32 غيغابايت 332800 كيبيبايت
48 جيبي بايت 367616 كي بي
64 جيبي بايت 392192 KiB
80 جيبي بايت 410624 KiB
128 جيبي بايت 450560 كيبيبايت
160 جيجابايت 468992 KiB
192 جيجابايت 484352 KiB
256 غيغابايت 508928 KiB
384 جيجابايت 542720 كيبيبايت
432 جيجابايت 552960 كيبيبايت
672 جيبي بايت 590848 KiB

max_prepared_transactions

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0-262143
نوع المعلمة ثابت
الوثائق max_prepared_transactions

max_stack_depth

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت.
نوع البيانات integer
القيمة الافتراضية 2048
القيم المسموح بها 2048
نوع المعلمة للقراءة فقط
الوثائق max_stack_depth

min_dynamic_shared_memory

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف مقدار الذاكرة المشتركة الديناميكية المحجوزة عند بدء التشغيل.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0
نوع المعلمة للقراءة فقط
الوثائق min_dynamic_shared_memory

shared_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 16-1073741823
نوع المعلمة ثابت
الوثائق shared_buffers

‏‏الوصف

shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. وهو بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه لجميع عمليات قاعدة البيانات.

عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. إذا كانت البيانات المطلوبة موجودة، يتم استردادها بسرعة وتجاوز قراءة قرص أكثر استهلاكا للوقت. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص، وتقلل بشكل فعال من عدد عمليات الإدخال/الإخراج المطلوبة.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لا يكون لأي تغييرات لاحقة في تحديد المنتج للحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة shared_buffers الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.

بالنسبة للأجهزة الظاهرية التي تحتوي على ذاكرة تصل إلى 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 16384.

بالنسبة للأجهزة الظاهرية التي تحتوي على أكثر من 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 32768.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة shared_buffers
2 GiB 32768
4 جيجابيت 131072
8 جيجابيت 262144
16 جيجابيت 524288
32 غيغابايت 1048576
48 جيبي بايت 1572864
64 جيبي بايت 2097152
80 جيبي بايت 2621440
128 جيبي بايت 4194304
160 جيجابايت 5242880
192 جيجابايت 6291456
256 غيغابايت 8388608
384 جيجابايت 12582912
432 جيجابايت 14155776
672 جيبي بايت 22020096

shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية.
نوع البيانات التعداد
القيمة الافتراضية mmap
القيم المسموح بها mmap
نوع المعلمة للقراءة فقط
الوثائق shared_memory_type

temp_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات.
نوع البيانات integer
القيمة الافتراضية 1024
القيم المسموح بها 100-1073741823
نوع المعلمة ديناميكي
الوثائق temp_buffers

work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة.
نوع البيانات integer
القيمة الافتراضية 4096
القيم المسموح بها 4096-2097151
نوع المعلمة ديناميكي
الوثائق work_mem

‏‏الوصف

تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن أمثلة هذه العمليات الفرز والتجزئة.

على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة عمل أو لكل استعلام. من خلال تعيين حجم كاف work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة إلى القرص.

النقاط الرئيسية

  • ذاكرة الاتصال الخاصة: work_mem هي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. هذه الذاكرة مميزة عن منطقة الذاكرة المشتركة التي shared_buffers تستخدم.
  • الاستخدام الخاص بالاستعلام: لا تستخدم work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلب work_memالاستعلامات البسيطة مثل SELECT 1 . ومع ذلك، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء من work_mem.
  • العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر عدة نهايات خلفية متوازية، قد تستخدم كل نهاية خلفية مجموعة واحدة أو عدة أجزاء من work_mem.

مراقبة work_mem وضبطها

من الضروري مراقبة أداء النظام باستمرار والضبط work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:

  • نتيجة تحليلات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تقوم بإنشاء ملفات مؤقتة. يشير هذا الموقف إلى الحاجة المحتملة لزيادة work_mem.
  • أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب ملفات مؤقتة عالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشاكل.
تعديل متعدد المستويات

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

  • مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تكون الذاكرة مكثفة، ففكر في work_mem تخصيص القيمة لهذا المستخدم. ALTER ROLE استخدم الأمر لتحسين أداء عمليات المستخدم.

  • مستوى الدالة/الإجراء: إذا كانت وظائف أو إجراءات معينة تولد ملفات مؤقتة كبيرة، يمكن أن تكون زيادة work_mem القيمة على مستوى الوظيفة أو الإجراء المحدد مفيدة. ALTER FUNCTION استخدم الأمر أو ALTER PROCEDURE لتخصيص ذاكرة إضافية لهذه العمليات على وجه التحديد.

  • مستوى قاعدة البيانات: قم بتغيير work_mem على مستوى قاعدة البيانات إذا كانت قواعد بيانات معينة فقط هي التي تولد أعدادا كبيرة من الملفات المؤقتة.

  • المستوى العمومي: إذا كشف تحليل النظام الخاص بك أن معظم الاستعلامات تنشئ ملفات مؤقتة صغيرة، بينما يقوم عدد قليل فقط بإنشاء ملفات كبيرة، فقد يكون من الحكمة زيادة work_mem القيمة عالميا. يسهل هذا الإجراء معظم الاستعلامات لمعالجتها في الذاكرة، بحيث يمكنك تجنب العمليات المستندة إلى القرص وتحسين الكفاءة. ومع ذلك، كن حذرا دائما وراقب استخدام الذاكرة على الخادم الخاص بك للتأكد من أنه يمكنه التعامل مع القيمة المتزايدة work_mem .

تحديد الحد الأدنى لقيمة work_mem لعمليات الفرز

للعثور على الحد الأدنى work_mem من القيمة لاستعلام معين، خاصة الذي ينشئ ملفات قرص مؤقتة أثناء عملية الفرز، ابدأ بالنظر في حجم الملف المؤقت الذي تم إنشاؤه أثناء تنفيذ الاستعلام. على سبيل المثال، إذا كان الاستعلام يقوم بإنشاء ملف مؤقت 20 ميغابايت:

  1. اتصل بقاعدة البيانات الخاصة بك باستخدام psql أو عميل PostgreSQL المفضل لديك.
  2. تعيين قيمة أولية work_mem أعلى قليلا من 20 ميغابايت لحساب عناوين إضافية عند المعالجة في الذاكرة. استخدم أمرا مثل: SET work_mem TO '25MB'.
  3. تشغيل EXPLAIN ANALYZE على الاستعلام المسبب للمشاكل في نفس جلسة العمل.
  4. راجع الإخراج ل "Sort Method: quicksort Memory: xkB". إذا كان يشير إلى "external merge Disk: xkB"، فرفع work_mem القيمة بشكل تزايدي وأعد الاختبار حتى "quicksort Memory" يظهر. ظهور "quicksort Memory" إشارات إلى أن الاستعلام يعمل الآن في الذاكرة.
  5. بعد تحديد القيمة من خلال هذا الأسلوب، يمكنك تطبيقها إما عالميا أو على مستويات أكثر دقة (كما هو موضح سابقا) لتناسب احتياجاتك التشغيلية.

autovacuum_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي.
نوع البيانات integer
القيمة الافتراضية -1
القيم المسموح بها -1-2097151
نوع المعلمة ديناميكي
الوثائق autovacuum_work_mem

dynamic_shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة.
نوع البيانات التعداد
القيمة الافتراضية posix
القيم المسموح بها posix
نوع المعلمة للقراءة فقط
الوثائق dynamic_shared_memory_type

hash_mem_multiplier

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف متعدد work_mem لاستخدامه لجداول التجزئة.
نوع البيانات عددي
القيمة الافتراضية 1
القيم المسموح بها 1-1000
نوع المعلمة ديناميكي
الوثائق hash_mem_multiplier

huge_pages

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores.
نوع البيانات التعداد
القيمة الافتراضية try
القيم المسموح بها on,off,try
نوع المعلمة ثابت
الوثائق huge_pages

‏‏الوصف

الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة كتل تصل إلى 2 ميغابايت، بدلا من صفحات 4 كيلوبايت القياسية.

يمكن أن يوفر استخدام صفحات ضخمة مزايا الأداء التي تؤدي إلى إلغاء تحميل وحدة المعالجة المركزية بشكل فعال:

  • فهي تقلل الحمل المقترن بمهام إدارة الذاكرة مثل عدد أقل من حالات فقدان المخزن المؤقت لمظهر الترجمة (TLB).
  • إنها تقصر الوقت اللازم لإدارة الذاكرة.

على وجه التحديد، في PostgreSQL، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.

ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص، ما يزيد من استقرار الأداء.

التوصيات

  • بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. يمكن أن يؤدي تعطيل الصفحات الضخمة إلى تعريض الأداء للخطر.
  • إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يفعل ذلك، فاحتفظ بالإعداد huge_pages TRY للانتقال السلس والأداء الأمثل.

ملاحظات خاصة ب Azure

بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. لا تتوفر الميزة للخوادم التي بها أقل من أربعة vCores. يتم ضبط عدد الصفحات الضخمة تلقائيا إذا تم تغيير أي إعدادات ذاكرة مشتركة، بما في ذلك التعديلات إلى shared_buffers.

huge_page_size

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف حجم الصفحة الضخمة التي يجب طلبها.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0
نوع المعلمة للقراءة فقط
الوثائق huge_page_size

logical_decoding_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في فك التشفير المنطقي.
نوع البيانات integer
القيمة الافتراضية 65536
القيم المسموح بها 64-2147483647
نوع المعلمة ديناميكي
الوثائق logical_decoding_work_mem

maintenance_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 1024-2097151
نوع المعلمة ديناميكي
الوثائق maintenance_work_mem

‏‏الوصف

maintenance_work_mem هي معلمة تكوين في PostgreSQL. وهو يحكم مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUMو CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام، maintenance_work_mem محجوز للمهام التي تحافظ على بنية قاعدة البيانات وتحسينها.

النقاط الرئيسية

  • غطاء ذاكرة الفراغ: إذا كنت ترغب في تسريع تنظيف المجموعات الميتة عن طريق زيادة maintenance_work_mem، فكن على دراية بوجود VACUUM قيود مضمنة لجمع معرفات المجموعة الميتة. يمكن استخدام ما يصل إلى 1 غيغابايت فقط من الذاكرة لهذه العملية.
  • فصل الذاكرة للإخلاء التلقائي: يمكنك استخدام autovacuum_work_mem الإعداد للتحكم في الذاكرة التي تستخدمها عمليات الإخلاء التلقائي بشكل مستقل. يعمل هذا الإعداد كمجموعة فرعية من maintenance_work_mem. يمكنك تحديد مقدار استخدام الإخلاء التلقائي للذاكرة دون التأثير على تخصيص الذاكرة لمهام الصيانة الأخرى وعمليات تعريف البيانات.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة maintenance_work_mem الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لن يكون لأي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة maintenance_work_mem الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة maintenance_work_mem وفقا للقيم الموجودة في الصيغة التالية.

الصيغة المستخدمة لحساب قيمة maintenance_work_mem هي (long)(82.5 * ln(memoryGiB) + 40) * 1024.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة maintenance_work_mem
2 GiB 99328 كيبيبايت
4 جيجابيت 157696 KiB
8 جيجابيت 216064 KiB
16 جيجابيت 274432 KiB
32 غيغابايت 332800 كيبيبايت
48 جيبي بايت 367616 كي بي
64 جيبي بايت 392192 KiB
80 جيبي بايت 410624 KiB
128 جيبي بايت 450560 كيبيبايت
160 جيجابايت 468992 KiB
192 جيجابايت 484352 KiB
256 غيغابايت 508928 KiB
384 جيجابايت 542720 كيبيبايت
432 جيجابايت 552960 كيبيبايت
672 جيبي بايت 590848 KiB

max_prepared_transactions

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0-262143
نوع المعلمة ثابت
الوثائق max_prepared_transactions

max_stack_depth

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت.
نوع البيانات integer
القيمة الافتراضية 2048
القيم المسموح بها 2048
نوع المعلمة للقراءة فقط
الوثائق max_stack_depth

min_dynamic_shared_memory

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف مقدار الذاكرة المشتركة الديناميكية المحجوزة عند بدء التشغيل.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0
نوع المعلمة للقراءة فقط
الوثائق min_dynamic_shared_memory

shared_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 16-1073741823
نوع المعلمة ثابت
الوثائق shared_buffers

‏‏الوصف

shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. وهو بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه لجميع عمليات قاعدة البيانات.

عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. إذا كانت البيانات المطلوبة موجودة، يتم استردادها بسرعة وتجاوز قراءة قرص أكثر استهلاكا للوقت. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص، وتقلل بشكل فعال من عدد عمليات الإدخال/الإخراج المطلوبة.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لا يكون لأي تغييرات لاحقة في تحديد المنتج للحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة shared_buffers الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.

بالنسبة للأجهزة الظاهرية التي تحتوي على ذاكرة تصل إلى 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 16384.

بالنسبة للأجهزة الظاهرية التي تحتوي على أكثر من 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 32768.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة shared_buffers
2 GiB 32768
4 جيجابيت 131072
8 جيجابيت 262144
16 جيجابيت 524288
32 غيغابايت 1048576
48 جيبي بايت 1572864
64 جيبي بايت 2097152
80 جيبي بايت 2621440
128 جيبي بايت 4194304
160 جيجابايت 5242880
192 جيجابايت 6291456
256 غيغابايت 8388608
384 جيجابايت 12582912
432 جيجابايت 14155776
672 جيبي بايت 22020096

shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية.
نوع البيانات التعداد
القيمة الافتراضية mmap
القيم المسموح بها mmap
نوع المعلمة للقراءة فقط
الوثائق shared_memory_type

temp_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات.
نوع البيانات integer
القيمة الافتراضية 1024
القيم المسموح بها 100-1073741823
نوع المعلمة ديناميكي
الوثائق temp_buffers

work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة.
نوع البيانات integer
القيمة الافتراضية 4096
القيم المسموح بها 4096-2097151
نوع المعلمة ديناميكي
الوثائق work_mem

‏‏الوصف

تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن أمثلة هذه العمليات الفرز والتجزئة.

على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة عمل أو لكل استعلام. من خلال تعيين حجم كاف work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة إلى القرص.

النقاط الرئيسية

  • ذاكرة الاتصال الخاصة: work_mem هي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. هذه الذاكرة مميزة عن منطقة الذاكرة المشتركة التي shared_buffers تستخدم.
  • الاستخدام الخاص بالاستعلام: لا تستخدم work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلب work_memالاستعلامات البسيطة مثل SELECT 1 . ومع ذلك، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء من work_mem.
  • العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر عدة نهايات خلفية متوازية، قد تستخدم كل نهاية خلفية مجموعة واحدة أو عدة أجزاء من work_mem.

مراقبة work_mem وضبطها

من الضروري مراقبة أداء النظام باستمرار والضبط work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:

  • نتيجة تحليلات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تقوم بإنشاء ملفات مؤقتة. يشير هذا الموقف إلى الحاجة المحتملة لزيادة work_mem.
  • أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب ملفات مؤقتة عالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشاكل.
تعديل متعدد المستويات

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

  • مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تكون الذاكرة مكثفة، ففكر في work_mem تخصيص القيمة لهذا المستخدم. ALTER ROLE استخدم الأمر لتحسين أداء عمليات المستخدم.

  • مستوى الدالة/الإجراء: إذا كانت وظائف أو إجراءات معينة تولد ملفات مؤقتة كبيرة، يمكن أن تكون زيادة work_mem القيمة على مستوى الوظيفة أو الإجراء المحدد مفيدة. ALTER FUNCTION استخدم الأمر أو ALTER PROCEDURE لتخصيص ذاكرة إضافية لهذه العمليات على وجه التحديد.

  • مستوى قاعدة البيانات: قم بتغيير work_mem على مستوى قاعدة البيانات إذا كانت قواعد بيانات معينة فقط هي التي تولد أعدادا كبيرة من الملفات المؤقتة.

  • المستوى العمومي: إذا كشف تحليل النظام الخاص بك أن معظم الاستعلامات تنشئ ملفات مؤقتة صغيرة، بينما يقوم عدد قليل فقط بإنشاء ملفات كبيرة، فقد يكون من الحكمة زيادة work_mem القيمة عالميا. يسهل هذا الإجراء معظم الاستعلامات لمعالجتها في الذاكرة، بحيث يمكنك تجنب العمليات المستندة إلى القرص وتحسين الكفاءة. ومع ذلك، كن حذرا دائما وراقب استخدام الذاكرة على الخادم الخاص بك للتأكد من أنه يمكنه التعامل مع القيمة المتزايدة work_mem .

تحديد الحد الأدنى لقيمة work_mem لعمليات الفرز

للعثور على الحد الأدنى work_mem من القيمة لاستعلام معين، خاصة الذي ينشئ ملفات قرص مؤقتة أثناء عملية الفرز، ابدأ بالنظر في حجم الملف المؤقت الذي تم إنشاؤه أثناء تنفيذ الاستعلام. على سبيل المثال، إذا كان الاستعلام يقوم بإنشاء ملف مؤقت 20 ميغابايت:

  1. اتصل بقاعدة البيانات الخاصة بك باستخدام psql أو عميل PostgreSQL المفضل لديك.
  2. تعيين قيمة أولية work_mem أعلى قليلا من 20 ميغابايت لحساب عناوين إضافية عند المعالجة في الذاكرة. استخدم أمرا مثل: SET work_mem TO '25MB'.
  3. تشغيل EXPLAIN ANALYZE على الاستعلام المسبب للمشاكل في نفس جلسة العمل.
  4. راجع الإخراج ل "Sort Method: quicksort Memory: xkB". إذا كان يشير إلى "external merge Disk: xkB"، فرفع work_mem القيمة بشكل تزايدي وأعد الاختبار حتى "quicksort Memory" يظهر. ظهور "quicksort Memory" إشارات إلى أن الاستعلام يعمل الآن في الذاكرة.
  5. بعد تحديد القيمة من خلال هذا الأسلوب، يمكنك تطبيقها إما عالميا أو على مستويات أكثر دقة (كما هو موضح سابقا) لتناسب احتياجاتك التشغيلية.

autovacuum_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي.
نوع البيانات integer
القيمة الافتراضية -1
القيم المسموح بها -1-2097151
نوع المعلمة ديناميكي
الوثائق autovacuum_work_mem

dynamic_shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة.
نوع البيانات التعداد
القيمة الافتراضية posix
القيم المسموح بها posix
نوع المعلمة للقراءة فقط
الوثائق dynamic_shared_memory_type

hash_mem_multiplier

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف متعدد work_mem لاستخدامه لجداول التجزئة.
نوع البيانات عددي
القيمة الافتراضية 1
القيم المسموح بها 1-1000
نوع المعلمة ديناميكي
الوثائق hash_mem_multiplier

huge_pages

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores.
نوع البيانات التعداد
القيمة الافتراضية try
القيم المسموح بها on,off,try
نوع المعلمة ثابت
الوثائق huge_pages

‏‏الوصف

الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة كتل تصل إلى 2 ميغابايت، بدلا من صفحات 4 كيلوبايت القياسية.

يمكن أن يوفر استخدام صفحات ضخمة مزايا الأداء التي تؤدي إلى إلغاء تحميل وحدة المعالجة المركزية بشكل فعال:

  • فهي تقلل الحمل المقترن بمهام إدارة الذاكرة مثل عدد أقل من حالات فقدان المخزن المؤقت لمظهر الترجمة (TLB).
  • إنها تقصر الوقت اللازم لإدارة الذاكرة.

على وجه التحديد، في PostgreSQL، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.

ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص، ما يزيد من استقرار الأداء.

التوصيات

  • بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. يمكن أن يؤدي تعطيل الصفحات الضخمة إلى تعريض الأداء للخطر.
  • إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يفعل ذلك، فاحتفظ بالإعداد huge_pages TRY للانتقال السلس والأداء الأمثل.

ملاحظات خاصة ب Azure

بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. لا تتوفر الميزة للخوادم التي بها أقل من أربعة vCores. يتم ضبط عدد الصفحات الضخمة تلقائيا إذا تم تغيير أي إعدادات ذاكرة مشتركة، بما في ذلك التعديلات إلى shared_buffers.

logical_decoding_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في فك التشفير المنطقي.
نوع البيانات integer
القيمة الافتراضية 65536
القيم المسموح بها 64-2147483647
نوع المعلمة ديناميكي
الوثائق logical_decoding_work_mem

maintenance_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 1024-2097151
نوع المعلمة ديناميكي
الوثائق maintenance_work_mem

‏‏الوصف

maintenance_work_mem هي معلمة تكوين في PostgreSQL. وهو يحكم مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUMو CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام، maintenance_work_mem محجوز للمهام التي تحافظ على بنية قاعدة البيانات وتحسينها.

النقاط الرئيسية

  • غطاء ذاكرة الفراغ: إذا كنت ترغب في تسريع تنظيف المجموعات الميتة عن طريق زيادة maintenance_work_mem، فكن على دراية بوجود VACUUM قيود مضمنة لجمع معرفات المجموعة الميتة. يمكن استخدام ما يصل إلى 1 غيغابايت فقط من الذاكرة لهذه العملية.
  • فصل الذاكرة للإخلاء التلقائي: يمكنك استخدام autovacuum_work_mem الإعداد للتحكم في الذاكرة التي تستخدمها عمليات الإخلاء التلقائي بشكل مستقل. يعمل هذا الإعداد كمجموعة فرعية من maintenance_work_mem. يمكنك تحديد مقدار استخدام الإخلاء التلقائي للذاكرة دون التأثير على تخصيص الذاكرة لمهام الصيانة الأخرى وعمليات تعريف البيانات.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة maintenance_work_mem الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لن يكون لأي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة maintenance_work_mem الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة maintenance_work_mem وفقا للقيم الموجودة في الصيغة التالية.

الصيغة المستخدمة لحساب قيمة maintenance_work_mem هي (long)(82.5 * ln(memoryGiB) + 40) * 1024.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة maintenance_work_mem
2 GiB 99328 كيبيبايت
4 جيجابيت 157696 KiB
8 جيجابيت 216064 KiB
16 جيجابيت 274432 KiB
32 غيغابايت 332800 كيبيبايت
48 جيبي بايت 367616 كي بي
64 جيبي بايت 392192 KiB
80 جيبي بايت 410624 KiB
128 جيبي بايت 450560 كيبيبايت
160 جيجابايت 468992 KiB
192 جيجابايت 484352 KiB
256 غيغابايت 508928 KiB
384 جيجابايت 542720 كيبيبايت
432 جيجابايت 552960 كيبيبايت
672 جيبي بايت 590848 KiB

max_prepared_transactions

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0-262143
نوع المعلمة ثابت
الوثائق max_prepared_transactions

max_stack_depth

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت.
نوع البيانات integer
القيمة الافتراضية 2048
القيم المسموح بها 2048
نوع المعلمة للقراءة فقط
الوثائق max_stack_depth

shared_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 16-1073741823
نوع المعلمة ثابت
الوثائق shared_buffers

‏‏الوصف

shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. وهو بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه لجميع عمليات قاعدة البيانات.

عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. إذا كانت البيانات المطلوبة موجودة، يتم استردادها بسرعة وتجاوز قراءة قرص أكثر استهلاكا للوقت. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص، وتقلل بشكل فعال من عدد عمليات الإدخال/الإخراج المطلوبة.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لا يكون لأي تغييرات لاحقة في تحديد المنتج للحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة shared_buffers الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.

بالنسبة للأجهزة الظاهرية التي تحتوي على ذاكرة تصل إلى 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 16384.

بالنسبة للأجهزة الظاهرية التي تحتوي على أكثر من 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 32768.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة shared_buffers
2 GiB 32768
4 جيجابيت 131072
8 جيجابيت 262144
16 جيجابيت 524288
32 غيغابايت 1048576
48 جيبي بايت 1572864
64 جيبي بايت 2097152
80 جيبي بايت 2621440
128 جيبي بايت 4194304
160 جيجابايت 5242880
192 جيجابايت 6291456
256 غيغابايت 8388608
384 جيجابايت 12582912
432 جيجابايت 14155776
672 جيبي بايت 22020096

shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية.
نوع البيانات التعداد
القيمة الافتراضية mmap
القيم المسموح بها mmap
نوع المعلمة للقراءة فقط
الوثائق shared_memory_type

temp_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات.
نوع البيانات integer
القيمة الافتراضية 1024
القيم المسموح بها 100-1073741823
نوع المعلمة ديناميكي
الوثائق temp_buffers

work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة.
نوع البيانات integer
القيمة الافتراضية 4096
القيم المسموح بها 4096-2097151
نوع المعلمة ديناميكي
الوثائق work_mem

‏‏الوصف

تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن أمثلة هذه العمليات الفرز والتجزئة.

على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة عمل أو لكل استعلام. من خلال تعيين حجم كاف work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة إلى القرص.

النقاط الرئيسية

  • ذاكرة الاتصال الخاصة: work_mem هي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. هذه الذاكرة مميزة عن منطقة الذاكرة المشتركة التي shared_buffers تستخدم.
  • الاستخدام الخاص بالاستعلام: لا تستخدم work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلب work_memالاستعلامات البسيطة مثل SELECT 1 . ومع ذلك، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء من work_mem.
  • العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر عدة نهايات خلفية متوازية، قد تستخدم كل نهاية خلفية مجموعة واحدة أو عدة أجزاء من work_mem.

مراقبة work_mem وضبطها

من الضروري مراقبة أداء النظام باستمرار والضبط work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:

  • نتيجة تحليلات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تقوم بإنشاء ملفات مؤقتة. يشير هذا الموقف إلى الحاجة المحتملة لزيادة work_mem.
  • أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب ملفات مؤقتة عالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشاكل.
تعديل متعدد المستويات

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

  • مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تكون الذاكرة مكثفة، ففكر في work_mem تخصيص القيمة لهذا المستخدم. ALTER ROLE استخدم الأمر لتحسين أداء عمليات المستخدم.

  • مستوى الدالة/الإجراء: إذا كانت وظائف أو إجراءات معينة تولد ملفات مؤقتة كبيرة، يمكن أن تكون زيادة work_mem القيمة على مستوى الوظيفة أو الإجراء المحدد مفيدة. ALTER FUNCTION استخدم الأمر أو ALTER PROCEDURE لتخصيص ذاكرة إضافية لهذه العمليات على وجه التحديد.

  • مستوى قاعدة البيانات: قم بتغيير work_mem على مستوى قاعدة البيانات إذا كانت قواعد بيانات معينة فقط هي التي تولد أعدادا كبيرة من الملفات المؤقتة.

  • المستوى العمومي: إذا كشف تحليل النظام الخاص بك أن معظم الاستعلامات تنشئ ملفات مؤقتة صغيرة، بينما يقوم عدد قليل فقط بإنشاء ملفات كبيرة، فقد يكون من الحكمة زيادة work_mem القيمة عالميا. يسهل هذا الإجراء معظم الاستعلامات لمعالجتها في الذاكرة، بحيث يمكنك تجنب العمليات المستندة إلى القرص وتحسين الكفاءة. ومع ذلك، كن حذرا دائما وراقب استخدام الذاكرة على الخادم الخاص بك للتأكد من أنه يمكنه التعامل مع القيمة المتزايدة work_mem .

تحديد الحد الأدنى لقيمة work_mem لعمليات الفرز

للعثور على الحد الأدنى work_mem من القيمة لاستعلام معين، خاصة الذي ينشئ ملفات قرص مؤقتة أثناء عملية الفرز، ابدأ بالنظر في حجم الملف المؤقت الذي تم إنشاؤه أثناء تنفيذ الاستعلام. على سبيل المثال، إذا كان الاستعلام يقوم بإنشاء ملف مؤقت 20 ميغابايت:

  1. اتصل بقاعدة البيانات الخاصة بك باستخدام psql أو عميل PostgreSQL المفضل لديك.
  2. تعيين قيمة أولية work_mem أعلى قليلا من 20 ميغابايت لحساب عناوين إضافية عند المعالجة في الذاكرة. استخدم أمرا مثل: SET work_mem TO '25MB'.
  3. تشغيل EXPLAIN ANALYZE على الاستعلام المسبب للمشاكل في نفس جلسة العمل.
  4. راجع الإخراج ل "Sort Method: quicksort Memory: xkB". إذا كان يشير إلى "external merge Disk: xkB"، فرفع work_mem القيمة بشكل تزايدي وأعد الاختبار حتى "quicksort Memory" يظهر. ظهور "quicksort Memory" إشارات إلى أن الاستعلام يعمل الآن في الذاكرة.
  5. بعد تحديد القيمة من خلال هذا الأسلوب، يمكنك تطبيقها إما عالميا أو على مستويات أكثر دقة (كما هو موضح سابقا) لتناسب احتياجاتك التشغيلية.

autovacuum_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي.
نوع البيانات integer
القيمة الافتراضية -1
القيم المسموح بها -1-2097151
نوع المعلمة ديناميكي
الوثائق autovacuum_work_mem

dynamic_shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة.
نوع البيانات التعداد
القيمة الافتراضية posix
القيم المسموح بها posix
نوع المعلمة للقراءة فقط
الوثائق dynamic_shared_memory_type

hash_mem_multiplier

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف متعدد work_mem لاستخدامه لجداول التجزئة.
نوع البيانات عددي
القيمة الافتراضية 1
القيم المسموح بها 1-1000
نوع المعلمة ديناميكي
الوثائق hash_mem_multiplier

huge_pages

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores.
نوع البيانات التعداد
القيمة الافتراضية try
القيم المسموح بها on,off,try
نوع المعلمة ثابت
الوثائق huge_pages

‏‏الوصف

الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة كتل تصل إلى 2 ميغابايت، بدلا من صفحات 4 كيلوبايت القياسية.

يمكن أن يوفر استخدام صفحات ضخمة مزايا الأداء التي تؤدي إلى إلغاء تحميل وحدة المعالجة المركزية بشكل فعال:

  • فهي تقلل الحمل المقترن بمهام إدارة الذاكرة مثل عدد أقل من حالات فقدان المخزن المؤقت لمظهر الترجمة (TLB).
  • إنها تقصر الوقت اللازم لإدارة الذاكرة.

على وجه التحديد، في PostgreSQL، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.

ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص، ما يزيد من استقرار الأداء.

التوصيات

  • بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. يمكن أن يؤدي تعطيل الصفحات الضخمة إلى تعريض الأداء للخطر.
  • إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يفعل ذلك، فاحتفظ بالإعداد huge_pages TRY للانتقال السلس والأداء الأمثل.

ملاحظات خاصة ب Azure

بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. لا تتوفر الميزة للخوادم التي بها أقل من أربعة vCores. يتم ضبط عدد الصفحات الضخمة تلقائيا إذا تم تغيير أي إعدادات ذاكرة مشتركة، بما في ذلك التعديلات إلى shared_buffers.

maintenance_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 1024-2097151
نوع المعلمة ديناميكي
الوثائق maintenance_work_mem

‏‏الوصف

maintenance_work_mem هي معلمة تكوين في PostgreSQL. وهو يحكم مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUMو CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام، maintenance_work_mem محجوز للمهام التي تحافظ على بنية قاعدة البيانات وتحسينها.

النقاط الرئيسية

  • غطاء ذاكرة الفراغ: إذا كنت ترغب في تسريع تنظيف المجموعات الميتة عن طريق زيادة maintenance_work_mem، فكن على دراية بوجود VACUUM قيود مضمنة لجمع معرفات المجموعة الميتة. يمكن استخدام ما يصل إلى 1 غيغابايت فقط من الذاكرة لهذه العملية.
  • فصل الذاكرة للإخلاء التلقائي: يمكنك استخدام autovacuum_work_mem الإعداد للتحكم في الذاكرة التي تستخدمها عمليات الإخلاء التلقائي بشكل مستقل. يعمل هذا الإعداد كمجموعة فرعية من maintenance_work_mem. يمكنك تحديد مقدار استخدام الإخلاء التلقائي للذاكرة دون التأثير على تخصيص الذاكرة لمهام الصيانة الأخرى وعمليات تعريف البيانات.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة maintenance_work_mem الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لن يكون لأي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة maintenance_work_mem الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة maintenance_work_mem وفقا للقيم الموجودة في الصيغة التالية.

الصيغة المستخدمة لحساب قيمة maintenance_work_mem هي (long)(82.5 * ln(memoryGiB) + 40) * 1024.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة maintenance_work_mem
2 GiB 99328 كيبيبايت
4 جيجابيت 157696 KiB
8 جيجابيت 216064 KiB
16 جيجابيت 274432 KiB
32 غيغابايت 332800 كيبيبايت
48 جيبي بايت 367616 كي بي
64 جيبي بايت 392192 KiB
80 جيبي بايت 410624 KiB
128 جيبي بايت 450560 كيبيبايت
160 جيجابايت 468992 KiB
192 جيجابايت 484352 KiB
256 غيغابايت 508928 KiB
384 جيجابايت 542720 كيبيبايت
432 جيجابايت 552960 كيبيبايت
672 جيبي بايت 590848 KiB

max_prepared_transactions

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0-262143
نوع المعلمة ثابت
الوثائق max_prepared_transactions

max_stack_depth

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت.
نوع البيانات integer
القيمة الافتراضية 2048
القيم المسموح بها 2048
نوع المعلمة للقراءة فقط
الوثائق max_stack_depth

shared_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 16-1073741823
نوع المعلمة ثابت
الوثائق shared_buffers

‏‏الوصف

shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. وهو بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه لجميع عمليات قاعدة البيانات.

عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. إذا كانت البيانات المطلوبة موجودة، يتم استردادها بسرعة وتجاوز قراءة قرص أكثر استهلاكا للوقت. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص، وتقلل بشكل فعال من عدد عمليات الإدخال/الإخراج المطلوبة.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لا يكون لأي تغييرات لاحقة في تحديد المنتج للحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة shared_buffers الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.

بالنسبة للأجهزة الظاهرية التي تحتوي على ذاكرة تصل إلى 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 16384.

بالنسبة للأجهزة الظاهرية التي تحتوي على أكثر من 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 32768.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة shared_buffers
2 GiB 32768
4 جيجابيت 131072
8 جيجابيت 262144
16 جيجابيت 524288
32 غيغابايت 1048576
48 جيبي بايت 1572864
64 جيبي بايت 2097152
80 جيبي بايت 2621440
128 جيبي بايت 4194304
160 جيجابايت 5242880
192 جيجابايت 6291456
256 غيغابايت 8388608
384 جيجابايت 12582912
432 جيجابايت 14155776
672 جيبي بايت 22020096

shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية.
نوع البيانات التعداد
القيمة الافتراضية mmap
القيم المسموح بها mmap
نوع المعلمة للقراءة فقط
الوثائق shared_memory_type

temp_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات.
نوع البيانات integer
القيمة الافتراضية 1024
القيم المسموح بها 100-1073741823
نوع المعلمة ديناميكي
الوثائق temp_buffers

work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة.
نوع البيانات integer
القيمة الافتراضية 4096
القيم المسموح بها 4096-2097151
نوع المعلمة ديناميكي
الوثائق work_mem

‏‏الوصف

تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن أمثلة هذه العمليات الفرز والتجزئة.

على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة عمل أو لكل استعلام. من خلال تعيين حجم كاف work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة إلى القرص.

النقاط الرئيسية

  • ذاكرة الاتصال الخاصة: work_mem هي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. هذه الذاكرة مميزة عن منطقة الذاكرة المشتركة التي shared_buffers تستخدم.
  • الاستخدام الخاص بالاستعلام: لا تستخدم work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلب work_memالاستعلامات البسيطة مثل SELECT 1 . ومع ذلك، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء من work_mem.
  • العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر عدة نهايات خلفية متوازية، قد تستخدم كل نهاية خلفية مجموعة واحدة أو عدة أجزاء من work_mem.

مراقبة work_mem وضبطها

من الضروري مراقبة أداء النظام باستمرار والضبط work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:

  • نتيجة تحليلات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تقوم بإنشاء ملفات مؤقتة. يشير هذا الموقف إلى الحاجة المحتملة لزيادة work_mem.
  • أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب ملفات مؤقتة عالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشاكل.
تعديل متعدد المستويات

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

  • مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تكون الذاكرة مكثفة، ففكر في work_mem تخصيص القيمة لهذا المستخدم. ALTER ROLE استخدم الأمر لتحسين أداء عمليات المستخدم.

  • مستوى الدالة/الإجراء: إذا كانت وظائف أو إجراءات معينة تولد ملفات مؤقتة كبيرة، يمكن أن تكون زيادة work_mem القيمة على مستوى الوظيفة أو الإجراء المحدد مفيدة. ALTER FUNCTION استخدم الأمر أو ALTER PROCEDURE لتخصيص ذاكرة إضافية لهذه العمليات على وجه التحديد.

  • مستوى قاعدة البيانات: قم بتغيير work_mem على مستوى قاعدة البيانات إذا كانت قواعد بيانات معينة فقط هي التي تولد أعدادا كبيرة من الملفات المؤقتة.

  • المستوى العمومي: إذا كشف تحليل النظام الخاص بك أن معظم الاستعلامات تنشئ ملفات مؤقتة صغيرة، بينما يقوم عدد قليل فقط بإنشاء ملفات كبيرة، فقد يكون من الحكمة زيادة work_mem القيمة عالميا. يسهل هذا الإجراء معظم الاستعلامات لمعالجتها في الذاكرة، بحيث يمكنك تجنب العمليات المستندة إلى القرص وتحسين الكفاءة. ومع ذلك، كن حذرا دائما وراقب استخدام الذاكرة على الخادم الخاص بك للتأكد من أنه يمكنه التعامل مع القيمة المتزايدة work_mem .

تحديد الحد الأدنى لقيمة work_mem لعمليات الفرز

للعثور على الحد الأدنى work_mem من القيمة لاستعلام معين، خاصة الذي ينشئ ملفات قرص مؤقتة أثناء عملية الفرز، ابدأ بالنظر في حجم الملف المؤقت الذي تم إنشاؤه أثناء تنفيذ الاستعلام. على سبيل المثال، إذا كان الاستعلام يقوم بإنشاء ملف مؤقت 20 ميغابايت:

  1. اتصل بقاعدة البيانات الخاصة بك باستخدام psql أو عميل PostgreSQL المفضل لديك.
  2. تعيين قيمة أولية work_mem أعلى قليلا من 20 ميغابايت لحساب عناوين إضافية عند المعالجة في الذاكرة. استخدم أمرا مثل: SET work_mem TO '25MB'.
  3. تشغيل EXPLAIN ANALYZE على الاستعلام المسبب للمشاكل في نفس جلسة العمل.
  4. راجع الإخراج ل "Sort Method: quicksort Memory: xkB". إذا كان يشير إلى "external merge Disk: xkB"، فرفع work_mem القيمة بشكل تزايدي وأعد الاختبار حتى "quicksort Memory" يظهر. ظهور "quicksort Memory" إشارات إلى أن الاستعلام يعمل الآن في الذاكرة.
  5. بعد تحديد القيمة من خلال هذا الأسلوب، يمكنك تطبيقها إما عالميا أو على مستويات أكثر دقة (كما هو موضح سابقا) لتناسب احتياجاتك التشغيلية.

autovacuum_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي.
نوع البيانات integer
القيمة الافتراضية -1
القيم المسموح بها -1-2097151
نوع المعلمة ديناميكي
الوثائق autovacuum_work_mem

dynamic_shared_memory_type

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة.
نوع البيانات التعداد
القيمة الافتراضية posix
القيم المسموح بها posix
نوع المعلمة للقراءة فقط
الوثائق dynamic_shared_memory_type

huge_pages

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores.
نوع البيانات التعداد
القيمة الافتراضية try
القيم المسموح بها on,off,try
نوع المعلمة ثابت
الوثائق huge_pages

‏‏الوصف

الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة كتل تصل إلى 2 ميغابايت، بدلا من صفحات 4 كيلوبايت القياسية.

يمكن أن يوفر استخدام صفحات ضخمة مزايا الأداء التي تؤدي إلى إلغاء تحميل وحدة المعالجة المركزية بشكل فعال:

  • فهي تقلل الحمل المقترن بمهام إدارة الذاكرة مثل عدد أقل من حالات فقدان المخزن المؤقت لمظهر الترجمة (TLB).
  • إنها تقصر الوقت اللازم لإدارة الذاكرة.

على وجه التحديد، في PostgreSQL، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.

ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص، ما يزيد من استقرار الأداء.

التوصيات

  • بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. يمكن أن يؤدي تعطيل الصفحات الضخمة إلى تعريض الأداء للخطر.
  • إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يفعل ذلك، فاحتفظ بالإعداد huge_pages TRY للانتقال السلس والأداء الأمثل.

ملاحظات خاصة ب Azure

بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. لا تتوفر الميزة للخوادم التي بها أقل من أربعة vCores. يتم ضبط عدد الصفحات الضخمة تلقائيا إذا تم تغيير أي إعدادات ذاكرة مشتركة، بما في ذلك التعديلات إلى shared_buffers.

maintenance_work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 1024-2097151
نوع المعلمة ديناميكي
الوثائق maintenance_work_mem

‏‏الوصف

maintenance_work_mem هي معلمة تكوين في PostgreSQL. وهو يحكم مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUMو CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام، maintenance_work_mem محجوز للمهام التي تحافظ على بنية قاعدة البيانات وتحسينها.

النقاط الرئيسية

  • غطاء ذاكرة الفراغ: إذا كنت ترغب في تسريع تنظيف المجموعات الميتة عن طريق زيادة maintenance_work_mem، فكن على دراية بوجود VACUUM قيود مضمنة لجمع معرفات المجموعة الميتة. يمكن استخدام ما يصل إلى 1 غيغابايت فقط من الذاكرة لهذه العملية.
  • فصل الذاكرة للإخلاء التلقائي: يمكنك استخدام autovacuum_work_mem الإعداد للتحكم في الذاكرة التي تستخدمها عمليات الإخلاء التلقائي بشكل مستقل. يعمل هذا الإعداد كمجموعة فرعية من maintenance_work_mem. يمكنك تحديد مقدار استخدام الإخلاء التلقائي للذاكرة دون التأثير على تخصيص الذاكرة لمهام الصيانة الأخرى وعمليات تعريف البيانات.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة maintenance_work_mem الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لن يكون لأي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة maintenance_work_mem الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة maintenance_work_mem وفقا للقيم الموجودة في الصيغة التالية.

الصيغة المستخدمة لحساب قيمة maintenance_work_mem هي (long)(82.5 * ln(memoryGiB) + 40) * 1024.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة maintenance_work_mem
2 GiB 99328 كيبيبايت
4 جيجابيت 157696 KiB
8 جيجابيت 216064 KiB
16 جيجابيت 274432 KiB
32 غيغابايت 332800 كيبيبايت
48 جيبي بايت 367616 كي بي
64 جيبي بايت 392192 KiB
80 جيبي بايت 410624 KiB
128 جيبي بايت 450560 كيبيبايت
160 جيجابايت 468992 KiB
192 جيجابايت 484352 KiB
256 غيغابايت 508928 KiB
384 جيجابايت 542720 كيبيبايت
432 جيجابايت 552960 كيبيبايت
672 جيبي بايت 590848 KiB

max_prepared_transactions

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي.
نوع البيانات integer
القيمة الافتراضية 0
القيم المسموح بها 0-262143
نوع المعلمة ثابت
الوثائق max_prepared_transactions

max_stack_depth

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت.
نوع البيانات integer
القيمة الافتراضية 2048
القيم المسموح بها 2048
نوع المعلمة للقراءة فقط
الوثائق max_stack_depth

shared_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة.
نوع البيانات integer
القيمة الافتراضية يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم.
القيم المسموح بها 16-1073741823
نوع المعلمة ثابت
الوثائق shared_buffers

‏‏الوصف

shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. وهو بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه لجميع عمليات قاعدة البيانات.

عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. إذا كانت البيانات المطلوبة موجودة، يتم استردادها بسرعة وتجاوز قراءة قرص أكثر استهلاكا للوقت. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص، وتقلل بشكل فعال من عدد عمليات الإدخال/الإخراج المطلوبة.

ملاحظات خاصة ب Azure

يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. لا يكون لأي تغييرات لاحقة في تحديد المنتج للحساب الذي يدعم الخادم المرن أي تأثير على القيمة الافتراضية لمعلمة shared_buffers الخادم لهذا المثيل.

في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.

بالنسبة للأجهزة الظاهرية التي تحتوي على ذاكرة تصل إلى 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 16384.

بالنسبة للأجهزة الظاهرية التي تحتوي على أكثر من 2 غيغابايت، تكون الصيغة المستخدمة لحساب قيمة shared_buffers هي memoryGib * 32768.

استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:

حجم الذاكرة shared_buffers
2 GiB 32768
4 جيجابيت 131072
8 جيجابيت 262144
16 جيجابيت 524288
32 غيغابايت 1048576
48 جيبي بايت 1572864
64 جيبي بايت 2097152
80 جيبي بايت 2621440
128 جيبي بايت 4194304
160 جيجابايت 5242880
192 جيجابايت 6291456
256 غيغابايت 8388608
384 جيجابايت 12582912
432 جيجابايت 14155776
672 جيبي بايت 22020096

temp_buffers

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات.
نوع البيانات integer
القيمة الافتراضية 1024
القيم المسموح بها 100-1073741823
نوع المعلمة ديناميكي
الوثائق temp_buffers

work_mem

السمة القيمة‬
الفئة استخدام الموارد / الذاكرة
‏‏الوصف تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة.
نوع البيانات integer
القيمة الافتراضية 4096
القيم المسموح بها 4096-2097151
نوع المعلمة ديناميكي
الوثائق work_mem

‏‏الوصف

تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن أمثلة هذه العمليات الفرز والتجزئة.

على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة عمل أو لكل استعلام. من خلال تعيين حجم كاف work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة إلى القرص.

النقاط الرئيسية

  • ذاكرة الاتصال الخاصة: work_mem هي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. هذه الذاكرة مميزة عن منطقة الذاكرة المشتركة التي shared_buffers تستخدم.
  • الاستخدام الخاص بالاستعلام: لا تستخدم work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلب work_memالاستعلامات البسيطة مثل SELECT 1 . ومع ذلك، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء من work_mem.
  • العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر عدة نهايات خلفية متوازية، قد تستخدم كل نهاية خلفية مجموعة واحدة أو عدة أجزاء من work_mem.

مراقبة work_mem وضبطها

من الضروري مراقبة أداء النظام باستمرار والضبط work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:

  • نتيجة تحليلات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تقوم بإنشاء ملفات مؤقتة. يشير هذا الموقف إلى الحاجة المحتملة لزيادة work_mem.
  • أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب ملفات مؤقتة عالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشاكل.
تعديل متعدد المستويات

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

  • مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تكون الذاكرة مكثفة، ففكر في work_mem تخصيص القيمة لهذا المستخدم. ALTER ROLE استخدم الأمر لتحسين أداء عمليات المستخدم.

  • مستوى الدالة/الإجراء: إذا كانت وظائف أو إجراءات معينة تولد ملفات مؤقتة كبيرة، يمكن أن تكون زيادة work_mem القيمة على مستوى الوظيفة أو الإجراء المحدد مفيدة. ALTER FUNCTION استخدم الأمر أو ALTER PROCEDURE لتخصيص ذاكرة إضافية لهذه العمليات على وجه التحديد.

  • مستوى قاعدة البيانات: قم بتغيير work_mem على مستوى قاعدة البيانات إذا كانت قواعد بيانات معينة فقط هي التي تولد أعدادا كبيرة من الملفات المؤقتة.

  • المستوى العمومي: إذا كشف تحليل النظام الخاص بك أن معظم الاستعلامات تنشئ ملفات مؤقتة صغيرة، بينما يقوم عدد قليل فقط بإنشاء ملفات كبيرة، فقد يكون من الحكمة زيادة work_mem القيمة عالميا. يسهل هذا الإجراء معظم الاستعلامات لمعالجتها في الذاكرة، بحيث يمكنك تجنب العمليات المستندة إلى القرص وتحسين الكفاءة. ومع ذلك، كن حذرا دائما وراقب استخدام الذاكرة على الخادم الخاص بك للتأكد من أنه يمكنه التعامل مع القيمة المتزايدة work_mem .

تحديد الحد الأدنى لقيمة work_mem لعمليات الفرز

للعثور على الحد الأدنى work_mem من القيمة لاستعلام معين، خاصة الذي ينشئ ملفات قرص مؤقتة أثناء عملية الفرز، ابدأ بالنظر في حجم الملف المؤقت الذي تم إنشاؤه أثناء تنفيذ الاستعلام. على سبيل المثال، إذا كان الاستعلام يقوم بإنشاء ملف مؤقت 20 ميغابايت:

  1. اتصل بقاعدة البيانات الخاصة بك باستخدام psql أو عميل PostgreSQL المفضل لديك.
  2. تعيين قيمة أولية work_mem أعلى قليلا من 20 ميغابايت لحساب عناوين إضافية عند المعالجة في الذاكرة. استخدم أمرا مثل: SET work_mem TO '25MB'.
  3. تشغيل EXPLAIN ANALYZE على الاستعلام المسبب للمشاكل في نفس جلسة العمل.
  4. راجع الإخراج ل "Sort Method: quicksort Memory: xkB". إذا كان يشير إلى "external merge Disk: xkB"، فرفع work_mem القيمة بشكل تزايدي وأعد الاختبار حتى "quicksort Memory" يظهر. ظهور "quicksort Memory" إشارات إلى أن الاستعلام يعمل الآن في الذاكرة.
  5. بعد تحديد القيمة من خلال هذا الأسلوب، يمكنك تطبيقها إما عالميا أو على مستويات أكثر دقة (كما هو موضح سابقا) لتناسب احتياجاتك التشغيلية.