SQL Server
3.91K subscribers
19 photos
7 videos
36 files
168 links
حمید رضا صادقیان

🔴طراح‌ومشاوربانک های اطلاعاتیSQLSERVER
⚫️مدرس دوره های آموزشیDatabase

ارتباط با من:
@Hamidreza_Sadeghian

گروه تبادل نظر:
https://t.me/+uIc1qhv58gU0NWQ0
Download Telegram
سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین

امروز در یک مرکز دانشگاهی که مدیریت دیتابیس هاشو به عهده دارم ،‌یک کندی روی یکی از گزارشات رخ داده بود. حجم دیتابیس در این مرکز ۲ ترابایته و یک دیتابیس جداگانه هم برای فایل داریم که اونم ۲ ترابایته.
من کد فوق رو گرفتم و اول کار اومدم Estimated Plan اونو بررسی کردم دیدم Estimate row number ها رو اکثرا ۱ زده. ولی وقتی کد رو اجرا می کنی بیش از ۲۰ دقیقه طول می کشه.
کد رو اجرا کردم ولی Live execution planرو هم فعال کردم ببینم چالشش کجاست. دیدم دقیقا همون ایندکس هایی که Estimate row اون رو ۱ زده بود داره کلی رکورد رو میخونه. رفتم statistics اونو بررسی کردم و با Fullscan اونو آپدیت کردم.
با اینکار کد فوق زیر یک ثانیه اجرا شد و کلا مشکل حل شد. (البته پلن جدا برای بروزرسانی Statistics ها داریم به دلایلی اجرا نشده بود و باعث این اتفاق شده بود)
یک توضیح مختصر میخوام در خصوص Statistics ها بدم.
در واقع نحوه توزیع داده ها و همچنین Density داده ها رو براساس فیلد مورد نظر داره نشون میده. زمانی که یک Plan قراره ساخته بشه براساس فیلدهایی که در شرط ها شرکت کرده میاد Statistics مربوط به اون فیلدها رو انتخاب میکنه و توزیع داده ها و میزان داده هایی که قراره باهاش ارتباط برقرار کنه رو استخراج می کنه و براساس اون میاد پلن میچینه. حالا اگه این جدول بروز نباشه و آمارو ارقامش دقیق نباشه عملا باعث کندی عجیب و غریبی میشه.
مثل یک مدیری هست که در شرکت قراره نقشه راه شرکت رو بکشه و کسی که داره بهش اطلاعات میده بیاد بهش اطلاعات غلط بده. مسلما مدیر مسیری که انتخاب میکنه خیلی پرهزینه تر و پر از اشکال خواهدبود. ولی اگر اطلاعات دقیقی رو دریافت کنه یک مسیر درست رو میتونه انتخاب کنه که هزینه بسیار کمی داشته باشه و راحتتر به هدفشون برسه.

شاد باشین و شکرگزار
حمیدرضا صادقیان
@hamidreza_Sadeghian

#statistics
#ExecutionPlan
#PerformanceTuning
👍366👏3
شاید شما هم از دوستان DBA زیاد کلمه Statistics رو شنیدین؟ یا مثلا بگن Stat هاشو Update کردم درست شد و جملاتی از این قبیل.
حالا بریم ببینیم این جذاب لعنتی چیه که تمام رفتار Optimizer بر مبنای اون رقم میخوره.
فرض کنید Optimizer واحد مدیریت شرکت شماست.
و Statistics ها هم بخش آمار و تولید دیتای شما هستند که به شما دیتا میدن تا تصمیم گیری کنید.
خوب تا اینجاش که بنظر جذاب میاد.
آماااا. کجا دعواها شروع میشه.
اونجا که شما به عنوان مدیر میاین سرکار ، فرض کنید یک ذره پاداش کارمندان عقب افتاده(البته این اتفاق در یک کشور ثانی در دنیای موازی رخ میده شما مخاطب نیستید 😉 ) واحد آمار با شما لج می کنه و به شما دیتای غلط می ده. مثلا آمار اشتباهی از فروش محصولات میده. آمار اشتباهی از تعداد ثبت درخواست ها و بازدید سایت میده. شما هم شاد و خندان براساس آمارها میاین منابع تخصیص میدین برای توسعه کار(SQL Server میاد منابع RAm, CPU , IO رو پیش بینی میکنه و تخصیص میده برای اجرای کد) بعد با یک ژست مدیرعاملی خفن که مثلا ما خیلی باحالیم میاین دستور میدین به واحدهای مختلف که با این بودجه برید اینکارهارو انجام بدین(Optimizer پلن رو تهیه می کنه و میده به Execution Engine میگه داداش برو اینو اجرا کن) حالا این واحدهای از خدا بیخبر هم میرن بودجه رو میگیرن و سعی می کنن کارو دربیارن. اگه بودجه اضافی باشه که اون وسط یک حالی هم خودشون میکنن( البته SQL Server حلال خوره و میاد میگه داداش از این همه منابع من خداوکیلی اینقدرشو استفاده کردم مابقیش رو پس آوردم. البته جسارت نباشه ها بد برداشت نکنید، از جنبه فان نگاه کنید 😁 ) اگه بودجه کم بیاد که مجبورن با همون بودجه کم ، کارو دربیارن ولی زمان بیشتری رو صرف کنن( دقیقا همین اتفاق این سمت هم میافته)
حالا چی میشه؟
آفرین اینجوری میشه که کدها ومنابع شما به فنا میره.
حالا اگه واحد آمار پاداششو گرفته باشه و شنگول باشه و آمار درستی بده. چه اتفاقی میافته؟ دقیقااا. بودجه بندی مناسب ، تخصیص منابع درست و درنهایت تخمین دقیق زمان اجرا بدون هیچگونه هدررفت منابع.
سعی کردم این مطلب رو با شوخی تلفیق کنم که درکش ساده باشه.
در پستهای بعدی تلاش می کنم بیشتر این مبحث رو باز کنم و بیشتر شمارو با رفتار درونی SQL Server آشناکنم.

پرسرعت و شاد باشین 😊



Telegram discussion Group :https://t.me/+-JqFG0ceU7JlNDA0

#Statistics
#DBA
#SQLServer_Internals

@Hamidreza_Sadeghian
👍294🤔2🤨1