Database Labdon
882 subscribers
37 photos
3 videos
1 file
899 links
🕸 Database Academy

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
The Cost of TDE and Checksums in Cybertec PostgreSQL Enterprise Edition (PGEE)

🟢 خلاصه مقاله:
این مقاله هزینه کاراییِ فعال‌سازی TDE و Checksums را در Cybertec PostgreSQL Enterprise Edition (PGEE) بررسی می‌کند. نتیجه کلی این است که در PGEE، TDE تأثیر بسیار کمی بر کارایی دارد—همان‌طور که Christoph Berg می‌گوید: «از این‌که تأثیر TDE بر کارایی این‌قدر کم بود خوشحال شدم». Checksums برای محافظت در برابر فساد داده به‌کار می‌رود و اندکی هزینه محاسباتی بیشتر نسبت به TDE اضافه می‌کند، اما این هزینه معمولاً محدود و در برابر مزایای اطمینان از سلامت صفحات داده قابل قبول است. جمع‌بندی: با تکیه بر پیاده‌سازی بهینه PGEE و توان سخت‌افزارهای امروزی، می‌توان TDE و حتی ترکیب آن با Checksums را با اطمینان فعال کرد، بی‌آن‌که کارایی در اغلب سناریوها به‌طور معنی‌دار افت کند.

#PostgreSQL #PGEE #TDE #Encryption #Checksums #DatabasePerformance #Cybertec #DataSecurity

🟣لینک مقاله:
https://postgresweekly.com/link/174463/web


👑 @Database_Academy
🔵 عنوان مقاله
Postgres Partitioning Best Practices: Sofia's Story

🟢 خلاصه مقاله:
سofia در یک پلتفرم تحلیلی شلوغ، با تبدیل جداول بزرگ Postgres به پارتیشن‌های زمان‌محور و همسو با الگوهای فیلترگذاری، تاخیر کوئری‌ها را به‌طور محسوس کاهش داد. او با رعایت اصولی مثل انتخاب کلید پارتیشن درست، اندازه‌گذاری معقول پارتیشن‌ها، خودکارسازی چرخه ایجاد/ضمیمه/حذف، استفاده سنجیده از ایندکس‌های محلی و جمع‌آوری آمار در سطح هر پارتیشن، باعث شد Partition Pruning و برنامه‌ریز Postgres بهتر عمل کنند. نگهداشت هم ساده‌تر شد: حذف داده قدیمی با Drop پارتیشن، Vacuum/Analyze قابل پیش‌بینی، و بهره‌گیری از Partition-wise Join/Aggregate.

برای بهبود نوشتن، او با الهام از نکات Karen Jex و Warda Bibi، نقش حیاتی WAL را درک کرد و آن را روی یک دیسک مجزا و پرتحمل (مثلا NVMe) قرار داد تا رقابت I/O با داده اصلی کم شود. سپس تنظیمات WAL را هوشمندانه تیون کرد (مانند wal_level، max_wal_size، wal_buffers، و زمان‌بندی Checkpoint) و با پایش pg_stat_wal و pg_stat_bgwriter رفتار سیستم را زیر نظر گرفت. ترکیب پارتیشن‌بندی درست و جداسازی WAL روی دیسک مستقل، کارایی و پایداری را همزمان بالا برد، بدون پیچیده کردن معماری.

#Postgres
#WAL
#Partitioning
#DatabasePerformance
#Scaling
#Storage
#DevOps
#BestPractices

🟣لینک مقاله:
https://postgresweekly.com/link/174761/web


👑 @Database_Academy
🔵 عنوان مقاله
Tuning Asynchronous I/O (AIO) in Postgres 18

🟢 خلاصه مقاله:
در Postgres 18 قابلیت AIO اضافه شده که امکان ارسال هم‌زمان عملیات خواندن/نوشتن بدون بلوکه‌کردن پردازش‌ها را می‌دهد. نتیجه‌اش استفاده بهتر از CPU، افزایش توان عبوری و کاهش لگ‌های انتهای توزیع، به‌ویژه روی SSD/NVMe است. برای تیونینگ، از مقدارهای پیش‌فرض شروع کنید و با اندازه‌گیری دقیق جلو بروید؛ عمق صف مهم‌ترین اهرم است: عمق کم پهنا‌باند را هدر می‌دهد و عمق زیاد تاخیر را بالا می‌برد. اندازه‌ی دسته‌های ارسال، shared_buffers، و ریتم نوشتن‌های WAL/چک‌پوینت باید با نوع کار (OLTP در برابر تحلیل‌محور) و نوع دیسک تنظیم شوند. با pg_stat_io و رویدادهای انتظار در Postgres و ابزارهای سیستم‌عاملی مثل iostat، perf و pidstat پ99 تاخیر، صف‌ها و استفاده‌ی دیسک/CPU را پایش کنید. تفاوت‌های پلتفرمی مهم‌اند: روی Linux با io_uring، فایل‌سیستم‌ها (XFS/ext4/ZFS) و دیسک‌های ابری/شبکه‌ای رفتار متفاوتی دارند؛ HDD به عمق صف محافظه‌کارانه‌تر نیاز دارد و NVMe از عمق بیشتر سود می‌برد. در تمام مراحل، دوام (fsync، synchronous_commit) را با تست خرابی و بازیابی راستی‌آزمایی کنید. رویکرد مرحله‌ای—بالقوه با pgbench—و تنظیم تدریجی عمق صف و پارامترهای نوشتن، معمولاً بهترین کارایی پایدار را به‌همراه می‌آورد.

