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