إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
autovacuum_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | -1 |
| القيم المسموح بها | -1-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | autovacuum_work_mem |
commit_timestamp_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت للطابع الزمني للالتزام. حدد 0 لتحديد هذه القيمة كجزء من shared_buffers. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 0-131072 |
| نوع المعلمة | ثابت |
| Documentation | commit_timestamp_buffers |
dynamic_shared_memory_type
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | posix |
| القيم المسموح بها | posix |
| نوع المعلمة | للقراءة فقط |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | مضاعفات "work_mem" لاستخدامها في جداول التجزئة. |
| نوع البيانات | عددي |
| القيمة الافتراضية | 2 |
| القيم المسموح بها | 1-1000 |
| نوع المعلمة | ديناميكي |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | استخدام صفحات ضخمة على Linux أو Windows. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | try |
| القيم المسموح بها | on,off,try |
| نوع المعلمة | ثابت |
| Documentation | huge_pages |
الوصف
الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة الكتل التي يصل حجمها إلى 2 ميغابايت، على عكس الصفحات القياسية التي تبلغ سعتها 4 كيلوبايت.
يمكن أن يوفر استخدام الصفحات الضخمة مزايا أداء تقوم بتفريغ وحدة المعالجة المركزية بشكل فعال:
- إنها تقلل من النفقات العامة المرتبطة بمهام إدارة الذاكرة مثل عدد أقل من الأخطاء في المخزن المؤقت للترجمة (TLB).
- أنها تقصر الوقت اللازم لإدارة الذاكرة.
على وجه التحديد ، في PostgreSQL ، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.
ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص ، مما يزيد من استقرار الأداء.
Recommendations
- بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. قد يؤدي تعطيل الصفحات الضخمة إلى الإضرار بالأداء.
- إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يدعم ذلك، فاحتفظ بالإعداد
huge_pagesللانتقالTRYالسلس والأداء الأمثل.
ملاحظات خاصة ب Azure
بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores ، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. الميزة غير متوفرة للخوادم التي تحتوي على أقل من أربعة نواة افتراضية. يتم ضبط عدد الصفحات الضخمة تلقائيا في حالة تغيير أي إعدادات للذاكرة المشتركة، بما في ذلك التعديلات على shared_buffers.
huge_page_size
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | حجم الصفحة الضخمة التي يجب طلبها. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0 |
| نوع المعلمة | للقراءة فقط |
| Documentation | huge_page_size |
io_combine_limit
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | الحد من حجم قراءة البيانات وكتابتها. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 16 |
| القيم المسموح بها | 1-128 |
| نوع المعلمة | ديناميكي |
| Documentation | io_combine_limit |
io_max_combine_limit
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | حد على مستوى الخادم يثبت io_combine_limit. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 16 |
| القيم المسموح بها | 1-128 |
| نوع المعلمة | ديناميكي |
| Documentation | io_max_combine_limit |
io_max_concurrency
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | الحد الأقصى لعدد عمليات الإدخال والإخراج التي يمكن لعملية واحدة تنفيذها في وقت واحد. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 64 |
| القيم المسموح بها | -1-1024 |
| نوع المعلمة | ثابت |
| Documentation | io_max_concurrency |
io_method
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد طريقة تنفيذ الإدخال/الإخراج غير المتزامن. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | worker |
| القيم المسموح بها | worker,sync |
| نوع المعلمة | ثابت |
| Documentation | io_method |
io_workers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | عدد عمليات عامل IO، ل io_method=عامل. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 3 |
| القيم المسموح بها | 1-32 |
| نوع المعلمة | ديناميكي |
| Documentation | io_workers |
logical_decoding_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في فك التشفير المنطقي. يمكن استخدام هذا القدر من الذاكرة بواسطة كل مخزن مؤقت داخلي لإعادة الترتيب قبل الانسكاب على القرص. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 65536 |
| القيم المسموح بها | 64-2147483647 |
| نوع المعلمة | ديناميكي |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد الحد الأقصى للذاكرة المراد استخدامها في عمليات الصيانة. يتضمن ذلك عمليات مثل VACUUM و CREATE INDEX. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 1024-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | maintenance_work_mem |
الوصف
maintenance_work_mem هي معلمة تكوين في PostgreSQL. يتحكم في مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUM، CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام ، maintenance_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 جيبي بايت | 99,328 كيلوبايت |
| 4 جيجابيت | 157,696 كيلوبايت |
| 8 جيجابيت | 216,064 كيلوبايت |
| 16 جيجابيت | 274,432 كيلوبايت |
| 32 غيغابايت | 332,800 كيلوبايت |
| 48 جيبي بايت | 367,616 كيلوبايت |
| 64 جيبي بايت | 392,192 كيلوبايت |
| 80 جيبي بايت | 410,624 كيلوبايت |
| 128 جيبي بايت | 450,560 كيلوبايت |
| 160 جيجابايت | 468,992 كيلوبايت |
| 192 جيجابايت | 484,352 كيلوبايت |
| 256 غيغابايت | 508,928 كيلوبايت |
| 384 جيجابايت | 542,720 كيلوبايت |
| 432 جيجابايت | 552,960 كيلوبايت |
| 672 جيبي بايت | 590,848 كيلوبايت |
max_prepared_transactions
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0-262143 |
| نوع المعلمة | ثابت |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 2048 |
| القيم المسموح بها | 2048 |
| نوع المعلمة | للقراءة فقط |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | مقدار الذاكرة المشتركة الديناميكية المحجوزة عند بدء التشغيل. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0 |
| نوع المعلمة | للقراءة فقط |
| Documentation | min_dynamic_shared_memory |
multixact_member_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | لتعيين حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت لعضو MultiXact. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 32 |
| القيم المسموح بها | 16-131072 |
| نوع المعلمة | ثابت |
| Documentation | multixact_member_buffers |
multixact_offset_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت لإزاحة MultiXact. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 16 |
| القيم المسموح بها | 16-131072 |
| نوع المعلمة | ثابت |
| Documentation | multixact_offset_buffers |
notify_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يضبط حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت للرسائل LISTEN/NOTIFY. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 16 |
| القيم المسموح بها | 16-131072 |
| نوع المعلمة | ثابت |
| Documentation | notify_buffers |
serializable_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت للمعاملات القابلة للتسلسل. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 32 |
| القيم المسموح بها | 16-131072 |
| نوع المعلمة | ثابت |
| Documentation | serializable_buffers |
shared_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 16-1073741823 |
| نوع المعلمة | ثابت |
| Documentation | shared_buffers |
الوصف
shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. إنه بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه من قبل جميع عمليات قاعدة البيانات.
عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. في حالة وجود البيانات المطلوبة، يتم استردادها بسرعة وتجاوز قراءة القرص التي تستغرق وقتا أطول. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص ، وتقلل بشكل فعال من عدد عمليات الإدخال / الإخراج المطلوبة.
ملاحظات خاصة ب Azure
يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. أي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن ليس لها أي تأثير على القيمة الافتراضية لمعلمة الخادم shared_buffers لهذا المثيل.
في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.
بالنسبة للأجهزة الظاهرية التي تصل إلى 2 غيغابايت من الذاكرة، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 16384.
بالنسبة للأجهزة الظاهرية التي تزيد عن 2 غيغابايت، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 32768.
استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:
| حجم الذاكرة | shared_buffers |
|---|---|
| 2 جيبي بايت | 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | mmap |
| القيم المسموح بها | mmap |
| نوع المعلمة | للقراءة فقط |
| Documentation | shared_memory_type |
subtransaction_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت للمعاملات الفرعية. حدد 0 لتحديد هذه القيمة كجزء من shared_buffers. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 0-131072 |
| نوع المعلمة | ثابت |
| Documentation | subtransaction_buffers |
temp_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد الحد الأقصى لعدد المخازن المؤقتة التي تستخدمها كل جلسة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 100-1073741823 |
| نوع المعلمة | ديناميكي |
| Documentation | temp_buffers |
transaction_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت لحالة المعاملة. حدد 0 لتحديد هذه القيمة كجزء من shared_buffers. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 0-131072 |
| نوع المعلمة | ثابت |
| Documentation | transaction_buffers |
vacuum_buffer_usage_limit
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين حجم تجمع المخزن المؤقت ل فراغ وتحليل وإخلاء تلقائي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 2048 |
| القيم المسموح بها | 0-16777216 |
| نوع المعلمة | ديناميكي |
| Documentation | vacuum_buffer_usage_limit |
work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة المراد استخدامها لمساحات عمل الاستعلام. يمكن استخدام هذا القدر من الذاكرة بواسطة كل عملية فرز داخلية وجدول تجزئة قبل التبديل إلى ملفات القرص المؤقتة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 4096 |
| القيم المسموح بها | 4096-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | work_mem |
الوصف
تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن الأمثلة على هذه العمليات الفرز والتجزئة.
على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة أو لكل استعلام. من خلال تعيين حجم مناسب work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة على القرص.
النقاط الرئيسية
-
ذاكرة الاتصال الخاصة:
work_memهي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. تختلف هذه الذاكرة عن منطقة الذاكرة المشتركة التيshared_buffersتستخدمها. -
الاستخدام الخاص بالاستعلام: لا تستخدم
work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلبSELECT 1الاستعلامات البسيطة مثلwork_mem. ومع ذلك ، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء منwork_mem. -
العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر نهايات خلفية متوازية متعددة، يمكن أن تستخدم كل واجهة خلفية جزءا واحدا أو عدة أجزاء من
work_mem.
مراقبة وضبط work_mem
من الضروري مراقبة أداء نظامك باستمرار وضبطه work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:
-
إحصاءات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تنشئ ملفات مؤقتة. يشير هذا الوضع إلى الحاجة المحتملة للزيادة
work_mem. - أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب الملفات المؤقتة العالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشكلات.
تعديل الحبوب
أثناء إدارة المعلمة work_mem ، غالبا ما يكون اعتماد نهج تعديل دقيق أكثر كفاءة بدلا من تعيين قيمة عالمية. يضمن هذا النهج تخصيص الذاكرة بحكمة بناء على الاحتياجات المحددة للعمليات والمستخدمين. كما أنه يقلل من خطر مواجهة مشكلات نفاد الذاكرة. إليك كيفية القيام بذلك:
مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تتطلب ذاكرة مكثفة، ففكر في
work_memتخصيص القيمة لهذا المستخدم. استخدم الأمرALTER ROLEلتحسين أداء عمليات المستخدم.مستوى الوظيفة / الإجراء: إذا كانت وظائف أو إجراءات معينة تنشئ ملفات مؤقتة كبيرة ، فقد تكون زيادة القيمة
work_memعلى مستوى الوظيفة أو الإجراء المحدد مفيدة. استخدم الأمرALTER FUNCTIONorALTER 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | -1 |
| القيم المسموح بها | -1-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | autovacuum_work_mem |
commit_timestamp_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت للطابع الزمني للالتزام. حدد 0 لتحديد هذه القيمة كجزء من shared_buffers. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 0-131072 |
| نوع المعلمة | ثابت |
| Documentation | commit_timestamp_buffers |
dynamic_shared_memory_type
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | posix |
| القيم المسموح بها | posix |
| نوع المعلمة | للقراءة فقط |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | مضاعفات "work_mem" لاستخدامها في جداول التجزئة. |
| نوع البيانات | عددي |
| القيمة الافتراضية | 2 |
| القيم المسموح بها | 1-1000 |
| نوع المعلمة | ديناميكي |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | استخدام صفحات ضخمة على Linux أو Windows. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | try |
| القيم المسموح بها | on,off,try |
| نوع المعلمة | ثابت |
| Documentation | huge_pages |
الوصف
الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة الكتل التي يصل حجمها إلى 2 ميغابايت، على عكس الصفحات القياسية التي تبلغ سعتها 4 كيلوبايت.
يمكن أن يوفر استخدام الصفحات الضخمة مزايا أداء تقوم بتفريغ وحدة المعالجة المركزية بشكل فعال:
- إنها تقلل من النفقات العامة المرتبطة بمهام إدارة الذاكرة مثل عدد أقل من الأخطاء في المخزن المؤقت للترجمة (TLB).
- أنها تقصر الوقت اللازم لإدارة الذاكرة.
على وجه التحديد ، في PostgreSQL ، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.
ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص ، مما يزيد من استقرار الأداء.
Recommendations
- بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. قد يؤدي تعطيل الصفحات الضخمة إلى الإضرار بالأداء.
- إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يدعم ذلك، فاحتفظ بالإعداد
huge_pagesللانتقالTRYالسلس والأداء الأمثل.
ملاحظات خاصة ب Azure
بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores ، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. الميزة غير متوفرة للخوادم التي تحتوي على أقل من أربعة نواة افتراضية. يتم ضبط عدد الصفحات الضخمة تلقائيا في حالة تغيير أي إعدادات للذاكرة المشتركة، بما في ذلك التعديلات على shared_buffers.
huge_page_size
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | حجم الصفحة الضخمة التي يجب طلبها. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0 |
| نوع المعلمة | للقراءة فقط |
| Documentation | huge_page_size |
io_combine_limit
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | الحد من حجم قراءة البيانات وكتابتها. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 16 |
| القيم المسموح بها | 16 |
| نوع المعلمة | للقراءة فقط |
| Documentation | io_combine_limit |
logical_decoding_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في فك التشفير المنطقي. يمكن استخدام هذا القدر من الذاكرة بواسطة كل مخزن مؤقت داخلي لإعادة الترتيب قبل الانسكاب على القرص. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 65536 |
| القيم المسموح بها | 64-2147483647 |
| نوع المعلمة | ديناميكي |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد الحد الأقصى للذاكرة المراد استخدامها في عمليات الصيانة. يتضمن ذلك عمليات مثل VACUUM و CREATE INDEX. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 1024-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | maintenance_work_mem |
الوصف
maintenance_work_mem هي معلمة تكوين في PostgreSQL. يتحكم في مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUM، CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام ، maintenance_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 جيبي بايت | 99,328 كيلوبايت |
| 4 جيجابيت | 157,696 كيلوبايت |
| 8 جيجابيت | 216,064 كيلوبايت |
| 16 جيجابيت | 274,432 كيلوبايت |
| 32 غيغابايت | 332,800 كيلوبايت |
| 48 جيبي بايت | 367,616 كيلوبايت |
| 64 جيبي بايت | 392,192 كيلوبايت |
| 80 جيبي بايت | 410,624 كيلوبايت |
| 128 جيبي بايت | 450,560 كيلوبايت |
| 160 جيجابايت | 468,992 كيلوبايت |
| 192 جيجابايت | 484,352 كيلوبايت |
| 256 غيغابايت | 508,928 كيلوبايت |
| 384 جيجابايت | 542,720 كيلوبايت |
| 432 جيجابايت | 552,960 كيلوبايت |
| 672 جيبي بايت | 590,848 كيلوبايت |
max_prepared_transactions
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0-262143 |
| نوع المعلمة | ثابت |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 2048 |
| القيم المسموح بها | 2048 |
| نوع المعلمة | للقراءة فقط |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | مقدار الذاكرة المشتركة الديناميكية المحجوزة عند بدء التشغيل. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0 |
| نوع المعلمة | للقراءة فقط |
| Documentation | min_dynamic_shared_memory |
multixact_member_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | لتعيين حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت لعضو MultiXact. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 32 |
| القيم المسموح بها | 16-131072 |
| نوع المعلمة | ثابت |
| Documentation | multixact_member_buffers |
multixact_offset_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت لإزاحة MultiXact. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 16 |
| القيم المسموح بها | 16-131072 |
| نوع المعلمة | ثابت |
| Documentation | multixact_offset_buffers |
notify_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يضبط حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت للرسائل LISTEN/NOTIFY. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 16 |
| القيم المسموح بها | 16-131072 |
| نوع المعلمة | ثابت |
| Documentation | notify_buffers |
serializable_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت للمعاملات القابلة للتسلسل. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 32 |
| القيم المسموح بها | 16-131072 |
| نوع المعلمة | ثابت |
| Documentation | serializable_buffers |
shared_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 16-1073741823 |
| نوع المعلمة | ثابت |
| Documentation | shared_buffers |
الوصف
shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. إنه بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه من قبل جميع عمليات قاعدة البيانات.
عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. في حالة وجود البيانات المطلوبة، يتم استردادها بسرعة وتجاوز قراءة القرص التي تستغرق وقتا أطول. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص ، وتقلل بشكل فعال من عدد عمليات الإدخال / الإخراج المطلوبة.
ملاحظات خاصة ب Azure
يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. أي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن ليس لها أي تأثير على القيمة الافتراضية لمعلمة الخادم shared_buffers لهذا المثيل.
في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.
بالنسبة للأجهزة الظاهرية التي تصل إلى 2 غيغابايت من الذاكرة، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 16384.
بالنسبة للأجهزة الظاهرية التي تزيد عن 2 غيغابايت، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 32768.
استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:
| حجم الذاكرة | shared_buffers |
|---|---|
| 2 جيبي بايت | 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | mmap |
| القيم المسموح بها | mmap |
| نوع المعلمة | للقراءة فقط |
| Documentation | shared_memory_type |
subtransaction_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت للمعاملات الفرعية. حدد 0 لتحديد هذه القيمة كجزء من shared_buffers. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 0-131072 |
| نوع المعلمة | ثابت |
| Documentation | subtransaction_buffers |
temp_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد الحد الأقصى لعدد المخازن المؤقتة التي تستخدمها كل جلسة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 100-1073741823 |
| نوع المعلمة | ديناميكي |
| Documentation | temp_buffers |
transaction_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | يحدد حجم تجمع المخزن المؤقت المخصص المستخدم لذاكرة التخزين المؤقت لحالة المعاملة. حدد 0 لتحديد هذه القيمة كجزء من shared_buffers. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 0-131072 |
| نوع المعلمة | ثابت |
| Documentation | transaction_buffers |
vacuum_buffer_usage_limit
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين حجم تجمع المخزن المؤقت ل فراغ وتحليل وإخلاء تلقائي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 2048 |
| القيم المسموح بها | 0-16777216 |
| نوع المعلمة | ديناميكي |
| Documentation | vacuum_buffer_usage_limit |
work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة المراد استخدامها لمساحات عمل الاستعلام. يمكن استخدام هذا القدر من الذاكرة بواسطة كل عملية فرز داخلية وجدول تجزئة قبل التبديل إلى ملفات القرص المؤقتة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 4096 |
| القيم المسموح بها | 4096-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | work_mem |
الوصف
تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن الأمثلة على هذه العمليات الفرز والتجزئة.
على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة أو لكل استعلام. من خلال تعيين حجم مناسب work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة على القرص.
النقاط الرئيسية
-
ذاكرة الاتصال الخاصة:
work_memهي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. تختلف هذه الذاكرة عن منطقة الذاكرة المشتركة التيshared_buffersتستخدمها. -
الاستخدام الخاص بالاستعلام: لا تستخدم
work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلبSELECT 1الاستعلامات البسيطة مثلwork_mem. ومع ذلك ، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء منwork_mem. -
العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر نهايات خلفية متوازية متعددة، يمكن أن تستخدم كل واجهة خلفية جزءا واحدا أو عدة أجزاء من
work_mem.
مراقبة وضبط work_mem
من الضروري مراقبة أداء نظامك باستمرار وضبطه work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:
-
إحصاءات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تنشئ ملفات مؤقتة. يشير هذا الوضع إلى الحاجة المحتملة للزيادة
work_mem. - أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب الملفات المؤقتة العالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشكلات.
تعديل الحبوب
أثناء إدارة المعلمة work_mem ، غالبا ما يكون اعتماد نهج تعديل دقيق أكثر كفاءة بدلا من تعيين قيمة عالمية. يضمن هذا النهج تخصيص الذاكرة بحكمة بناء على الاحتياجات المحددة للعمليات والمستخدمين. كما أنه يقلل من خطر مواجهة مشكلات نفاد الذاكرة. إليك كيفية القيام بذلك:
مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تتطلب ذاكرة مكثفة، ففكر في
work_memتخصيص القيمة لهذا المستخدم. استخدم الأمرALTER ROLEلتحسين أداء عمليات المستخدم.مستوى الوظيفة / الإجراء: إذا كانت وظائف أو إجراءات معينة تنشئ ملفات مؤقتة كبيرة ، فقد تكون زيادة القيمة
work_memعلى مستوى الوظيفة أو الإجراء المحدد مفيدة. استخدم الأمرALTER FUNCTIONorALTER 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | -1 |
| القيم المسموح بها | -1-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | posix |
| القيم المسموح بها | posix |
| نوع المعلمة | للقراءة فقط |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | متعدد work_mem لاستخدامه لجداول التجزئة. |
| نوع البيانات | عددي |
| القيمة الافتراضية | 2 |
| القيم المسموح بها | 1-1000 |
| نوع المعلمة | ديناميكي |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | try |
| القيم المسموح بها | on,off,try |
| نوع المعلمة | ثابت |
| Documentation | huge_pages |
الوصف
الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة الكتل التي يصل حجمها إلى 2 ميغابايت، على عكس الصفحات القياسية التي تبلغ سعتها 4 كيلوبايت.
يمكن أن يوفر استخدام الصفحات الضخمة مزايا أداء تقوم بتفريغ وحدة المعالجة المركزية بشكل فعال:
- إنها تقلل من النفقات العامة المرتبطة بمهام إدارة الذاكرة مثل عدد أقل من الأخطاء في المخزن المؤقت للترجمة (TLB).
- أنها تقصر الوقت اللازم لإدارة الذاكرة.
على وجه التحديد ، في PostgreSQL ، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.
ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص ، مما يزيد من استقرار الأداء.
Recommendations
- بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. قد يؤدي تعطيل الصفحات الضخمة إلى الإضرار بالأداء.
- إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يدعم ذلك، فاحتفظ بالإعداد
huge_pagesللانتقالTRYالسلس والأداء الأمثل.
ملاحظات خاصة ب Azure
بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores ، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. الميزة غير متوفرة للخوادم التي تحتوي على أقل من أربعة نواة افتراضية. يتم ضبط عدد الصفحات الضخمة تلقائيا في حالة تغيير أي إعدادات للذاكرة المشتركة، بما في ذلك التعديلات على shared_buffers.
huge_page_size
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | حجم الصفحة الضخمة التي يجب طلبها. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0 |
| نوع المعلمة | للقراءة فقط |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في فك التشفير المنطقي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 65536 |
| القيم المسموح بها | 64-2147483647 |
| نوع المعلمة | ديناميكي |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 1024-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | maintenance_work_mem |
الوصف
maintenance_work_mem هي معلمة تكوين في PostgreSQL. يتحكم في مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUM، CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام ، maintenance_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 جيبي بايت | 99,328 كيلوبايت |
| 4 جيجابيت | 157,696 كيلوبايت |
| 8 جيجابيت | 216,064 كيلوبايت |
| 16 جيجابيت | 274,432 كيلوبايت |
| 32 غيغابايت | 332,800 كيلوبايت |
| 48 جيبي بايت | 367,616 كيلوبايت |
| 64 جيبي بايت | 392,192 كيلوبايت |
| 80 جيبي بايت | 410,624 كيلوبايت |
| 128 جيبي بايت | 450,560 كيلوبايت |
| 160 جيجابايت | 468,992 كيلوبايت |
| 192 جيجابايت | 484,352 كيلوبايت |
| 256 غيغابايت | 508,928 كيلوبايت |
| 384 جيجابايت | 542,720 كيلوبايت |
| 432 جيجابايت | 552,960 كيلوبايت |
| 672 جيبي بايت | 590,848 كيلوبايت |
max_prepared_transactions
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0-262143 |
| نوع المعلمة | ثابت |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 2048 |
| القيم المسموح بها | 2048 |
| نوع المعلمة | للقراءة فقط |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | مقدار الذاكرة المشتركة الديناميكية المحجوزة عند بدء التشغيل. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0 |
| نوع المعلمة | للقراءة فقط |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 16-1073741823 |
| نوع المعلمة | ثابت |
| Documentation | shared_buffers |
الوصف
shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. إنه بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه من قبل جميع عمليات قاعدة البيانات.
عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. في حالة وجود البيانات المطلوبة، يتم استردادها بسرعة وتجاوز قراءة القرص التي تستغرق وقتا أطول. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص ، وتقلل بشكل فعال من عدد عمليات الإدخال / الإخراج المطلوبة.
ملاحظات خاصة ب Azure
يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. أي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن ليس لها أي تأثير على القيمة الافتراضية لمعلمة الخادم shared_buffers لهذا المثيل.
في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.
بالنسبة للأجهزة الظاهرية التي تصل إلى 2 غيغابايت من الذاكرة، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 16384.
بالنسبة للأجهزة الظاهرية التي تزيد عن 2 غيغابايت، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 32768.
استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:
| حجم الذاكرة | shared_buffers |
|---|---|
| 2 جيبي بايت | 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | mmap |
| القيم المسموح بها | mmap |
| نوع المعلمة | للقراءة فقط |
| Documentation | shared_memory_type |
temp_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 100-1073741823 |
| نوع المعلمة | ديناميكي |
| Documentation | temp_buffers |
vacuum_buffer_usage_limit
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين حجم تجمع المخزن المؤقت ل فراغ وتحليل وإخلاء تلقائي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 256 |
| القيم المسموح بها | 0-16777216 |
| نوع المعلمة | ديناميكي |
| Documentation | vacuum_buffer_usage_limit |
work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 4096 |
| القيم المسموح بها | 4096-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | work_mem |
الوصف
تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن الأمثلة على هذه العمليات الفرز والتجزئة.
على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة أو لكل استعلام. من خلال تعيين حجم مناسب work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة على القرص.
النقاط الرئيسية
-
ذاكرة الاتصال الخاصة:
work_memهي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. تختلف هذه الذاكرة عن منطقة الذاكرة المشتركة التيshared_buffersتستخدمها. -
الاستخدام الخاص بالاستعلام: لا تستخدم
work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلبSELECT 1الاستعلامات البسيطة مثلwork_mem. ومع ذلك ، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء منwork_mem. -
العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر نهايات خلفية متوازية متعددة، يمكن أن تستخدم كل واجهة خلفية جزءا واحدا أو عدة أجزاء من
work_mem.
مراقبة وضبط work_mem
من الضروري مراقبة أداء نظامك باستمرار وضبطه work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:
-
إحصاءات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تنشئ ملفات مؤقتة. يشير هذا الوضع إلى الحاجة المحتملة للزيادة
work_mem. - أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب الملفات المؤقتة العالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشكلات.
تعديل الحبوب
أثناء إدارة المعلمة work_mem ، غالبا ما يكون اعتماد نهج تعديل دقيق أكثر كفاءة بدلا من تعيين قيمة عالمية. يضمن هذا النهج تخصيص الذاكرة بحكمة بناء على الاحتياجات المحددة للعمليات والمستخدمين. كما أنه يقلل من خطر مواجهة مشكلات نفاد الذاكرة. إليك كيفية القيام بذلك:
مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تتطلب ذاكرة مكثفة، ففكر في
work_memتخصيص القيمة لهذا المستخدم. استخدم الأمرALTER ROLEلتحسين أداء عمليات المستخدم.مستوى الوظيفة / الإجراء: إذا كانت وظائف أو إجراءات معينة تنشئ ملفات مؤقتة كبيرة ، فقد تكون زيادة القيمة
work_memعلى مستوى الوظيفة أو الإجراء المحدد مفيدة. استخدم الأمرALTER FUNCTIONorALTER 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | -1 |
| القيم المسموح بها | -1-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | posix |
| القيم المسموح بها | posix |
| نوع المعلمة | للقراءة فقط |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | متعدد work_mem لاستخدامه لجداول التجزئة. |
| نوع البيانات | عددي |
| القيمة الافتراضية | 2 |
| القيم المسموح بها | 1-1000 |
| نوع المعلمة | ديناميكي |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | try |
| القيم المسموح بها | on,off,try |
| نوع المعلمة | ثابت |
| Documentation | huge_pages |
الوصف
الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة الكتل التي يصل حجمها إلى 2 ميغابايت، على عكس الصفحات القياسية التي تبلغ سعتها 4 كيلوبايت.
يمكن أن يوفر استخدام الصفحات الضخمة مزايا أداء تقوم بتفريغ وحدة المعالجة المركزية بشكل فعال:
- إنها تقلل من النفقات العامة المرتبطة بمهام إدارة الذاكرة مثل عدد أقل من الأخطاء في المخزن المؤقت للترجمة (TLB).
- أنها تقصر الوقت اللازم لإدارة الذاكرة.
على وجه التحديد ، في PostgreSQL ، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.
ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص ، مما يزيد من استقرار الأداء.
Recommendations
- بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. قد يؤدي تعطيل الصفحات الضخمة إلى الإضرار بالأداء.
- إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يدعم ذلك، فاحتفظ بالإعداد
huge_pagesللانتقالTRYالسلس والأداء الأمثل.
ملاحظات خاصة ب Azure
بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores ، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. الميزة غير متوفرة للخوادم التي تحتوي على أقل من أربعة نواة افتراضية. يتم ضبط عدد الصفحات الضخمة تلقائيا في حالة تغيير أي إعدادات للذاكرة المشتركة، بما في ذلك التعديلات على shared_buffers.
huge_page_size
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | حجم الصفحة الضخمة التي يجب طلبها. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0 |
| نوع المعلمة | للقراءة فقط |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في فك التشفير المنطقي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 65536 |
| القيم المسموح بها | 64-2147483647 |
| نوع المعلمة | ديناميكي |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 1024-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | maintenance_work_mem |
الوصف
maintenance_work_mem هي معلمة تكوين في PostgreSQL. يتحكم في مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUM، CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام ، maintenance_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 جيبي بايت | 99,328 كيلوبايت |
| 4 جيجابيت | 157,696 كيلوبايت |
| 8 جيجابيت | 216,064 كيلوبايت |
| 16 جيجابيت | 274,432 كيلوبايت |
| 32 غيغابايت | 332,800 كيلوبايت |
| 48 جيبي بايت | 367,616 كيلوبايت |
| 64 جيبي بايت | 392,192 كيلوبايت |
| 80 جيبي بايت | 410,624 كيلوبايت |
| 128 جيبي بايت | 450,560 كيلوبايت |
| 160 جيجابايت | 468,992 كيلوبايت |
| 192 جيجابايت | 484,352 كيلوبايت |
| 256 غيغابايت | 508,928 كيلوبايت |
| 384 جيجابايت | 542,720 كيلوبايت |
| 432 جيجابايت | 552,960 كيلوبايت |
| 672 جيبي بايت | 590,848 كيلوبايت |
max_prepared_transactions
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0-262143 |
| نوع المعلمة | ثابت |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 2048 |
| القيم المسموح بها | 2048 |
| نوع المعلمة | للقراءة فقط |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | مقدار الذاكرة المشتركة الديناميكية المحجوزة عند بدء التشغيل. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0 |
| نوع المعلمة | للقراءة فقط |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 16-1073741823 |
| نوع المعلمة | ثابت |
| Documentation | shared_buffers |
الوصف
shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. إنه بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه من قبل جميع عمليات قاعدة البيانات.
عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. في حالة وجود البيانات المطلوبة، يتم استردادها بسرعة وتجاوز قراءة القرص التي تستغرق وقتا أطول. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص ، وتقلل بشكل فعال من عدد عمليات الإدخال / الإخراج المطلوبة.
ملاحظات خاصة ب Azure
يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. أي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن ليس لها أي تأثير على القيمة الافتراضية لمعلمة الخادم shared_buffers لهذا المثيل.
في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.
بالنسبة للأجهزة الظاهرية التي تصل إلى 2 غيغابايت من الذاكرة، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 16384.
بالنسبة للأجهزة الظاهرية التي تزيد عن 2 غيغابايت، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 32768.
استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:
| حجم الذاكرة | shared_buffers |
|---|---|
| 2 جيبي بايت | 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | mmap |
| القيم المسموح بها | mmap |
| نوع المعلمة | للقراءة فقط |
| Documentation | shared_memory_type |
temp_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 100-1073741823 |
| نوع المعلمة | ديناميكي |
| Documentation | temp_buffers |
work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 4096 |
| القيم المسموح بها | 4096-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | work_mem |
الوصف
تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن الأمثلة على هذه العمليات الفرز والتجزئة.
على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة أو لكل استعلام. من خلال تعيين حجم مناسب work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة على القرص.
النقاط الرئيسية
-
ذاكرة الاتصال الخاصة:
work_memهي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. تختلف هذه الذاكرة عن منطقة الذاكرة المشتركة التيshared_buffersتستخدمها. -
الاستخدام الخاص بالاستعلام: لا تستخدم
work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلبSELECT 1الاستعلامات البسيطة مثلwork_mem. ومع ذلك ، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء منwork_mem. -
العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر نهايات خلفية متوازية متعددة، يمكن أن تستخدم كل واجهة خلفية جزءا واحدا أو عدة أجزاء من
work_mem.
مراقبة وضبط work_mem
من الضروري مراقبة أداء نظامك باستمرار وضبطه work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:
-
إحصاءات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تنشئ ملفات مؤقتة. يشير هذا الوضع إلى الحاجة المحتملة للزيادة
work_mem. - أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب الملفات المؤقتة العالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشكلات.
تعديل الحبوب
أثناء إدارة المعلمة work_mem ، غالبا ما يكون اعتماد نهج تعديل دقيق أكثر كفاءة بدلا من تعيين قيمة عالمية. يضمن هذا النهج تخصيص الذاكرة بحكمة بناء على الاحتياجات المحددة للعمليات والمستخدمين. كما أنه يقلل من خطر مواجهة مشكلات نفاد الذاكرة. إليك كيفية القيام بذلك:
مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تتطلب ذاكرة مكثفة، ففكر في
work_memتخصيص القيمة لهذا المستخدم. استخدم الأمرALTER ROLEلتحسين أداء عمليات المستخدم.مستوى الوظيفة / الإجراء: إذا كانت وظائف أو إجراءات معينة تنشئ ملفات مؤقتة كبيرة ، فقد تكون زيادة القيمة
work_memعلى مستوى الوظيفة أو الإجراء المحدد مفيدة. استخدم الأمرALTER FUNCTIONorALTER 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | -1 |
| القيم المسموح بها | -1-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | posix |
| القيم المسموح بها | posix |
| نوع المعلمة | للقراءة فقط |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | متعدد work_mem لاستخدامه لجداول التجزئة. |
| نوع البيانات | عددي |
| القيمة الافتراضية | 1 |
| القيم المسموح بها | 1-1000 |
| نوع المعلمة | ديناميكي |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | try |
| القيم المسموح بها | on,off,try |
| نوع المعلمة | ثابت |
| Documentation | huge_pages |
الوصف
الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة الكتل التي يصل حجمها إلى 2 ميغابايت، على عكس الصفحات القياسية التي تبلغ سعتها 4 كيلوبايت.
يمكن أن يوفر استخدام الصفحات الضخمة مزايا أداء تقوم بتفريغ وحدة المعالجة المركزية بشكل فعال:
- إنها تقلل من النفقات العامة المرتبطة بمهام إدارة الذاكرة مثل عدد أقل من الأخطاء في المخزن المؤقت للترجمة (TLB).
- أنها تقصر الوقت اللازم لإدارة الذاكرة.
على وجه التحديد ، في PostgreSQL ، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.
ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص ، مما يزيد من استقرار الأداء.
Recommendations
- بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. قد يؤدي تعطيل الصفحات الضخمة إلى الإضرار بالأداء.
- إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يدعم ذلك، فاحتفظ بالإعداد
huge_pagesللانتقالTRYالسلس والأداء الأمثل.
ملاحظات خاصة ب Azure
بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores ، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. الميزة غير متوفرة للخوادم التي تحتوي على أقل من أربعة نواة افتراضية. يتم ضبط عدد الصفحات الضخمة تلقائيا في حالة تغيير أي إعدادات للذاكرة المشتركة، بما في ذلك التعديلات على shared_buffers.
huge_page_size
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | حجم الصفحة الضخمة التي يجب طلبها. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0 |
| نوع المعلمة | للقراءة فقط |
| Documentation | huge_page_size |
logical_decoding_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في فك التشفير المنطقي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 65536 |
| القيم المسموح بها | 64-2147483647 |
| نوع المعلمة | ديناميكي |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 1024-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | maintenance_work_mem |
الوصف
maintenance_work_mem هي معلمة تكوين في PostgreSQL. يتحكم في مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUM، CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام ، maintenance_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 جيبي بايت | 99,328 كيلوبايت |
| 4 جيجابيت | 157,696 كيلوبايت |
| 8 جيجابيت | 216,064 كيلوبايت |
| 16 جيجابيت | 274,432 كيلوبايت |
| 32 غيغابايت | 332,800 كيلوبايت |
| 48 جيبي بايت | 367,616 كيلوبايت |
| 64 جيبي بايت | 392,192 كيلوبايت |
| 80 جيبي بايت | 410,624 كيلوبايت |
| 128 جيبي بايت | 450,560 كيلوبايت |
| 160 جيجابايت | 468,992 كيلوبايت |
| 192 جيجابايت | 484,352 كيلوبايت |
| 256 غيغابايت | 508,928 كيلوبايت |
| 384 جيجابايت | 542,720 كيلوبايت |
| 432 جيجابايت | 552,960 كيلوبايت |
| 672 جيبي بايت | 590,848 كيلوبايت |
max_prepared_transactions
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0-262143 |
| نوع المعلمة | ثابت |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 2048 |
| القيم المسموح بها | 2048 |
| نوع المعلمة | للقراءة فقط |
| Documentation | max_stack_depth |
min_dynamic_shared_memory
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | مقدار الذاكرة المشتركة الديناميكية المحجوزة عند بدء التشغيل. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0 |
| نوع المعلمة | للقراءة فقط |
| Documentation | min_dynamic_shared_memory |
shared_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 16-1073741823 |
| نوع المعلمة | ثابت |
| Documentation | shared_buffers |
الوصف
shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. إنه بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه من قبل جميع عمليات قاعدة البيانات.
عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. في حالة وجود البيانات المطلوبة، يتم استردادها بسرعة وتجاوز قراءة القرص التي تستغرق وقتا أطول. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص ، وتقلل بشكل فعال من عدد عمليات الإدخال / الإخراج المطلوبة.
ملاحظات خاصة ب Azure
يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. أي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن ليس لها أي تأثير على القيمة الافتراضية لمعلمة الخادم shared_buffers لهذا المثيل.
في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.
بالنسبة للأجهزة الظاهرية التي تصل إلى 2 غيغابايت من الذاكرة، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 16384.
بالنسبة للأجهزة الظاهرية التي تزيد عن 2 غيغابايت، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 32768.
استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:
| حجم الذاكرة | shared_buffers |
|---|---|
| 2 جيبي بايت | 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | mmap |
| القيم المسموح بها | mmap |
| نوع المعلمة | للقراءة فقط |
| Documentation | shared_memory_type |
temp_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 100-1073741823 |
| نوع المعلمة | ديناميكي |
| Documentation | temp_buffers |
work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 4096 |
| القيم المسموح بها | 4096-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | work_mem |
الوصف
تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن الأمثلة على هذه العمليات الفرز والتجزئة.
على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة أو لكل استعلام. من خلال تعيين حجم مناسب work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة على القرص.
النقاط الرئيسية
-
ذاكرة الاتصال الخاصة:
work_memهي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. تختلف هذه الذاكرة عن منطقة الذاكرة المشتركة التيshared_buffersتستخدمها. -
الاستخدام الخاص بالاستعلام: لا تستخدم
work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلبSELECT 1الاستعلامات البسيطة مثلwork_mem. ومع ذلك ، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء منwork_mem. -
العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر نهايات خلفية متوازية متعددة، يمكن أن تستخدم كل واجهة خلفية جزءا واحدا أو عدة أجزاء من
work_mem.
مراقبة وضبط work_mem
من الضروري مراقبة أداء نظامك باستمرار وضبطه work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:
-
إحصاءات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تنشئ ملفات مؤقتة. يشير هذا الوضع إلى الحاجة المحتملة للزيادة
work_mem. - أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب الملفات المؤقتة العالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشكلات.
تعديل الحبوب
أثناء إدارة المعلمة work_mem ، غالبا ما يكون اعتماد نهج تعديل دقيق أكثر كفاءة بدلا من تعيين قيمة عالمية. يضمن هذا النهج تخصيص الذاكرة بحكمة بناء على الاحتياجات المحددة للعمليات والمستخدمين. كما أنه يقلل من خطر مواجهة مشكلات نفاد الذاكرة. إليك كيفية القيام بذلك:
مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تتطلب ذاكرة مكثفة، ففكر في
work_memتخصيص القيمة لهذا المستخدم. استخدم الأمرALTER ROLEلتحسين أداء عمليات المستخدم.مستوى الوظيفة / الإجراء: إذا كانت وظائف أو إجراءات معينة تنشئ ملفات مؤقتة كبيرة ، فقد تكون زيادة القيمة
work_memعلى مستوى الوظيفة أو الإجراء المحدد مفيدة. استخدم الأمرALTER FUNCTIONorALTER 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | -1 |
| القيم المسموح بها | -1-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | posix |
| القيم المسموح بها | posix |
| نوع المعلمة | للقراءة فقط |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | متعدد work_mem لاستخدامه لجداول التجزئة. |
| نوع البيانات | عددي |
| القيمة الافتراضية | 1 |
| القيم المسموح بها | 1-1000 |
| نوع المعلمة | ديناميكي |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | try |
| القيم المسموح بها | on,off,try |
| نوع المعلمة | ثابت |
| Documentation | huge_pages |
الوصف
الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة الكتل التي يصل حجمها إلى 2 ميغابايت، على عكس الصفحات القياسية التي تبلغ سعتها 4 كيلوبايت.
يمكن أن يوفر استخدام الصفحات الضخمة مزايا أداء تقوم بتفريغ وحدة المعالجة المركزية بشكل فعال:
- إنها تقلل من النفقات العامة المرتبطة بمهام إدارة الذاكرة مثل عدد أقل من الأخطاء في المخزن المؤقت للترجمة (TLB).
- أنها تقصر الوقت اللازم لإدارة الذاكرة.
على وجه التحديد ، في PostgreSQL ، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.
ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص ، مما يزيد من استقرار الأداء.
Recommendations
- بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. قد يؤدي تعطيل الصفحات الضخمة إلى الإضرار بالأداء.
- إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يدعم ذلك، فاحتفظ بالإعداد
huge_pagesللانتقالTRYالسلس والأداء الأمثل.
ملاحظات خاصة ب Azure
بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores ، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. الميزة غير متوفرة للخوادم التي تحتوي على أقل من أربعة نواة افتراضية. يتم ضبط عدد الصفحات الضخمة تلقائيا في حالة تغيير أي إعدادات للذاكرة المشتركة، بما في ذلك التعديلات على shared_buffers.
logical_decoding_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في فك التشفير المنطقي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 65536 |
| القيم المسموح بها | 64-2147483647 |
| نوع المعلمة | ديناميكي |
| Documentation | logical_decoding_work_mem |
maintenance_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 1024-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | maintenance_work_mem |
الوصف
maintenance_work_mem هي معلمة تكوين في PostgreSQL. يتحكم في مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUM، CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام ، maintenance_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 جيبي بايت | 99,328 كيلوبايت |
| 4 جيجابيت | 157,696 كيلوبايت |
| 8 جيجابيت | 216,064 كيلوبايت |
| 16 جيجابيت | 274,432 كيلوبايت |
| 32 غيغابايت | 332,800 كيلوبايت |
| 48 جيبي بايت | 367,616 كيلوبايت |
| 64 جيبي بايت | 392,192 كيلوبايت |
| 80 جيبي بايت | 410,624 كيلوبايت |
| 128 جيبي بايت | 450,560 كيلوبايت |
| 160 جيجابايت | 468,992 كيلوبايت |
| 192 جيجابايت | 484,352 كيلوبايت |
| 256 غيغابايت | 508,928 كيلوبايت |
| 384 جيجابايت | 542,720 كيلوبايت |
| 432 جيجابايت | 552,960 كيلوبايت |
| 672 جيبي بايت | 590,848 كيلوبايت |
max_prepared_transactions
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0-262143 |
| نوع المعلمة | ثابت |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 2048 |
| القيم المسموح بها | 2048 |
| نوع المعلمة | للقراءة فقط |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 16-1073741823 |
| نوع المعلمة | ثابت |
| Documentation | shared_buffers |
الوصف
shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. إنه بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه من قبل جميع عمليات قاعدة البيانات.
عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. في حالة وجود البيانات المطلوبة، يتم استردادها بسرعة وتجاوز قراءة القرص التي تستغرق وقتا أطول. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص ، وتقلل بشكل فعال من عدد عمليات الإدخال / الإخراج المطلوبة.
ملاحظات خاصة ب Azure
يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. أي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن ليس لها أي تأثير على القيمة الافتراضية لمعلمة الخادم shared_buffers لهذا المثيل.
في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.
بالنسبة للأجهزة الظاهرية التي تصل إلى 2 غيغابايت من الذاكرة، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 16384.
بالنسبة للأجهزة الظاهرية التي تزيد عن 2 غيغابايت، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 32768.
استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:
| حجم الذاكرة | shared_buffers |
|---|---|
| 2 جيبي بايت | 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | mmap |
| القيم المسموح بها | mmap |
| نوع المعلمة | للقراءة فقط |
| Documentation | shared_memory_type |
temp_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 100-1073741823 |
| نوع المعلمة | ديناميكي |
| Documentation | temp_buffers |
work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 4096 |
| القيم المسموح بها | 4096-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | work_mem |
الوصف
تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن الأمثلة على هذه العمليات الفرز والتجزئة.
على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة أو لكل استعلام. من خلال تعيين حجم مناسب work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة على القرص.
النقاط الرئيسية
-
ذاكرة الاتصال الخاصة:
work_memهي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. تختلف هذه الذاكرة عن منطقة الذاكرة المشتركة التيshared_buffersتستخدمها. -
الاستخدام الخاص بالاستعلام: لا تستخدم
work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلبSELECT 1الاستعلامات البسيطة مثلwork_mem. ومع ذلك ، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء منwork_mem. -
العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر نهايات خلفية متوازية متعددة، يمكن أن تستخدم كل واجهة خلفية جزءا واحدا أو عدة أجزاء من
work_mem.
مراقبة وضبط work_mem
من الضروري مراقبة أداء نظامك باستمرار وضبطه work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:
-
إحصاءات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تنشئ ملفات مؤقتة. يشير هذا الوضع إلى الحاجة المحتملة للزيادة
work_mem. - أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب الملفات المؤقتة العالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشكلات.
تعديل الحبوب
أثناء إدارة المعلمة work_mem ، غالبا ما يكون اعتماد نهج تعديل دقيق أكثر كفاءة بدلا من تعيين قيمة عالمية. يضمن هذا النهج تخصيص الذاكرة بحكمة بناء على الاحتياجات المحددة للعمليات والمستخدمين. كما أنه يقلل من خطر مواجهة مشكلات نفاد الذاكرة. إليك كيفية القيام بذلك:
مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تتطلب ذاكرة مكثفة، ففكر في
work_memتخصيص القيمة لهذا المستخدم. استخدم الأمرALTER ROLEلتحسين أداء عمليات المستخدم.مستوى الوظيفة / الإجراء: إذا كانت وظائف أو إجراءات معينة تنشئ ملفات مؤقتة كبيرة ، فقد تكون زيادة القيمة
work_memعلى مستوى الوظيفة أو الإجراء المحدد مفيدة. استخدم الأمرALTER FUNCTIONorALTER 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | -1 |
| القيم المسموح بها | -1-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | posix |
| القيم المسموح بها | posix |
| نوع المعلمة | للقراءة فقط |
| Documentation | dynamic_shared_memory_type |
hash_mem_multiplier
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | متعدد work_mem لاستخدامه لجداول التجزئة. |
| نوع البيانات | عددي |
| القيمة الافتراضية | 1 |
| القيم المسموح بها | 1-1000 |
| نوع المعلمة | ديناميكي |
| Documentation | hash_mem_multiplier |
huge_pages
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | try |
| القيم المسموح بها | on,off,try |
| نوع المعلمة | ثابت |
| Documentation | huge_pages |
الوصف
الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة الكتل التي يصل حجمها إلى 2 ميغابايت، على عكس الصفحات القياسية التي تبلغ سعتها 4 كيلوبايت.
يمكن أن يوفر استخدام الصفحات الضخمة مزايا أداء تقوم بتفريغ وحدة المعالجة المركزية بشكل فعال:
- إنها تقلل من النفقات العامة المرتبطة بمهام إدارة الذاكرة مثل عدد أقل من الأخطاء في المخزن المؤقت للترجمة (TLB).
- أنها تقصر الوقت اللازم لإدارة الذاكرة.
على وجه التحديد ، في PostgreSQL ، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.
ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص ، مما يزيد من استقرار الأداء.
Recommendations
- بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. قد يؤدي تعطيل الصفحات الضخمة إلى الإضرار بالأداء.
- إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يدعم ذلك، فاحتفظ بالإعداد
huge_pagesللانتقالTRYالسلس والأداء الأمثل.
ملاحظات خاصة ب Azure
بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores ، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. الميزة غير متوفرة للخوادم التي تحتوي على أقل من أربعة نواة افتراضية. يتم ضبط عدد الصفحات الضخمة تلقائيا في حالة تغيير أي إعدادات للذاكرة المشتركة، بما في ذلك التعديلات على shared_buffers.
maintenance_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 1024-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | maintenance_work_mem |
الوصف
maintenance_work_mem هي معلمة تكوين في PostgreSQL. يتحكم في مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUM، CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام ، maintenance_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 جيبي بايت | 99,328 كيلوبايت |
| 4 جيجابيت | 157,696 كيلوبايت |
| 8 جيجابيت | 216,064 كيلوبايت |
| 16 جيجابيت | 274,432 كيلوبايت |
| 32 غيغابايت | 332,800 كيلوبايت |
| 48 جيبي بايت | 367,616 كيلوبايت |
| 64 جيبي بايت | 392,192 كيلوبايت |
| 80 جيبي بايت | 410,624 كيلوبايت |
| 128 جيبي بايت | 450,560 كيلوبايت |
| 160 جيجابايت | 468,992 كيلوبايت |
| 192 جيجابايت | 484,352 كيلوبايت |
| 256 غيغابايت | 508,928 كيلوبايت |
| 384 جيجابايت | 542,720 كيلوبايت |
| 432 جيجابايت | 552,960 كيلوبايت |
| 672 جيبي بايت | 590,848 كيلوبايت |
max_prepared_transactions
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0-262143 |
| نوع المعلمة | ثابت |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 2048 |
| القيم المسموح بها | 2048 |
| نوع المعلمة | للقراءة فقط |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 16-1073741823 |
| نوع المعلمة | ثابت |
| Documentation | shared_buffers |
الوصف
shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. إنه بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه من قبل جميع عمليات قاعدة البيانات.
عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. في حالة وجود البيانات المطلوبة، يتم استردادها بسرعة وتجاوز قراءة القرص التي تستغرق وقتا أطول. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص ، وتقلل بشكل فعال من عدد عمليات الإدخال / الإخراج المطلوبة.
ملاحظات خاصة ب Azure
يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. أي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن ليس لها أي تأثير على القيمة الافتراضية لمعلمة الخادم shared_buffers لهذا المثيل.
في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.
بالنسبة للأجهزة الظاهرية التي تصل إلى 2 غيغابايت من الذاكرة، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 16384.
بالنسبة للأجهزة الظاهرية التي تزيد عن 2 غيغابايت، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 32768.
استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:
| حجم الذاكرة | shared_buffers |
|---|---|
| 2 جيبي بايت | 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة المستخدمة لمنطقة الذاكرة المشتركة الرئيسية. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | mmap |
| القيم المسموح بها | mmap |
| نوع المعلمة | للقراءة فقط |
| Documentation | shared_memory_type |
temp_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 100-1073741823 |
| نوع المعلمة | ديناميكي |
| Documentation | temp_buffers |
work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 4096 |
| القيم المسموح بها | 4096-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | work_mem |
الوصف
تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن الأمثلة على هذه العمليات الفرز والتجزئة.
على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة أو لكل استعلام. من خلال تعيين حجم مناسب work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة على القرص.
النقاط الرئيسية
-
ذاكرة الاتصال الخاصة:
work_memهي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. تختلف هذه الذاكرة عن منطقة الذاكرة المشتركة التيshared_buffersتستخدمها. -
الاستخدام الخاص بالاستعلام: لا تستخدم
work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلبSELECT 1الاستعلامات البسيطة مثلwork_mem. ومع ذلك ، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء منwork_mem. -
العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر نهايات خلفية متوازية متعددة، يمكن أن تستخدم كل واجهة خلفية جزءا واحدا أو عدة أجزاء من
work_mem.
مراقبة وضبط work_mem
من الضروري مراقبة أداء نظامك باستمرار وضبطه work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:
-
إحصاءات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تنشئ ملفات مؤقتة. يشير هذا الوضع إلى الحاجة المحتملة للزيادة
work_mem. - أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب الملفات المؤقتة العالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشكلات.
تعديل الحبوب
أثناء إدارة المعلمة work_mem ، غالبا ما يكون اعتماد نهج تعديل دقيق أكثر كفاءة بدلا من تعيين قيمة عالمية. يضمن هذا النهج تخصيص الذاكرة بحكمة بناء على الاحتياجات المحددة للعمليات والمستخدمين. كما أنه يقلل من خطر مواجهة مشكلات نفاد الذاكرة. إليك كيفية القيام بذلك:
مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تتطلب ذاكرة مكثفة، ففكر في
work_memتخصيص القيمة لهذا المستخدم. استخدم الأمرALTER ROLEلتحسين أداء عمليات المستخدم.مستوى الوظيفة / الإجراء: إذا كانت وظائف أو إجراءات معينة تنشئ ملفات مؤقتة كبيرة ، فقد تكون زيادة القيمة
work_memعلى مستوى الوظيفة أو الإجراء المحدد مفيدة. استخدم الأمرALTER FUNCTIONorALTER 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها من قبل كل عملية عامل إخلاء تلقائي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | -1 |
| القيم المسموح بها | -1-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | autovacuum_work_mem |
dynamic_shared_memory_type
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تحديد تنفيذ الذاكرة المشتركة الديناميكية المستخدمة. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | posix |
| القيم المسموح بها | posix |
| نوع المعلمة | للقراءة فقط |
| Documentation | dynamic_shared_memory_type |
huge_pages
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تمكين/تعطيل استخدام صفحات الذاكرة الضخمة. لا ينطبق هذا الإعداد على الخوادم التي تحتوي على أقل من 4 vCores. |
| نوع البيانات | التعداد |
| القيمة الافتراضية | try |
| القيم المسموح بها | on,off,try |
| نوع المعلمة | ثابت |
| Documentation | huge_pages |
الوصف
الصفحات الضخمة هي ميزة تسمح بإدارة الذاكرة في كتل أكبر. يمكنك عادة إدارة الكتل التي يصل حجمها إلى 2 ميغابايت، على عكس الصفحات القياسية التي تبلغ سعتها 4 كيلوبايت.
يمكن أن يوفر استخدام الصفحات الضخمة مزايا أداء تقوم بتفريغ وحدة المعالجة المركزية بشكل فعال:
- إنها تقلل من النفقات العامة المرتبطة بمهام إدارة الذاكرة مثل عدد أقل من الأخطاء في المخزن المؤقت للترجمة (TLB).
- أنها تقصر الوقت اللازم لإدارة الذاكرة.
على وجه التحديد ، في PostgreSQL ، يمكنك استخدام صفحات ضخمة فقط لمنطقة الذاكرة المشتركة. يتم تخصيص جزء كبير من منطقة الذاكرة المشتركة للمخازن المؤقتة المشتركة.
ميزة أخرى هي أن الصفحات الضخمة تمنع تبديل منطقة الذاكرة المشتركة إلى القرص ، مما يزيد من استقرار الأداء.
Recommendations
- بالنسبة للخوادم التي تحتوي على موارد ذاكرة كبيرة، تجنب تعطيل الصفحات الضخمة. قد يؤدي تعطيل الصفحات الضخمة إلى الإضرار بالأداء.
- إذا بدأت بخادم أصغر لا يدعم الصفحات الضخمة ولكنك تتوقع التوسع إلى خادم يدعم ذلك، فاحتفظ بالإعداد
huge_pagesللانتقالTRYالسلس والأداء الأمثل.
ملاحظات خاصة ب Azure
بالنسبة للخوادم التي تحتوي على أربعة أو أكثر من vCores ، يتم تخصيص صفحات ضخمة تلقائيا من نظام التشغيل الأساسي. الميزة غير متوفرة للخوادم التي تحتوي على أقل من أربعة نواة افتراضية. يتم ضبط عدد الصفحات الضخمة تلقائيا في حالة تغيير أي إعدادات للذاكرة المشتركة، بما في ذلك التعديلات على shared_buffers.
maintenance_work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى للذاكرة لاستخدامها في عمليات الصيانة مثل فراغ، إنشاء فهرس. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 1024-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | maintenance_work_mem |
الوصف
maintenance_work_mem هي معلمة تكوين في PostgreSQL. يتحكم في مقدار الذاكرة المخصصة لعمليات الصيانة، مثل VACUUM، CREATE INDEXو.ALTER TABLE على عكس work_mem، الذي يؤثر على تخصيص الذاكرة لعمليات الاستعلام ، maintenance_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 جيبي بايت | 99,328 كيلوبايت |
| 4 جيجابيت | 157,696 كيلوبايت |
| 8 جيجابيت | 216,064 كيلوبايت |
| 16 جيجابيت | 274,432 كيلوبايت |
| 32 غيغابايت | 332,800 كيلوبايت |
| 48 جيبي بايت | 367,616 كيلوبايت |
| 64 جيبي بايت | 392,192 كيلوبايت |
| 80 جيبي بايت | 410,624 كيلوبايت |
| 128 جيبي بايت | 450,560 كيلوبايت |
| 160 جيجابايت | 468,992 كيلوبايت |
| 192 جيجابايت | 484,352 كيلوبايت |
| 256 غيغابايت | 508,928 كيلوبايت |
| 384 جيجابايت | 542,720 كيلوبايت |
| 432 جيجابايت | 552,960 كيلوبايت |
| 672 جيبي بايت | 590,848 كيلوبايت |
max_prepared_transactions
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المعاملات المعدة في وقت واحد. عند تشغيل خادم نسخة متماثلة، يجب تعيين هذه المعلمة إلى نفس القيمة أو أعلى من على الخادم الأساسي. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 0 |
| القيم المسموح بها | 0-262143 |
| نوع المعلمة | ثابت |
| Documentation | max_prepared_transactions |
max_stack_depth
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعمق المكدس، بالكيلو بايت. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 2048 |
| القيم المسموح بها | 2048 |
| نوع المعلمة | للقراءة فقط |
| Documentation | max_stack_depth |
shared_buffers
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين عدد المخازن المؤقتة للذاكرة المشتركة المستخدمة من قبل الخادم. الوحدة هي 8 كيلوبايت. القيم المسموح بها داخل نطاق 10٪ - 75٪ من الذاكرة المتوفرة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | يعتمد على الموارد (vCores أو RAM أو مساحة القرص) المخصصة للخادم. |
| القيم المسموح بها | 16-1073741823 |
| نوع المعلمة | ثابت |
| Documentation | shared_buffers |
الوصف
shared_buffers تحدد معلمة التكوين مقدار ذاكرة النظام المخصصة لقاعدة بيانات PostgreSQL لتخزين البيانات مؤقتا. إنه بمثابة تجمع ذاكرة مركزي يمكن الوصول إليه من قبل جميع عمليات قاعدة البيانات.
عند الحاجة إلى البيانات، تتحقق عملية قاعدة البيانات أولا من المخزن المؤقت المشترك. في حالة وجود البيانات المطلوبة، يتم استردادها بسرعة وتجاوز قراءة القرص التي تستغرق وقتا أطول. تعمل المخازن المؤقتة المشتركة كوسيط بين عمليات قاعدة البيانات والقرص ، وتقلل بشكل فعال من عدد عمليات الإدخال / الإخراج المطلوبة.
ملاحظات خاصة ب Azure
يتم حساب القيمة الافتراضية لمعلمة shared_buffers الخادم عند توفير مثيل قاعدة بيانات Azure لخادم PostgreSQL المرن، استنادا إلى اسم المنتج الذي تحدده لحسابه. أي تغييرات لاحقة في تحديد المنتج على الحساب الذي يدعم الخادم المرن ليس لها أي تأثير على القيمة الافتراضية لمعلمة الخادم shared_buffers لهذا المثيل.
في كل مرة تقوم فيها بتغيير المنتج المعين إلى مثيل، يجب عليك أيضا ضبط قيمة المعلمة shared_buffers وفقا للقيم الموجودة في الصيغ التالية.
بالنسبة للأجهزة الظاهرية التي تصل إلى 2 غيغابايت من الذاكرة، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 16384.
بالنسبة للأجهزة الظاهرية التي تزيد عن 2 غيغابايت، فإن الصيغة المستخدمة لحساب قيمة هي shared_buffersmemoryGib * 32768.
استنادا إلى الصيغة السابقة، يسرد الجدول التالي القيم التي سيتم تعيين معلمة الخادم هذه إليها اعتمادا على مقدار الذاكرة المتوفرة:
| حجم الذاكرة | shared_buffers |
|---|---|
| 2 جيبي بايت | 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
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين الحد الأقصى لعدد المخازن المؤقتة المستخدمة من قبل كل جلسة عمل قاعدة بيانات. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 1024 |
| القيم المسموح بها | 100-1073741823 |
| نوع المعلمة | ديناميكي |
| Documentation | temp_buffers |
work_mem
| Attribute | Value |
|---|---|
| الفئة | استخدام الموارد / الذاكرة |
| الوصف | تعيين مقدار الذاكرة التي سيتم استخدامها بواسطة عمليات الفرز الداخلية وجداول التجزئة قبل الكتابة إلى ملفات القرص المؤقتة. |
| نوع البيانات | العدد الصحيح |
| القيمة الافتراضية | 4096 |
| القيم المسموح بها | 4096-2097151 |
| نوع المعلمة | ديناميكي |
| Documentation | work_mem |
الوصف
تتحكم المعلمة work_mem في PostgreSQL في مقدار الذاكرة المخصصة لعمليات داخلية معينة داخل منطقة الذاكرة الخاصة لكل جلسة قاعدة بيانات. ومن الأمثلة على هذه العمليات الفرز والتجزئة.
على عكس المخازن المؤقتة المشتركة، الموجودة في منطقة الذاكرة المشتركة، work_mem يتم تخصيصها في مساحة ذاكرة خاصة لكل جلسة أو لكل استعلام. من خلال تعيين حجم مناسب work_mem ، يمكنك تحسين كفاءة هذه العمليات بشكل كبير وتقليل الحاجة إلى كتابة بيانات مؤقتة على القرص.
النقاط الرئيسية
-
ذاكرة الاتصال الخاصة:
work_memهي جزء من الذاكرة الخاصة التي تستخدمها كل جلسة عمل قاعدة بيانات. تختلف هذه الذاكرة عن منطقة الذاكرة المشتركة التيshared_buffersتستخدمها. -
الاستخدام الخاص بالاستعلام: لا تستخدم
work_memجميع الجلسات أو الاستعلامات . من غير المحتمل أن تتطلبSELECT 1الاستعلامات البسيطة مثلwork_mem. ومع ذلك ، يمكن أن تستهلك الاستعلامات المعقدة التي تتضمن عمليات مثل الفرز أو التجزئة جزءا واحدا أو عدة أجزاء منwork_mem. -
العمليات المتوازية: بالنسبة للاستعلامات التي تمتد عبر نهايات خلفية متوازية متعددة، يمكن أن تستخدم كل واجهة خلفية جزءا واحدا أو عدة أجزاء من
work_mem.
مراقبة وضبط work_mem
من الضروري مراقبة أداء نظامك باستمرار وضبطه work_mem حسب الضرورة، في المقام الأول إذا كانت أوقات تنفيذ الاستعلام المتعلقة بعمليات الفرز أو التجزئة بطيئة. فيما يلي طرق لمراقبة الأداء باستخدام الأدوات المتوفرة في مدخل Microsoft Azure:
-
إحصاءات أداء الاستعلام: تحقق من علامة التبويب أهم الاستعلامات حسب الملفات المؤقتة لتحديد الاستعلامات التي تنشئ ملفات مؤقتة. يشير هذا الوضع إلى الحاجة المحتملة للزيادة
work_mem. - أدلة استكشاف الأخطاء وإصلاحها: استخدم علامة التبويب الملفات المؤقتة العالية في أدلة استكشاف الأخطاء وإصلاحها لتحديد الاستعلامات التي بها مشكلات.
تعديل الحبوب
أثناء إدارة المعلمة work_mem ، غالبا ما يكون اعتماد نهج تعديل دقيق أكثر كفاءة بدلا من تعيين قيمة عالمية. يضمن هذا النهج تخصيص الذاكرة بحكمة بناء على الاحتياجات المحددة للعمليات والمستخدمين. كما أنه يقلل من خطر مواجهة مشكلات نفاد الذاكرة. إليك كيفية القيام بذلك:
مستوى المستخدم: إذا كان مستخدم معين يشارك بشكل أساسي في مهام التجميع أو إعداد التقارير، والتي تتطلب ذاكرة مكثفة، ففكر في
work_memتخصيص القيمة لهذا المستخدم. استخدم الأمرALTER ROLEلتحسين أداء عمليات المستخدم.مستوى الوظيفة / الإجراء: إذا كانت وظائف أو إجراءات معينة تنشئ ملفات مؤقتة كبيرة ، فقد تكون زيادة القيمة
work_memعلى مستوى الوظيفة أو الإجراء المحدد مفيدة. استخدم الأمرALTER FUNCTIONorALTER 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"الإشارات التي تشير إلى أن الاستعلام يعمل الآن في الذاكرة. - بعد تحديد القيمة من خلال هذه الطريقة ، يمكنك تطبيقها إما بشكل عام أو على مستويات أكثر دقة (كما هو موضح سابقا) لتناسب احتياجاتك التشغيلية.