بخش اول: ورود به جهان قدرتمند PostgreSQL
بخش دوم : مکانیزم های حرفه‌ای مدیریت ذخیره سازی و تضمین مقیاس پذیری پستگرس
بخش سوم : تحلیل و بهینه‌سازی اجرای کوئری در PostgreSQL
بخش چهارم: استراتژی‌های پشتیبان‌گیری و بازیابی اطلاعات
بخش پنجم: راهکارهای دسترس‌پذیری بالا و مقیاس‌پذیری
بخش ششم: پایش، مانیتورینگ و عیب‌یابی در PostgreSQL
کارگاه‌ها و مثال‌های کاربردی

سرفصل های دوره راهبری پستگرس – PostgreSQL DBA

از معماری تا پیاده‌سازی کلاسترهای مقاوم و با دسترس‌پذیری بالا


PostgreSQL امروزه به یکی از پیشرفته‌ترین و پرکاربردترین سیستم‌های مدیریت پایگاه‌داده رابطه‌ای متن‌باز تبدیل شده است. معماری توسعه‌پذیر (Extensible) این سامانه، امکان افزودن قابلیت‌های متنوع از جمله پردازش داده‌های مکانی، زمانی، برداری، جستجوی تمام‌متن و حتی انبارش تحلیلی(OLAP) را فراهم کرده است. به همین دلیل، بسیاری از سازمان‌ها و پلتفرم‌های مدرن، PostgreSQL را به عنوان هسته مرکزی زیرساخت داده خود انتخاب می‌کنند.

با گسترش روزافزون کاربرد PostgreSQL، نیاز به متخصصانی که فراتر از دانش سطحی، به معماری داخلی، بهینه‌سازی، پشتیبان‌گیری پیشرفته، replication و High Availability مسلط باشند، به شدت افزایش یافته است. این دوره با هدف پر کردن این شکاف طراحی شده و شرکت‌کنندگان را از سطح مقدماتی تا توانایی طراحی و مدیریت کلاسترهای PostgreSQL در مقیاس سازمانی ارتقا می‌دهد.

در این دوره، موضوعات زیر به صورت کاربردی بررسی و مرور خواهند شد :

فصل ۱: نصب، پیکربندی و ابزارهای اتصال

پیش از هر اقدامی، باید محیطی عملیاتی برای کار با PostgreSQL فراهم کنیم. در این فصل، نصب PostgreSQL روی سیستم عامل لینوکس/ویندوز به صورت گام به گام انجام میشود و انواع ابزارهای اتصال از خط فرمان گرفته تا محیطهای گرافیکی حرفه ای معرفی میگردند. سپس با ایجاد چند دیتابیس نمونه و تولید داده‌های آموزشی، عملیات ابتدایی مانند ساخت جدول، ایندکس، دنباله و اسکیما تمرین میشود تا پیش از ورود به مباحث عمیقتر، دست شرکت‌کنندگان برای کار عملی روی یک دیتابیس واقعی کاملاً باز باشد.

  • نصب PostgreSQL از مخازن رسمی و کامپایل از سورس
  • آشنایی با psql به عنوان رابط خط فرمان اصلی
  • معرفی pgcli با قابلیت تکمیل خودکار و syntax highlighting
  • کار با pgAdmin و DBeaver به عنوان محیط‌های مدیریت گرافیکی
  • ایجاد دیتابیس، اسکیما، جدول، ایندکس و sequence با ایجاد چند دیتابیس نمونه

فصل ۲: معماری داخلی PostgreSQL

