فیلدهای مرتبط با حافظه جدید در Yugabyte 2.17.3 pg_stat_activity

در روز جمعه، 5 می 2023، یوگا بایت نسخه 2.17.3.0 پایگاه داده را منتشر کرد. نسخه 2.17.3.0 یک نسخه پیش از انتشار است.
با این حال، یک ویژگی هیجان انگیز وجود دارد که برای درک، تنظیم و عیب یابی API YSQL (سازگار با PostgreSQL) بسیار مفید است: pg_stat_activity
جدول کاتالوگ استاندارد PostgreSQL دو فیلد جدید دریافت کرده است:
- allocated_mem_bytes
- rss_mem_bytes
allocated_mem_bytes
قسمت allocated_mem_bytes حافظه اختصاص داده شده توسط تخصیص دهنده حافظه را نشان می دهد. PostgreSQL به روشی قابل توسعه تنظیم شده است، که شامل توانایی انتخاب یک تخصیص دهنده حافظه است که برای PostgreSQL ptmalloc و برای YSQL tcmalloc است. PostgreSQL قابلیت تغییر تخصیص دهنده حافظه را دارد اما به طور پیش فرض از تخصیص دهنده حافظه سیستم عامل استفاده می کند.
حافظه نشان داده شده در قسمت allocated_mem_bytes مقدار حافظه ای است که تخصیص دهنده برای backend postgres و همچنین pggate ما برای برقراری ارتباط با DocDB اختصاص داده است.
توجه به این نکته مهم است که تخصیص دهنده پس از جدا شدن فرآیند از فرآیند سرور postgres درگیر می شود و در تمام حافظه مورد نیاز برای اجرای فرآیند صفحه بندی می شود، بنابراین هنگامی که “برنامه” postgres اجرا می شود و حافظه را برای پردازش خود اختصاص می دهد.
فیلد allocated_mem_bytes میتواند حافظهای را نشان دهد که قبلاً تخصیص داده شده و در واقعیت آزاد شده است، اما همچنان بخشی از تخصیص حافظه مجازی است. یکی از تغییرات خاصی که در YugabyteDB برای تخصیص دهنده پشتیبان tcmalloc انجام دادیم، آزادسازی شدید برای جلوگیری از اشتراک بیش از حد حافظه است. اگر این مورد خاص رخ دهد، فیلد rss_mem_bytes مقدار حافظه کمتری نسبت به قسمت allocated_mem_bytes نشان می دهد.
rss_mem_bytes
فیلد rss_mem_bytes نمای سطح سیستم عامل استفاده از حافظه را نشان می دهد، که برای آن RSS: اندازه مجموعه مقیم را نشان می دهد.
اندازه مجموعه مقیم تمام صفحاتی هستند که در حافظه فرآیند صفحه بندی می شوند. برخی از این صفحات را می توان با سایر فرآیندها، مانند صفحات نگاشت حافظه، به اشتراک گذاشت.
حافظه ای که تخصیص دهنده حافظه (tcmalloc با YugabyteDB، ptmalloc برای PostgreSQL) تخصیص می دهد، پس از خواندن یا نوشتن تخصیص، به عنوان RSS اداره می شود.
به طور کلی، اندازه مجموعه rss_mem_bytes/resident بزرگتر از allocated_mem_bytes خواهد بود، زیرا سطح لینوکس که با فایل اجرایی و اجرا سروکار دارد به مقداری حافظه نیز نیاز دارد. اما این همیشه درست نیست.
حافظه مشترک / کش بافر
لطفاً توجه داشته باشید که با YSQL هنوز حافظه مشترک قابل مشاهده است که به عنوان حافظه مشترک برای پایگاه داده تعریف می شود. این حافظه با استفاده از تخصیص دهنده حافظه تخصیص داده نمی شود.
این حافظه مشترک توسط برخی از نماهای پایگاه داده جهانی استفاده می شود و با PostgreSQL برای تخصیص حافظه پنهان بافر استفاده می شود. در YSQL، ما از کش بافر سطح postgres استفاده نمی کنیم. بنابراین متوجه خواهید شد که تقریباً هیچ چیز از این حافظه صفحه بندی نمی شود و بنابراین در واقع حافظه را می گیرد.
مقدار حافظه ای که در صفحه قرار می گیرد به rss_mem_bytes قابل مشاهده خواهد بود، حافظه مشترک کاملاً خارج از allocated_mem_bytes است.