#Postgres #AIO #DatabasePerformance #io_uring #WAL #NVMe #Linux #Postgres18

🟣لینک مقاله:
https://postgresweekly.com/link/174756/web


👑 @Database_Academy
🔵 عنوان مقاله
Cumulative Statistics in Postgres 18

🟢 خلاصه مقاله:
این مطلب از Golang Weekly توضیح می‌دهد که cumulative statistics در Postgres 18 چگونه با تجمیع شمارنده‌ها و زمان‌ها در طول زمان، تصویری روندی از رفتار بار کاری ارائه می‌کند؛ تصویری که برای عیب‌یابی کارایی، برنامه‌ریزی ظرفیت و تعریف SLO بسیار مفیدتر از نماهای لحظه‌ای است. نویسنده انواع داده‌های قابل‌دسترسی از طریق نماها و اکستنشن‌ها (مثل آمار سطح کوئری، الگوهای دسترسی به جدول و ایندکس، I/O و فعالیت پس‌زمینه) را مرور می‌کند و تأکید دارد که در Postgres 18 ارائه و استفاده از این آمارها روان‌تر و قابل‌مقایسه‌تر شده است.

برای تیم‌های Go نیز رویکردی عملی پیشنهاد می‌شود: استخراج دوره‌ای آمار از طریق database/sql یا pgx، اسکن در ساختارها و ارسال به Prometheus تا داشبوردها و هشدارها بتوانند معیارهایی مانند تاخیر، نسبت cache hit و گروه‌های کوئری پرهزینه را در طول زمان دنبال کنند. نکات عملی شامل زمان‌بندی مناسب برای reset شمارنده‌ها (مثلاً همزمان با استقرار)، فیلتر کردن آمار بر اساس database یا application_name و اطمینان از سبک‌وزن بودن کوئری‌های مانیتورینگ است. ترکیب این قابلیت‌ها با جمع‌آوری سبک در Go راهی پایدار برای یافتن گلوگاه‌ها و حفظ کارایی در تکامل سیستم فراهم می‌کند.

#Postgres #PostgreSQL #CumulativeStatistics #DatabasePerformance #Observability #Go #Golang #Monitoring

🟣لینک مقاله:
https://postgresweekly.com/link/175101/web


👑 @Database_Academy
🔵 عنوان مقاله
A SQL Heuristic: ORs Are Expensive (10 minute read)

🟢 خلاصه مقاله:
OR در SQL اغلب باعث کندی می‌شود، چون بسیاری از query plannerها برای OR بین ستون‌های مختلف به sequential scan یا index merge/bitmap OR متوسل می‌شوند، در حالی‌که AND به‌طور طبیعی با compound indexها جور است. یک راه مؤثر، بازنویسی OR به چند کوئریِ ایندکس‌پسند و ترکیب آن‌ها با UNION/UNION ALL است تا هر شاخه از ایندکس مناسب خود استفاده کند و زمان اجرا گاهی تا ۱۰۰ برابر کاهش یابد. راه‌حل پایدارتر، بازطراحی schema با extension tables است تا به‌جای OR روی چند خاصیتِ پراکنده، با JOIN به جدول‌های باریک و ایندکس‌شده دسترسی پیدا کنید. همیشه با EXPLAIN/EXPLAIN ANALYZE اندازه‌گیری کنید؛ در جداول کوچک یا OR روی یک ستون (مشابه IN) شاید مشکل نداشته باشید، اما به‌طور کلی: AND را با compound index هماهنگ کنید، از OR بین ستون‌ها بپرهیزید، در صورت لزوم از UNION بهره ببرید و برای مسیرهای پرتردد، بازطراحی schema را در نظر بگیرید.

#SQL #DatabasePerformance #QueryOptimization #Indexes #PostgreSQL #MySQL #DataModeling #EXPLAIN

🟣لینک مقاله:
https://ethanseal.com/articles/ors-are-expensive?utm_source=tldrdata


👑 @Database_Academy
🔵 عنوان مقاله
Hands on Postgres 18: Async I/O, B-Tree Skip Scan, UUIDv7