بدون شناخت معماری حافظه، فرآیندها و ساختار فایل‌ها، بسیاری از رفتارهای PostgreSQL برای مدیر یک جعبه سیاه باقی می‌ماند. در این بخش، اجزای داخلی موتور PostgreSQL موشکافانه بررسی میشود: از حافظه اشتراکی و محلی گرفته تا فرآیندهای زمینه و نحوه ذخیره‌سازی فیزیکی داده‌ها. مکانیزم MVCC به عنوان قلب PostgreSQL و ابزار VACUUM برای مدیریت نسخه‌های قدیمی داده ها، به صورت عملی بررسی میشوند.

  • معماری حافظه: shared_buffers، wal_buffers، work_mem، maintenance_work_mem
  • معماری فرآیندها: postmaster، backend processes، background workers (bgwriter، checkpointer، autovacuum، walwriter)
  • ساختار فایل‌ها: data directory، tablespace، OID، relfilenode
  • مفهوم Page/Block: ساختار صفحه، tuple header، line pointer
  • MVCC: نسخه‌سازی ردیف‌ها، visibility map، freeze
  • VACUUM: انواع VACUUM، VACUUM FULL، autovacuum، پارامترهای تنظیمی

فصل ۳: امنیت و کنترل دسترسی

یک دیتابیس بدون امنیت، مانند گاوصندوق بدون قفل است. در این فصل، مکانیزم نقش‌ها و کاربران PostgreSQL با جزئیات کامل بررسی میشود و روش پیاده‌سازی اصل کمترین دسترسی آموزش داده میشود. فایل pg_hba.conf به عنوان دیوار دفاعی در سطح شبکه پیکربندی و روش‌های مختلف احراز هویت شامل رمزنگاری ارتباطات با SSL پیاده‌سازی میگردد.

  • مفهوم Role و User: ایجاد، حذف، اعطای دسترسی (GRANT، REVOKE)
  • Membership و Inheritance در نقش‌ها
  • پیکربندی pg_hba.conf: رکوردهای احراز هویت بر اساس آدرس، کاربر، دیتابیس
  • روش‌های احراز هویت: scram-sha-256، md5، trust، peer، cert
  • فعال‌سازی SSL/TLS
  • رمزنگاری داده‌ها با استفاده از extensionهای موجود

فصل ۴: مدیریت فضای ذخیره‌سازی و ایندکس‌ها

داده‌ها باید هوشمندانه ذخیره شوند. در این فصل با Tablespace و امکان توزیع اشیاء روی دیسک‌های متفاوت آشنا میشویم. جداول سیستمی template0 و template1 و کاربرد آنها در سفارشی‌سازی دیتابیس‌های جدید بررسی میشود. بخش اصلی این فصل، ایندکس‌های متنوع PostgreSQL است: از B-tree گرفته تا GiST، GIN، BRIN و SP-GiST. دستور CLUSTER برای مرتب‌سازی فیزیکی جداول بر اساس ایندکس نیز به عنوان یک تکنیک بهینه‌سازی پیشرفته آموزش داده میشود.

  • Tablespace: ایجاد، انتقال اشیاء، حذف
  • جداول سیستمی template0، template1 و نحوه ایجاد دیتابیس سفارشی
  • ایندکس B-tree: ساختار، پارامترها، FILLFACTOR
  • ایندکس GiST و SP-GiST: کاربرد در داده‌های مکانی و جستجوی شباهت
  • ایندکس GIN : جستجوی تمام‌متن و آرایه‌ها
  • ایندکس BRIN: برای جداول بسیار بزرگ با ترتیب فیزیکی
  • دستور CLUSTER و pg_cluster
  • نگهداری ایندکس: REINDEX، pg_repack و جداول سیستمی مرتبط با ایندکس‌ها

فصل ۵: پارتیشن‌بندی و افزونه‌های خودکارسازی

وقتی حجم داده‌ها از حدی فراتر رود، پارتیشن‌بندی نه یک انتخاب، بلکه یک ضرورت است. در این فصل، روش‌های پارتیشن‌بندی Range، List و Hash به صورت عملی پیاده‌سازی میشود. سپس چالش‌های مدیریت دستی پارتیشن‌ها بررسی و دو افزونه کلیدی معرفی می‌گردند: ‍‍pg_partman برای خودکارسازی چرخه حیات پارتیشن‌ها و pg_cron برای زمان‌بندی وظایف درون دیتابیس. در انتها، یک سناریوی تمام خودکار برای پارتیشن‌بندی ماهانه طراحی و اجرا می‌شود.

  • پارتیشن‌بندی جداول: PARTITION BY RANGE، LIST، HASH
  • مدیریت دستی پارتیشن‌ها: ایجاد، attach، detach
  • pg_partman: نصب، پیکربندی، ایجاد schedule خودکار
  • pg_cron: زمان‌بندی وظایف نگهداری و پارتیشن‌بندی
  • کاربرد توابع run_maintenance() و create_parent()

