مهندسی نرمافزار - Software Inside
#ابزار برای اینکه متوجه بشیم یه کوئری روی دیتابیس چطوری داره اجرا میشه یا چرا کنده معمولا از اون کوئری explain میگیریم و سعی میکنیم از روی خروجی explain این چیزا رو متوجه بشیم. متاسفانه خوندن خروجی خام این دستور مخصوصا وقتی پارامترهایی مثل analyze یا buffer…
#مقاله #بلاگ #postgres
Explaining the unexplainable
اون فردی که ابزار دومی توی پست بالا رو ساخته، یه وبلاگ فنی خیلی خوب هم داره که به صورت تخصصی در مورد Postgres مینویسه و کلی مطلب خفن داره. یکی از مطالبش که به نظرم خیلی خوب بود مجموعه پستهایی تحت عنوان «Explaining the unexplainable» هست که میاد از ابتدا شروع میکنه و توضیح میده که دستور EXPLAIN توی پستگرس چیه و چطوری کار میکنه و تا سطح پیشرفته پیش میره.
برای کسایی که میخوان tune کردن کوئریها و اپتیمایز کردن رو یاد بگیرن خیلی مفید میتونه باشه. کلا 6 بخش ازش منتشر شده که از طریق صفحهی پایین میتونید پیداشون کنید:
https://www.depesz.com/tag/unexplainable/
✴️ @software_inside - مهندسینرمافزار
Explaining the unexplainable
اون فردی که ابزار دومی توی پست بالا رو ساخته، یه وبلاگ فنی خیلی خوب هم داره که به صورت تخصصی در مورد Postgres مینویسه و کلی مطلب خفن داره. یکی از مطالبش که به نظرم خیلی خوب بود مجموعه پستهایی تحت عنوان «Explaining the unexplainable» هست که میاد از ابتدا شروع میکنه و توضیح میده که دستور EXPLAIN توی پستگرس چیه و چطوری کار میکنه و تا سطح پیشرفته پیش میره.
برای کسایی که میخوان tune کردن کوئریها و اپتیمایز کردن رو یاد بگیرن خیلی مفید میتونه باشه. کلا 6 بخش ازش منتشر شده که از طریق صفحهی پایین میتونید پیداشون کنید:
https://www.depesz.com/tag/unexplainable/
✴️ @software_inside - مهندسینرمافزار
🤯3
#talk #postgres
Hands On PostgreSQL 18
هفتهی پیش نسخهی جدید پستگرس منتشر شده و تغییرات زیادی داشته. ارائهی پایین خیلی خوب این تغییرات رو توضیح میده و با نسخههای قبلی مقایسه میکنه و بنچمارک میگیره.
دوتا از چیزایی که به نظرم جالب اومد این دوتاست:
مورد اول Async I/O: از این نسخه به بعد شما میتونید IO های دیتابیس رو به صورت Async انجام بدید. به صورت پیشفرض پستگرس سه تا پراسس دیگه برای هندل کردن IO میاره بالا که اینا IO رو انجام میدن؛ این روش کوئریها رو بهتر میکنه اما بهترین نیست. اگر روی لینوکس باشید و نسخهی کرنل +6.5 باشه میتونید از سیستمکالهای io_uring استفاده کنید که اسکنها رو خیلی خیلی سریعتر میکنه. توی ارائه تنظیم کردنش و بنچمارکهاش رو نشون میده.
مورد دوم Btree skip scan هست. تا الان اگر شما روی سه تا فیلد ایندکس میذاشتید(مثلا به ترتیب روی a و b و c)، اگر کوئری میزدید که b توش بود ولی a نبود از این ایندکس استفاده نمیشد. در واقع همیشه یه prefix ایی از فیلدهایی که ایندکس کردید باید توی کوئریتون میبود تا این ایندکس استفاده بشه. اما توی نسخهی 18 این قابلیت اضافه شده که این ایندکسها توی کوئریهایی که prefix ندارن هم استفاده بشه. مثلا توی مثال ما اگر فقط روی b کوئری بزنید بازم از این ایندکس استفاده میشه. این قابلیت مخصوصا وقتی cardinality ستونهای اول کمتره باعث میشه به ایندکسهای کمتری نیاز داشته باشید.
YouTube: Hands On PostgreSQL 18
✴️ @software_inside - مهندسینرمافزار
Hands On PostgreSQL 18
هفتهی پیش نسخهی جدید پستگرس منتشر شده و تغییرات زیادی داشته. ارائهی پایین خیلی خوب این تغییرات رو توضیح میده و با نسخههای قبلی مقایسه میکنه و بنچمارک میگیره.
دوتا از چیزایی که به نظرم جالب اومد این دوتاست:
مورد اول Async I/O: از این نسخه به بعد شما میتونید IO های دیتابیس رو به صورت Async انجام بدید. به صورت پیشفرض پستگرس سه تا پراسس دیگه برای هندل کردن IO میاره بالا که اینا IO رو انجام میدن؛ این روش کوئریها رو بهتر میکنه اما بهترین نیست. اگر روی لینوکس باشید و نسخهی کرنل +6.5 باشه میتونید از سیستمکالهای io_uring استفاده کنید که اسکنها رو خیلی خیلی سریعتر میکنه. توی ارائه تنظیم کردنش و بنچمارکهاش رو نشون میده.
مورد دوم Btree skip scan هست. تا الان اگر شما روی سه تا فیلد ایندکس میذاشتید(مثلا به ترتیب روی a و b و c)، اگر کوئری میزدید که b توش بود ولی a نبود از این ایندکس استفاده نمیشد. در واقع همیشه یه prefix ایی از فیلدهایی که ایندکس کردید باید توی کوئریتون میبود تا این ایندکس استفاده بشه. اما توی نسخهی 18 این قابلیت اضافه شده که این ایندکسها توی کوئریهایی که prefix ندارن هم استفاده بشه. مثلا توی مثال ما اگر فقط روی b کوئری بزنید بازم از این ایندکس استفاده میشه. این قابلیت مخصوصا وقتی cardinality ستونهای اول کمتره باعث میشه به ایندکسهای کمتری نیاز داشته باشید.
YouTube: Hands On PostgreSQL 18
✴️ @software_inside - مهندسینرمافزار