🟢 خلاصه مقاله:
بنیان‌گذار pganalyze در یک وبینار، قابلیت‌های مهم Postgres 18 را به‌صورت عملی مرور می‌کند؛ از جمله Async I/O، B-Tree Skip Scan و UUIDv7. بخش Async I/O (از ۴:۲۰ تا ۲۲:۳۰) برجسته‌تر است و نشان می‌دهد چگونه هم‌پوشانی محاسبه و ورودی/خروجی می‌تواند تأخیر را کم و توان عملیاتی را در بارهای I/O-محور افزایش دهد. B-Tree Skip Scan اسکن روی ایندکس‌های مرکب را وقتی فیلتر شامل ستون اول نیست کاراتر می‌کند و هزینه پرس‌وجو را پایین می‌آورد. UUIDv7 نیز با نظم زمانی بهتر، locality ایندکس را بهبود می‌دهد و درج‌ها را پیوسته‌تر می‌کند. نتیجه اینکه این وبینار راهنمایی عملی برای ارزیابی و به‌کارگیری قابلیت‌های جدید Postgres 18 ارائه می‌دهد، و بخش Async I/O ارزش تماشای ویژه‌ای دارد.

#Postgres18 #PostgreSQL #AsyncIO #BTree #UUIDv7 #DatabasePerformance #pganalyze

🟣لینک مقاله:
https://postgresweekly.com/link/175388/web


👑 @Database_Academy
🔵 عنوان مقاله
SkipScan in TimescaleDB: Why DISTINCT Was Slow, How We Built It, and How You Can Use It

🟢 خلاصه مقاله:
SkipScan در TimescaleDB مشکل دیرینه‌ی کندی کوئری‌های DISTINCT را هدف می‌گیرد؛ جایی که برای یافتن مقادیر یکتا، اسکن‌های بزرگ و تکراری روی ایندکس انجام می‌شود. این ویژگی با «پرش» از میان بلوک‌های مقادیر تکراری و رفتن مستقیم به مقدار یکتای بعدی، تعداد خواندن‌ها و مقایسه‌ها را کاهش می‌دهد و DISTINCT و DISTINCT ON را مخصوصاً روی هایپرتیبل‌های بزرگ سریع‌تر می‌کند. برای بهره‌گیری عملی، ایندکس‌های B-tree چندستونه هم‌راستا با کلیدهای DISTINCT و ترتیب ORDER BY بسازید؛ برنامه‌ریز به‌صورت خودکار در الگوهای مناسب SkipScan را انتخاب می‌کند و در غیر این صورت به مسیرهای عادی برمی‌گردد. بیشترین سود زمانی است که داده‌ها تکرار زیاد و هم‌جواری مناسب در ایندکس داشته باشند.

هم‌زمان، Aksman و Hein از TigerData با همراهی Sebastian Insausti به بهبودهای عملیاتی و گزینه‌های یکپارچه‌سازی در Postgres 16 می‌پردازند؛ از رصد و تنظیم‌پذیری بهتر گرفته تا ساده‌تر شدن نگهداری و همگام‌سازی و تقویت اکوسیستم الحاقات و اتصال به سامانه‌های دیگر. این تغییرات عملیاتی، در کنار بهینه‌سازی‌هایی مانند SkipScan، Postgres 16 را به پایه‌ای توانمندتر برای بارهای تحلیلی و زمان‌محور تبدیل می‌کند.

#TimescaleDB #Postgres16 #SkipScan #DISTINCT #DatabasePerformance #TimeSeries #SQL #Postgres

🟣لینک مقاله:
https://postgresweekly.com/link/175400/web


👑 @Database_Academy
🔵 عنوان مقاله
Postgres 18 and Beyond: From AIO to Direct IO?

🟢 خلاصه مقاله:
Postgres 18 پشتیبانی از asynchronous IO را اضافه می‌کند تا خواندن/نوشتن‌ها بدون بلوکه‌شدن انجام شوند و کارایی و پایداری تأخیر تحت فشار بار بهتر شود. اکنون این پرسش مطرح است که آیا با Direct IO و دور زدن کامل OS caching می‌توان عملکرد را باز هم بهبود داد؟ مزیت آن حذف دوباره‌کش کردن و کنترل دقیق‌تر کش است، اما در عوض پیچیدگی بالاتر، نیاز به هم‌ترازی، و از دست‌دادن قابلیت‌هایی مثل readahead و writeback هسته را به‌همراه دارد. رویکرد محتمل، راهکار ترکیبی است: تکیه بر OS caching به‌صورت پیش‌فرض و استفاده گزینشی از Direct IO برای اسکن‌های بزرگ، فایل‌های موقت و بارهای تحلیلی. مسیر بعد از نسخه ۱۸ نیز شامل یکپارچه‌سازی عمیق‌تر با io_uring، پیش‌واکشی هوشمند و گزینه‌های Direct IO قابل پیکربندی خواهد بود.