فصل ۶: Foreign Data Wrappers و یکپارچه‌سازی با سامانه‌های خارجی

در معماری‌های مدرن، داده‌ها به ندرت در یکجا متمرکز هستند. FDW (Foreign Data Wrapper) امکان کوئری‌زنی شفاف روی منابع خارجی را بدون انتقال فیزیکی داده‌ها فراهم می‌کند. در این فصل با ‍postgres_fdw شروع کرده، سپس به اتصال به ClickHouse می‌پردازیم. یک سناریوی عملی پیاده‌سازی میشود که در آن کاربران تنها با PostgreSQL کار میکنند، اما کوئری‌های تحلیلی به صورت خودکار به ClickHouse ارسال و نتیجه بازگردانده میشود.

  • مفهوم FDW و معماری آن
  • نصب و پیکربندی postgres_fdw
  • ایجاد FOREIGN SERVER، USER MAPPING و FOREIGN TABLE
  • معرفی clickhouse_fdw

فصل ۷: بهینه‌سازی کوئری و تحلیل عملکرد

کندترین بخش هر برنامه، اغلب دیتابیس آن است. در این کارگاه عملی، زبان مشترک با بهینه‌ساز PostgreSQL یعنی خروجی EXPLAIN خط به خط تفسیر میشود. مفاهیم Cost، Row، Width و انواع Join تحلیل میگردد و دلیل انتخاب پلن اجرایی نامناسب ریشه‌یابی میشود. با بررسی pg_stats و تأثیر ANALYZE، نقش آمار در بهینه‌سازی روشن میشود. پارامترهای تنظیمی مؤثر بر بهینه‌ساز نیز مرور و به صورت عملی تغییر داده میشوند.

  • ساختار خروجی EXPLAIN و EXPLAIN ANALYZE
  • خواندن گره‌های Sequential Scan، Index Scan، Bitmap Heap Scan
  • انواع Join: Nested Loop، Hash Join، Merge Join و محاسبه هزینه
  • تأثیر ANALYZE و آمار جدول (pg_stats)
  • پارامترهای بهینه‌ساز: random_page_cost، seq_page_cost، effective_cache_size، work_mem
  • شناسایی کوئری‌های پرهزینه با pg_stat_statements
  • بهینه‌سازی کوئری با راهنمایی (hint) و محدودیت‌های آن

فصل ۸: بکاپ منطقی

پیش از هر رخداد ناخوشایندی در حوزه دیتابیس، باید برای آن آماده بود. بکاپ منطقی با ابزارهای بومی PostgreSQL ساده ترین و در دسترس‌ترین روش پشتیبانگیری است. در این فصل با pg_dump، pg_dumpall و pg_restore کار میکنیم و تفاوت فرمت‌های خروجی (plain, custom, directory, tar) را بررسی میکنیم. نکات اجرایی در دیتابیس‌های بزرگ، مدیریت همزمانی و بازیابی انتخابی نیز آموزش داده میشود.

  • pg_dump: ساختار و داده، انتخاب اشیاء، فیلتر کردن
  • فرمت‌های خروجی: -Fp (plain)، -Fc (custom)، -Fd (directory)، -Ft (tar)
  • pg_dumpall: پشتیبان‌گیری از کل کلاستر (نقش‌ها، tablespace)
  • pg_restore: بازیابی از فرمت‌های غیر plain و بازیابی موازی
  • استفاده از --jobs
  • بازیابی انتخابی: جداول، اسکیماها
  • محدودیت‌ها: بکاپ منطقی برای دیتابیس‌های چندترابایتی

فصل ۹: آشنایی با WAL و بازیابی به یک زمان خاص(PITR)

اگر یک DROP TABLE در ساعت ۳ بامداد اجرا شود، چه باید کرد؟ بازیابی به یک زمان خاص (Point-In-Time Recovery) تنها راه بازگشت به لحظه پیش از حادثه است. در این فصل، ساختار و نقش فایل‌های WAL (Write-Ahead Log) به طور عمیق بررسی میشود. سپس WAL Archiving فعال شده و یک سناریوی کامل PITR گام به گام اجرا میگردد. بخصوص نحوه بررسی و جستجوی فایلهای WAL با pg_waldump هم آموزش داده می شود که بتوانیم نقطه مناسب برای بازیابی را به صورت دقیق بیابیم.

  • ساختار WAL – آشنایی با مفاهیم LSN، segment، timeline
  • تنظیمات wal_level، archive_mode، archive_command
  • آرشیو WAL به دایرکتوری محلی و remote
  • بازگردانی با recovery.signal
  • بازیابی تا نقطه‌ی زمانی مشخص (recovery_target_time، recovery_target_lsn، recovery_target_name)
  • مفهوم restore point
  • سناریوی عملی: حذف جدول و بازگردانی کامل

فصل ۱۰: بکاپ فیزیکی و ابزارهای پیشرفته

برای دیتابیس‌های چندترابایتی، بکاپ منطقی کند و ناکارآمد است. و ما نیاز داریم بتوانیم از کل پوشه‌های اصلی پستگرس، بکاپ بگیریم. در این فصل علاوه بر معرفی اصلی ترین گزینه استاندارد کار با بکاپ های فیزیکی یعنی pg_basebackup، سه ابزار استاندارد و سازمانی پوشش داده میشوند: Barman برای مدیریت ایستگاه‌های بکاپ، pgBackRest برای بکاپ فشرده و رمزنگاری شده با قابلیت incremental، و WAL-G برای ارسال بکاپ به object storage و بکاپ افزایشی سریع. با تسلط بر این ابزارها، استراتژی پشتیبانگیری در سطح غول‌های فناوری پیادهسازی میشود. البته از نسخه ۱۷ پستگرس به بعد، ما بکاپ افزایشی را در خود پستگرس اصلی هم داریم اما کار با این ابزارهای جانبی، معمولا راحت‌تر و برای کارهای سازمانی، مناسب‌تر است.

  • مقایسه بکاپ فیزیکی و منطقی
  • Barman: نصب، پیکربندی، barman backup، barman recover، retention policy
  • pgBackRest: معماری repository، بکاپ full/differential/incremental، رمزنگاری، فشردهسازی، موازی‌سازی
  • WAL-G: بکاپ به S3، MinIO، Azure Blob، Google Cloud Storage
  • سناریوی ترکیبی: بکاپ فیزیکی + آرشیو WAL
  • بازیابی کامل کلاستر از بکاپ فیزیکی

فصل ۱۱: رپلیکیشن منطقی

یکی از امکانات جذاب پستگرس، امکان دریافت لحظه‌ای تغییرات یک یا چند جدول توسط یک پستگرس راه دور است. در این روش که به تکرار منطقی معروف است، دستورات SQL لازم برای اعمال آن تغییرات، به مشترکین به صورت خودکار توسط پستگرس اصلی یا ناشر تغییرات، ارسال میشود.

در این فصل معماری Publisher/Subscriber بررسی میشود و یک replication منطقی بین دو کلاستر راه اندازی میگردد. میآموزیم چطور تنها زیرمجموعه ای از جداول را replicate کنیم و تأخیر replication را مانیتور کنیم. این روش همچنین برای مهاجرت بلادرنگ داده‌ها به سامانه‌های دیگر کاربرد فراوان دارد.

  • مفاهیم publisher، subscriber، publication، subscription
  • ایجاد پابلیکیشن: CREATE PUBLICATION
  • ایجاد سابسکریپشن: CREATE SUBSCRIPTION
  • رپلیکیشن انتخابی جداول و عملیات (INSERT, UPDATE, DELETE, TRUNCATE)
  • مانیتورینگ تأخیر با pg_stat_subscription و pg_stat_replication
  • ارتقاء نسخه با کمترین downtime
  • محدودیت‌ها: schema changes، sequences، large objects