#Postgres #PostgreSQL #AIO #DirectIO #DatabasePerformance #OSCache #io_uring #NVMe

🟣لینک مقاله:
https://postgresweekly.com/link/175094/web


👑 @Database_Academy
1
🔵 عنوان مقاله
Benchmarking Postgres 17 vs 18

🟢 خلاصه مقاله:
نویسنده یک بنچمارک گسترده و دقیق بین Postgres 17 و Postgres 18 با ۹۶ ترکیب مختلف انجام داده است. نتیجه کلی امیدوارکننده است: Postgres 18 در اغلب سناریوها بهبود عملکرد محسوسی نشان می‌دهد. همچنین دیسک‌های محلی بهترین نتایج را ارائه می‌کنند و انتخاب آن‌ها برای کارهای دیتابیسی مزیت دارد. در عین حال، تنظیمات دستی همچنان اثرگذار است و نباید فقط به مقادیر پیش‌فرض بسنده کرد. جمع‌بندی: ارتقا به Postgres 18 ارزشمند است، اما بهتر است در محیط خودتان تست کنید، از ذخیره‌سازی محلی استفاده کنید و با تیونینگ هدفمند حداکثر بهره را بگیرید.

#Postgres #PostgreSQL #Benchmarking #DatabasePerformance #Postgres18 #PerformanceTesting #Tuning #Storage

🟣لینک مقاله:
https://postgresweekly.com/link/175714/web


👑 @Database_Academy
🔵 عنوان مقاله
Understanding and Setting Postgres JDBC Fetch Size

🟢 خلاصه مقاله:
این مقاله اهمیت تنظیم درست Fetch Size در JDBC برای Postgres را توضیح می‌دهد: مقدار پیش‌فرض 0 عملاً کل نتایج را یک‌باره در حافظه می‌ریزد و برای حجم‌های بزرگ خطرناک است. برای استریم واقعی باید auto-commit را خاموش کنید (setAutoCommit(false)) و روی Statement/PreparedStatement مقدار setFetchSize(n) بگذارید یا از defaultRowFetchSize در اتصال استفاده کنید؛ در حالت auto-commit فعال، درایور از cursor سمت سرور استفاده نمی‌کند و Fetch Size نادیده گرفته می‌شود. انتخاب مقدار به اندازه ردیف‌ها، تأخیر شبکه و حافظه بستگی دارد؛ معمولاً 100 تا 1000 شروع خوبی است و برای ردیف‌های بزرگ (JSON/BYTEA) بهتر است مقدار کوچک‌تر باشد. در Spring JdbcTemplate و jOOQ می‌توانید fetchSize را مستقیم تنظیم کنید؛ در JPA/Hibernate برای استریم با PostgreSQL علاوه بر hibernate.jdbc.fetch_size معمولاً نیاز به ResultSet رو به جلو و auto-commit خاموش دارید. حواستان باشد استریم باعث باز ماندن تراکنش می‌شود و می‌تواند VACUUM را به تأخیر بیندازد؛ پس جریان‌ها را کوتاه نگه دارید و برای سناریوهای تعاملی از صفحه‌بندی استفاده کنید. این موضوع اخیراً در Golang Weekly برجسته شده است و برای تیم‌هایی که Java و Go را ترکیب می‌کنند کاربردی است.

#PostgreSQL #JDBC #FetchSize #DatabasePerformance #Java #GolangWeekly #Streaming #PerformanceTuning

🟣لینک مقاله:
https://postgresweekly.com/link/175727/web


👑 @Database_Academy
🔵 عنوان مقاله
Pipelining Comes to psql in Postgres 18

🟢 خلاصه مقاله:
** در Postgres 18، ابزار psql فرمان‌های داخلی برای فعال‌سازی و کنترل pipelining در اسکریپت‌های SQL اضافه کرده است. با این قابلیت، چندین کوئری پشت‌سرهم ارسال می‌شوند و منتظر پاسخ تک‌به‌تک نمی‌مانند؛ در نتیجه رفت‌وبرگشت‌های شبکه کمتر و زمان اجرا کوتاه‌تر می‌شود. به‌گفته Daniel، این کار می‌تواند بهره‌وری و throughput کوئری‌ها را به‌طور چشمگیری افزایش دهد، به‌ویژه در اسکریپت‌های پر از دستورات کوچک.

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

#Postgres
#psql
#Pipelining
#SQL
#DatabasePerformance
#PostgreSQL18
#Throughput
#ETL

🟣لینک مقاله:
https://postgresweekly.com/link/175088/web


👑 @Database_Academy