فصل ۱۲: رپلیکیشن فیزیکی

پیش‌نیاز هر معماری High Availability و Load Balancing، رپلیکیشن فیزیکی است. در این فصل دو روش سنتی و مدرن مقایسه میشود: لاگ‌شیپینگ (فایل‌های WAL) و استریمینگ رپلیکیشن. تنظیمات synchronous و asynchronous پیکربندی شده و فرآیند پروموت کردن استندبای به پرایمری به صورت دستی تمرین میگردد. درک صحیح این مفاهیم، پایه‌گذار طراحی کلاسترهای مقاوم در بخش بعدی خواهد بود.

  • لاگ‌شیپینگ: آرشیو WAL و بازیابی مداوم
  • استریمینگ رپلیکیشن: primary_conninfo، primary_slot_name
  • تنظیمات synchronous_standby_names و تأثیر بر commit
  • ایجاد replication slot
  • مانیتورینگ replication با pg_stat_replication
  • پروموت استندبای: pg_ctl promote و trigger file

فصل ۱۳: High Availability با Patroni و Pgpool

رپلیکیشن به تنهایی کافی نیست؛ چه کسی در زمان خرابی پرایمری، استندبای را پروموت میکند؟ Patroni با بهره‌گیری از Distributed Configuration Store (etcd، Consul، Zookeeper) این کار را به صورت خودکار و در چند ثانیه انجام میدهد. در این کارگاه عملی، یک کلاستر سه‌گره‌ای با Patroni راهاندازی شده و failover خودکار آزمایش میشود. سپس Pgpool-II به مجموعه اضافه می‌شود تا علاوه بر connection pooling، بار کوئری‌های خواندنی را بین استندبای‌ها توزیع کند. پس از این فصل، شرکت‌کننده قادر به طراحی و نگهداری کلاسترهایی با دسترس‌پذیری ۹۹٫۹۹٪ خواهد بود.

  • چالش‌های HA در معماری‌های سنتی
  • معرفی DCS (etcd, Consul) و نقش آن در انسجام کلاستر
  • معماری Patroni: REST API، DCS، پیکربندی
  • فایل patroni.yml و پارامترهای bootstrap
  • راه‌اندازی کلاستر سه‌گانه Patroni
  • Failover خودکار و switchover دستی
  • Pgpool-II: پیکربندی backend، load balancing، connection pooling
  • ترکیب Patroni و Pgpool-II برای read scalability

فصل ۱۴: افزونه‌های مدیریتی و امنیتی

هر اتصال به PostgreSQL یک پروسس در سیستم عامل ایجاد میکند. در بارهای تراکنشی بالا، این مدل به سرعت به مشکل میخورد. pgBouncer با Transaction Pooling و Session Pooling این معضل را حل میکند. همچنین اگر نیاز به ثبت دقیق وقایع و حسابرسی دارید، pgAudit ابزاری است که با تنظیمات منعطف خود، تمامی دستورات حساس را ضبط میکند. در این فصل هر دو ابزار پیکربندی شده و در سناریوهای واقعی به کار گرفته میشوند.

  • معماری pgBouncer: pooler، انواع pool (session, transaction, statement)
  • تنظیمات pgbouncer.ini: database, user, pool size, reserve pool
  • احراز هویت در pgBouncer
  • مانیتورینگ pgBouncer با SHOW COMMANDS
  • pgAudit: نصب، پارامترهای pgaudit.log، pgaudit.role
  • تنظیم خط‌مشی حسابرسی در سطح نشست و اشیاء
  • ترکیب pgAudit با log parserها

فصل ۱۵: دیدبان سیستمی

یک DBA کاربلد هر روز صبح پیش از هر کاری، سری به ویوهای سیستمی میزند. pg_stat*، pg_statio* و pg_stats پنجره‌هایی به درون موتور PostgreSQL هستند. در این فصل یاد گرفته میشود چطور کوئری‌های طولانی، lockهای مزاحم، bloat جداول و ایندکس‌ها و میزان IO را از همین ویوها استخراج کنیم. با این دانش، شرکت‌کننده از حالت واکنشی خارج شده و به یک مدیر پیشگیرانه (Proactive) تبدیل میشود.

  • pg_stat_activity: نشست‌های فعال، کوئری‌های در حال اجرا، waiting
  • pg_stat_database: تراکنش‌ها، deadlock، hit ratio
  • pg_stat_all_tables: seq scan, idx scan, n_dead_tup, last_vacuum
  • pg_stat_all_indexes: اسکن ایندکس، خواندن و واکشی
  • pg_statio_*: hit rate، خواندن از دیسک
  • pg_locks: شناسایی قفل‌های مزاحم و blocked processes
  • pg_stats: histogram bounds, most common values, correlation
  • محاسبه bloat جدول و ایندکس

فصل ۱۶: مانیتورینگ با Grafana و Prometheus

شما نمیتوانید ۲۴ ساعته پای مانیتور بنشینید. یک داشبورد جامع مانیتورینگ، وضعیت سلامت کلاستر را در هر لحظه نمایش میدهد و پیش از آنکه کاربران متوجه کاهش عملکرد شوند، هشدار میفرستد. در این فصل، Prometheus و PostgreSQL exporter نصب و پیکربندی میشود، متریک‌های کلیدی (تعداد تراکنش‌ها، تأخیر رپلیکیشن، cache hit ratio، اندازه دیتابیس و …) جمعآوری و در Grafana مصورسازی میگردد. همچنین آلارم‌های هوشمند برای بحران‌های احتمالی طراحی میشود.

  • معماری Prometheus و exporters
  • نصب و پیکربندی postgres_exporter
  • جمع‌آوری متریک‌های PostgreSQL: WAL, bgwriter, replication, locks, stats
  • Grafana: منبع داده Prometheus، طراحی داشبورد
  • import داشبوردهای آماده (community dashboards)
  • تعریف آلارم در Grafana و اتصال به notification channels
  • جمع‌بندی: مجموعه متریک‌های ضروری برای پایش عملیاتی

روش اجرای دوره

  • قالب: ترکیبی از آموزش نظری و کارگاه‌های عملی (۷۰٪ عملی)
  • محیط: فیلم‌ها به صورت هفتگی بر روی سایت سپهرام قرار می‌گیرند. همزمان، فایلهای آموزشی مربوطه نیز در مخزن گیت دوره قرار می‌گیرد که شرکت‌کنندگان بتوانند همراه با مدرس، مطالب را به صورت عملی کار کنند. در کانال تلگرامی دوره هم همواره امکان رفع اشکال یا پرسش و پاسخ وجود خواهد داشت.
  • مدت زمان: ۴۰ ساعت آموزش فشرده
  • ارزیابی (در صورت تمایل به دریافت گواهینامه) : پروژه نهایی شامل پیاده‌سازی یک کلاستر مقاوم با Patroni، بکاپ خودکار با pgBackRest و مانیتورینگ کامل با Grafana

پیش‌نیازها

  • آشنایی مقدماتی با SQL (دستورات SELECT، INSERT، UPDATE، DELETE)
  • آشنایی اولیه با خط فرمان لینوکس
  • درک پایه‌ای از مفاهیم پایگاه‌داده (جدول، رکورد، کلید)

جمع‌بندی

PostgreSQL امروز در مرکز تحول زیرساخت داده قرار دارد. پذیرندگان اولیه این فناوری، اکنون به مزیت رقابتی چشمگیری دست یافته‌اند. این دوره فرصتی است تا شما نیز به جمع متخصصانی بپیوندید که توانایی طراحی، پیاده‌سازی و نگهداری کلاسترهای PostgreSQL در مقیاس سازمانی را دارند.

فروشگاه
جستجو
دوره ها

لطفا کلمات کلیدی را وارد کنید