سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین
یک دوره Performance tuning رو دارم با یکی از شرکتها برگزار می کنم، تا اینجای کار در خصوص ساختارهای Query Optimization و یک توضیح مختصری در خصوص Execution Plan ها دادم و همچنین در خصوص
Logical processing , set based , declarative thinking و Statistics ها صحبت کردم.
اتفاقی که افتاده جالبه. من هنوز اصلا در خصوص index ها و بررسی چالش های کدها و اشکالات کدها صحبت نکردم.
دیروز یکی از دوستان میگفت با همین مطالبی که گفتیم یک کدی رو بهبود داده و زمانش از ۲۰ دقیقه رسیده به ۱۵ ثانیه.
و یکی دیگه هم میگفت زمان اجرای یک کد از ۴۵ دقیقه رسیده به ۴ دقیقه.
برام این نکته جالبه که فقط دوستان متوجه شدند که SQL Server چطوری کار میکنه و چطوری کدی رو پردازش می کنه.
با این طرز تفکر تونستند یک بازبینی روی کدهاشون انجام بدن و این بهبودها رقم بخوره.
این مساله خیلی اهمیت داره که با هرزبانی که کدمینویسیم ، بدونیم چطوری داره به کد ما نگاه می کنه ، چطوری کد مارو اجرا می کنه ، چطوری منابع بهش اختصاص میده. همین باعث میشه طرز فکر ماهم نسبت به اون زبان اصلاح بشه و قطعا بهبودهای خیلی خوبی رو در کدنویسی ایجاد می کنه.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@Hamidreza_Sadeghian
امیدوارم که عالی عالی باشین
یک دوره Performance tuning رو دارم با یکی از شرکتها برگزار می کنم، تا اینجای کار در خصوص ساختارهای Query Optimization و یک توضیح مختصری در خصوص Execution Plan ها دادم و همچنین در خصوص
Logical processing , set based , declarative thinking و Statistics ها صحبت کردم.
اتفاقی که افتاده جالبه. من هنوز اصلا در خصوص index ها و بررسی چالش های کدها و اشکالات کدها صحبت نکردم.
دیروز یکی از دوستان میگفت با همین مطالبی که گفتیم یک کدی رو بهبود داده و زمانش از ۲۰ دقیقه رسیده به ۱۵ ثانیه.
و یکی دیگه هم میگفت زمان اجرای یک کد از ۴۵ دقیقه رسیده به ۴ دقیقه.
برام این نکته جالبه که فقط دوستان متوجه شدند که SQL Server چطوری کار میکنه و چطوری کدی رو پردازش می کنه.
با این طرز تفکر تونستند یک بازبینی روی کدهاشون انجام بدن و این بهبودها رقم بخوره.
این مساله خیلی اهمیت داره که با هرزبانی که کدمینویسیم ، بدونیم چطوری داره به کد ما نگاه می کنه ، چطوری کد مارو اجرا می کنه ، چطوری منابع بهش اختصاص میده. همین باعث میشه طرز فکر ماهم نسبت به اون زبان اصلاح بشه و قطعا بهبودهای خیلی خوبی رو در کدنویسی ایجاد می کنه.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@Hamidreza_Sadeghian
👌27❤13👍9👏8
سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین
امروز در یک مرکز دانشگاهی که مدیریت دیتابیس هاشو به عهده دارم ،یک کندی روی یکی از گزارشات رخ داده بود. حجم دیتابیس در این مرکز ۲ ترابایته و یک دیتابیس جداگانه هم برای فایل داریم که اونم ۲ ترابایته.
من کد فوق رو گرفتم و اول کار اومدم Estimated Plan اونو بررسی کردم دیدم Estimate row number ها رو اکثرا ۱ زده. ولی وقتی کد رو اجرا می کنی بیش از ۲۰ دقیقه طول می کشه.
کد رو اجرا کردم ولی Live execution planرو هم فعال کردم ببینم چالشش کجاست. دیدم دقیقا همون ایندکس هایی که Estimate row اون رو ۱ زده بود داره کلی رکورد رو میخونه. رفتم statistics اونو بررسی کردم و با Fullscan اونو آپدیت کردم.
با اینکار کد فوق زیر یک ثانیه اجرا شد و کلا مشکل حل شد. (البته پلن جدا برای بروزرسانی Statistics ها داریم به دلایلی اجرا نشده بود و باعث این اتفاق شده بود)
یک توضیح مختصر میخوام در خصوص Statistics ها بدم.
در واقع نحوه توزیع داده ها و همچنین Density داده ها رو براساس فیلد مورد نظر داره نشون میده. زمانی که یک Plan قراره ساخته بشه براساس فیلدهایی که در شرط ها شرکت کرده میاد Statistics مربوط به اون فیلدها رو انتخاب میکنه و توزیع داده ها و میزان داده هایی که قراره باهاش ارتباط برقرار کنه رو استخراج می کنه و براساس اون میاد پلن میچینه. حالا اگه این جدول بروز نباشه و آمارو ارقامش دقیق نباشه عملا باعث کندی عجیب و غریبی میشه.
مثل یک مدیری هست که در شرکت قراره نقشه راه شرکت رو بکشه و کسی که داره بهش اطلاعات میده بیاد بهش اطلاعات غلط بده. مسلما مدیر مسیری که انتخاب میکنه خیلی پرهزینه تر و پر از اشکال خواهدبود. ولی اگر اطلاعات دقیقی رو دریافت کنه یک مسیر درست رو میتونه انتخاب کنه که هزینه بسیار کمی داشته باشه و راحتتر به هدفشون برسه.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@hamidreza_Sadeghian
#statistics
#ExecutionPlan
#PerformanceTuning
امیدوارم که عالی عالی باشین
امروز در یک مرکز دانشگاهی که مدیریت دیتابیس هاشو به عهده دارم ،یک کندی روی یکی از گزارشات رخ داده بود. حجم دیتابیس در این مرکز ۲ ترابایته و یک دیتابیس جداگانه هم برای فایل داریم که اونم ۲ ترابایته.
من کد فوق رو گرفتم و اول کار اومدم Estimated Plan اونو بررسی کردم دیدم Estimate row number ها رو اکثرا ۱ زده. ولی وقتی کد رو اجرا می کنی بیش از ۲۰ دقیقه طول می کشه.
کد رو اجرا کردم ولی Live execution planرو هم فعال کردم ببینم چالشش کجاست. دیدم دقیقا همون ایندکس هایی که Estimate row اون رو ۱ زده بود داره کلی رکورد رو میخونه. رفتم statistics اونو بررسی کردم و با Fullscan اونو آپدیت کردم.
با اینکار کد فوق زیر یک ثانیه اجرا شد و کلا مشکل حل شد. (البته پلن جدا برای بروزرسانی Statistics ها داریم به دلایلی اجرا نشده بود و باعث این اتفاق شده بود)
یک توضیح مختصر میخوام در خصوص Statistics ها بدم.
در واقع نحوه توزیع داده ها و همچنین Density داده ها رو براساس فیلد مورد نظر داره نشون میده. زمانی که یک Plan قراره ساخته بشه براساس فیلدهایی که در شرط ها شرکت کرده میاد Statistics مربوط به اون فیلدها رو انتخاب میکنه و توزیع داده ها و میزان داده هایی که قراره باهاش ارتباط برقرار کنه رو استخراج می کنه و براساس اون میاد پلن میچینه. حالا اگه این جدول بروز نباشه و آمارو ارقامش دقیق نباشه عملا باعث کندی عجیب و غریبی میشه.
مثل یک مدیری هست که در شرکت قراره نقشه راه شرکت رو بکشه و کسی که داره بهش اطلاعات میده بیاد بهش اطلاعات غلط بده. مسلما مدیر مسیری که انتخاب میکنه خیلی پرهزینه تر و پر از اشکال خواهدبود. ولی اگر اطلاعات دقیقی رو دریافت کنه یک مسیر درست رو میتونه انتخاب کنه که هزینه بسیار کمی داشته باشه و راحتتر به هدفشون برسه.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@hamidreza_Sadeghian
#statistics
#ExecutionPlan
#PerformanceTuning
👍36❤6👏3
سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین
میخوام در این پست اشاره ای کنم به اینکه اساسا DBA چیست؟ (ببخشید کیست). 😁
بیاین اینجوری نگاه کنید که یک DBA مثل یک کارآگاه می مونه.
حالا چرا کارآگاه؟
به خاطر اینکه دائما باید در مانیتورینگ رفتارهای مختلف رو بررسی کنه و اگه جایی یک چیز مشکوکی دید اینقدر بره دنبالش تا ببینه سرمنشا اون چیه و چرا رخ داده.
حالا بریم یک مثال واقعی براتون بزنم
چند روز پیش بکاپ هارو بررسی میکردم و میدیدم که حجمش خیلی عجیب غریب داره میره بالا. مثلا توی یک روز دیدم ۶۰ گیگابایت بکاپ Diff ما شده در صورتی که شب قبلش ما Full backup داشتیم. توی این چند روز من جداول رو نگاه میکردم ،اول شک کردم به حجم داده های جداول شاید یک دفعه زیاد شده. بعد از این رشد عجیب غریب نگاه کردم دیدم داده ها تغییر محسوسی نداشتن ولی حجم بکاپ این دفعه ۱۵ گیگابایت باز بهش اضافه شده. به فایل LOG شک کردم و اونو بررسی کردم دیدم بله یک دفعه حجمش شده ۲۰۰ گیگابایت. رفتم سراغ دلیل این مساله.
اول Log backupها رو بررسی کردم دیدم همش درسته.
بعد رفتم دستور زیر رو اجرا کردم
Select Name , Log_reuse_wait_desc from sys.databases
دراین کد بیان میکنه که Log File شما Wait چه مساله ای هست که رشد می کنه. دیدم که در این فیلد نوشته Replication. ماهم که Replication نداشتیم ولی CDC رو راه اندازی کرده بودم.
جاب CDC رو بررسی کردم دیدم که Stop شده و به دلیل اینکه Alarm ها خیلی زیاد بوده در لاگ من گم شده و ندیدمش. اونو Start کردم و این حجم Used فایل LDF کاهش پیدا کرد. به دلیل اینکه فایل LDF من Fragment هم شده بود اومدم فایل LDF رو Shrink کردم و حجمش رو کاهش دادم روی ۲۰ گیگابایت و Fragment اون هم مرتفع شد( به دلیل اینکه قبلا هم روی این حجم تنظیمش کرده بودم)
یکی از دلایل Fragment بودن فایل LDF تعداد بالای VLF هاست. و این VLF ها به ازای هرمرتبه ای که یک Grow در فایل LDF رخ میده اضافه میشن.
این دفعه که Full backup گرفتم حجمش تقریبا ۲۰ گیگابایت کاهش پیدا کرد و به عدد نرمال قبلی رسیدم.
کسی که DBA هست مرتبا باید همه این موارد رو به صورت روزانه چک کنه و کنترل کنه. حتما باید سیستم مانیتورینگ باشه. حتما باید سیستم Alarming داشته باشین.
و حتما باید Error log ها رو مدیریت کنید که یک دفعه مثل من حجم Error های بدون استفاده باعث نشه که چنین خطاهای مهمی رو نبینین.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@hamidreza_Sadeghian
#DBA
#Monitoring
#Database_Backup
امیدوارم که عالی عالی باشین
میخوام در این پست اشاره ای کنم به اینکه اساسا DBA چیست؟ (ببخشید کیست). 😁
بیاین اینجوری نگاه کنید که یک DBA مثل یک کارآگاه می مونه.
حالا چرا کارآگاه؟
به خاطر اینکه دائما باید در مانیتورینگ رفتارهای مختلف رو بررسی کنه و اگه جایی یک چیز مشکوکی دید اینقدر بره دنبالش تا ببینه سرمنشا اون چیه و چرا رخ داده.
حالا بریم یک مثال واقعی براتون بزنم
چند روز پیش بکاپ هارو بررسی میکردم و میدیدم که حجمش خیلی عجیب غریب داره میره بالا. مثلا توی یک روز دیدم ۶۰ گیگابایت بکاپ Diff ما شده در صورتی که شب قبلش ما Full backup داشتیم. توی این چند روز من جداول رو نگاه میکردم ،اول شک کردم به حجم داده های جداول شاید یک دفعه زیاد شده. بعد از این رشد عجیب غریب نگاه کردم دیدم داده ها تغییر محسوسی نداشتن ولی حجم بکاپ این دفعه ۱۵ گیگابایت باز بهش اضافه شده. به فایل LOG شک کردم و اونو بررسی کردم دیدم بله یک دفعه حجمش شده ۲۰۰ گیگابایت. رفتم سراغ دلیل این مساله.
اول Log backupها رو بررسی کردم دیدم همش درسته.
بعد رفتم دستور زیر رو اجرا کردم
Select Name , Log_reuse_wait_desc from sys.databases
دراین کد بیان میکنه که Log File شما Wait چه مساله ای هست که رشد می کنه. دیدم که در این فیلد نوشته Replication. ماهم که Replication نداشتیم ولی CDC رو راه اندازی کرده بودم.
جاب CDC رو بررسی کردم دیدم که Stop شده و به دلیل اینکه Alarm ها خیلی زیاد بوده در لاگ من گم شده و ندیدمش. اونو Start کردم و این حجم Used فایل LDF کاهش پیدا کرد. به دلیل اینکه فایل LDF من Fragment هم شده بود اومدم فایل LDF رو Shrink کردم و حجمش رو کاهش دادم روی ۲۰ گیگابایت و Fragment اون هم مرتفع شد( به دلیل اینکه قبلا هم روی این حجم تنظیمش کرده بودم)
یکی از دلایل Fragment بودن فایل LDF تعداد بالای VLF هاست. و این VLF ها به ازای هرمرتبه ای که یک Grow در فایل LDF رخ میده اضافه میشن.
این دفعه که Full backup گرفتم حجمش تقریبا ۲۰ گیگابایت کاهش پیدا کرد و به عدد نرمال قبلی رسیدم.
کسی که DBA هست مرتبا باید همه این موارد رو به صورت روزانه چک کنه و کنترل کنه. حتما باید سیستم مانیتورینگ باشه. حتما باید سیستم Alarming داشته باشین.
و حتما باید Error log ها رو مدیریت کنید که یک دفعه مثل من حجم Error های بدون استفاده باعث نشه که چنین خطاهای مهمی رو نبینین.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@hamidreza_Sadeghian
#DBA
#Monitoring
#Database_Backup
👍43❤4🤔1🤣1
سلام خدمت دوستان عزیزم
امیدوارم عالی عالی باشین
دیروز یکی از دوستانم یک سوالی ازم پرسید در خصوص استفاده از تابع Round.
چالشش این بود که دوتا مقدار داره که اعشاری هستند . میخواد اگه حاصلضرب این دوتا اعشاری شد بدون اینکه رندی اتفاق بیافته قسمت حقیقی اونو نشون بده.
مثلا فرض کنید
1.5*1.8 = 2.7 . اگه رند بشه خوب میشه ۳ یا اگه کمتر از ۲.۵ باشه میشه ۲ . ولی این میخواد در هر حالتی عدد ۲ برگرده.
خوب میتونه از تابع Round استفاده کنه.
Round(1.5*1.8,0,1)
که اون پارامتر اخر دقیقا همین کارو میکنه و قسمت اعشاری رو Truncate میکنه.
چالش اینجا بود سر این دو عدد با این که ضربش یک عدد حقیقی میشد ولی یک ریال کسر میکرد ازش.
۱۳۵.۷ * ۳۵۹۴۰۰ = ۴۸۷۷۰۵۸۰ باید بشه ولی عدد ۴۸۷۷۰۵۷۹ رو این تابع برمیگردوند.
برام خیلی جالب بود . رفتم دیتا تایپهای دیتابیسش رو بررسی کردم دیدم جفت فیلدهارو از نوع Float گرفته. اونارو به Decimal تبدیل کردیم درست شد.
احتمالا شاید اگه شما هم چنین خطاهای محاسباتی دارید بیاید از دیتاتایپ های دقیقتر استفاده کنید که چنین مشکلاتی نداشته باشین.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#TSQL
#SQL
امیدوارم عالی عالی باشین
دیروز یکی از دوستانم یک سوالی ازم پرسید در خصوص استفاده از تابع Round.
چالشش این بود که دوتا مقدار داره که اعشاری هستند . میخواد اگه حاصلضرب این دوتا اعشاری شد بدون اینکه رندی اتفاق بیافته قسمت حقیقی اونو نشون بده.
مثلا فرض کنید
1.5*1.8 = 2.7 . اگه رند بشه خوب میشه ۳ یا اگه کمتر از ۲.۵ باشه میشه ۲ . ولی این میخواد در هر حالتی عدد ۲ برگرده.
خوب میتونه از تابع Round استفاده کنه.
Round(1.5*1.8,0,1)
که اون پارامتر اخر دقیقا همین کارو میکنه و قسمت اعشاری رو Truncate میکنه.
چالش اینجا بود سر این دو عدد با این که ضربش یک عدد حقیقی میشد ولی یک ریال کسر میکرد ازش.
۱۳۵.۷ * ۳۵۹۴۰۰ = ۴۸۷۷۰۵۸۰ باید بشه ولی عدد ۴۸۷۷۰۵۷۹ رو این تابع برمیگردوند.
برام خیلی جالب بود . رفتم دیتا تایپهای دیتابیسش رو بررسی کردم دیدم جفت فیلدهارو از نوع Float گرفته. اونارو به Decimal تبدیل کردیم درست شد.
احتمالا شاید اگه شما هم چنین خطاهای محاسباتی دارید بیاید از دیتاتایپ های دقیقتر استفاده کنید که چنین مشکلاتی نداشته باشین.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#TSQL
#SQL
👍29❤14👌7👏1
سلام خدمت دوستان عزیزم
امیدوارم عالی عالی باشین
در سلسله مقالاتی تصمیم دارم در خصوص BI و سیستم های تحلیلی با شما صحبت کنم. همچنین به صورت عمیق به این مساله در SQL Server بپردازم و ابزارها و تکنیکهای مختلف را بررسی کنم.
این مقاله اول هست و یکسری مفاهیم ابتدایی رو داخلش توضیح دادم.
با ما در ادامه این مقالات همراه باشین.
اتفاقات جالبی خواهد افتاد.
شاد باشین و شکرگزار
مهیار محمدی
@kmoh1368
#BI
#olap
#OLTP
#Columnstore_Index
https://data-club.ir/sql-server/sql-and-t-sql/%d8%aa%d9%81%d8%a7%d9%88%d8%aa-%d8%b3%db%8c%d8%b3%d8%aa%d9%85%d9%87%d8%a7%db%8c-%d8%b9%d9%85%d9%84%db%8c%d8%a7%d8%aa%db%8c-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84%db%8c
امیدوارم عالی عالی باشین
در سلسله مقالاتی تصمیم دارم در خصوص BI و سیستم های تحلیلی با شما صحبت کنم. همچنین به صورت عمیق به این مساله در SQL Server بپردازم و ابزارها و تکنیکهای مختلف را بررسی کنم.
این مقاله اول هست و یکسری مفاهیم ابتدایی رو داخلش توضیح دادم.
با ما در ادامه این مقالات همراه باشین.
اتفاقات جالبی خواهد افتاد.
شاد باشین و شکرگزار
مهیار محمدی
@kmoh1368
#BI
#olap
#OLTP
#Columnstore_Index
https://data-club.ir/sql-server/sql-and-t-sql/%d8%aa%d9%81%d8%a7%d9%88%d8%aa-%d8%b3%db%8c%d8%b3%d8%aa%d9%85%d9%87%d8%a7%db%8c-%d8%b9%d9%85%d9%84%db%8c%d8%a7%d8%aa%db%8c-%d9%88-%d8%aa%d8%ad%d9%84%db%8c%d9%84%db%8c
data-club
تفاوت سیستمهای عملیاتی و تحلیلی
در این مقاله به مشخصه های سیستم های عملیاتی و سیستم های تحلیلی و تفاوت های اصلی بین آنها پرداختیم.
👍14❤6👏1
Media is too big
VIEW IN TELEGRAM
سلام خدمت دوستان عزیزم.
امیدوارم که عالی عالی باشین
در این فیلم ، من در خصوص استفاده از دستور Output در Update صحبت می کنم.
امیدوارم مفید واقع بشه
شاد باشین و شکرگزار
حمیدرضا صادقیان
#Tsql
#Update
#output
امیدوارم که عالی عالی باشین
در این فیلم ، من در خصوص استفاده از دستور Output در Update صحبت می کنم.
امیدوارم مفید واقع بشه
شاد باشین و شکرگزار
حمیدرضا صادقیان
#Tsql
#Update
#output
👍14❤6👏1🤝1
سلام خدمت دوستان عزیزم
امیدوارم عالی عالی باشین
یک پیشنهادی برای مدیران عامل شرکت های نرم افزاری دارم.
درصورتی که در زمینه دیتابیس هاتون کندی دارید ، چالش دارید و مشتری های ناراضی زیاد هستند(مخصوصا شرکتهای HIS) ، ما به کمک یک تیم حرفه ای میتونیم کمکتون کنیم.
در صورتی که تمایل داشتید همکاری رو باهم داشت باشیم ، خوشحال خواهم شد باهم صحبت داشته باشیم.
احتمالا از مدل همکاری راضی خواهید بود و شماهم ذینفع خواهید بود.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@hamidreza_Sadeghian
امیدوارم عالی عالی باشین
یک پیشنهادی برای مدیران عامل شرکت های نرم افزاری دارم.
درصورتی که در زمینه دیتابیس هاتون کندی دارید ، چالش دارید و مشتری های ناراضی زیاد هستند(مخصوصا شرکتهای HIS) ، ما به کمک یک تیم حرفه ای میتونیم کمکتون کنیم.
در صورتی که تمایل داشتید همکاری رو باهم داشت باشیم ، خوشحال خواهم شد باهم صحبت داشته باشیم.
احتمالا از مدل همکاری راضی خواهید بود و شماهم ذینفع خواهید بود.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@hamidreza_Sadeghian
👍9❤3
سلام خدمت دوستان عزیزم
امیدوارم عالی عالی باشین
در این مقاله قصد دارم در خصوص ادامه بحث در خصوص BI به ساختار Columnstore Index ها یک نگاه کلی بندازم و تفاوتش رو با ساختارهای B-Tree براتون بیان کنم.
شاد باشین و شکرگزار
مهیار محمدی
@kmoh1368
#columnstoreIndex
#BI
#DW
#DataWarehouse
#Columnstore_Index
https://data-club.ir/sql-server/sql-and-t-sql/columnstore-index-%d8%a7%d9%86%d9%82%d9%84%d8%a7%d8%a8%db%8c-%d8%af%d8%b1-%d8%b0%d8%ae%db%8c%d8%b1%d9%87%d8%b3%d8%a7%d8%b2%db%8c-%d8%af%d8%a7%d8%af%d9%87%d9%87%d8%a7-%d8%a8%d8%b1
امیدوارم عالی عالی باشین
در این مقاله قصد دارم در خصوص ادامه بحث در خصوص BI به ساختار Columnstore Index ها یک نگاه کلی بندازم و تفاوتش رو با ساختارهای B-Tree براتون بیان کنم.
شاد باشین و شکرگزار
مهیار محمدی
@kmoh1368
#columnstoreIndex
#BI
#DW
#DataWarehouse
#Columnstore_Index
https://data-club.ir/sql-server/sql-and-t-sql/columnstore-index-%d8%a7%d9%86%d9%82%d9%84%d8%a7%d8%a8%db%8c-%d8%af%d8%b1-%d8%b0%d8%ae%db%8c%d8%b1%d9%87%d8%b3%d8%a7%d8%b2%db%8c-%d8%af%d8%a7%d8%af%d9%87%d9%87%d8%a7-%d8%a8%d8%b1
data-club
Columnstore Index: انقلابی در ذخیرهسازی دادهها برای سیستمهای تحلیلی
Columnstore Index با تغییر نحوه ذخیرهسازی دادهها از حالت سطری به ستونی، سرعت اجرای کوئریهای تحلیلی را افزایش و مصرف منابع را کاهش میدهد. این قابلیت SQL Server با فشردهسازی بهینه و مقیاسپذیری بالا، راهکاری مؤثر برای پردازش دادههای حجیم ارائه میکند
👍6❤2👏1
یکی از مسائلی که در خیلی از SQL Server ها میبینم این هست که دوستان میان یک جاب تعریف می کنند برای Shrink Log . میشه بپرسم چرا؟
باور کنید این تفکر غلطیه اگر در هر دوره یا کلاسی این رو یاد گرفتین.
اگر Recovery Model دیتابیس شما Full هست و براساس میزان تراکنش ها مرتب ازش Log Backup بگیرید و همچنین سایز اولیه فایل رو درست تعریف کنید خیلی به ندرت پیش میاد که فایل شما رشد کنه. اونم برای زمانی هست که یک تراکنش خیلی بزرگی در سیستم شما درج بشه یا تغییرات عجیب غریبی رخ بده که در اون فضای خالی فایل Log شما قرار نگیره و مجبور به رشد باشه.
یکی از دلایل کندی دیتابیسهاتون میتونه همین مساله باشه.
حالا بیاین با یک مثال بهتون شرح بدم چه بلایی دارید سر SQL Server و OS میارید و مطمئن باشید در پل صراط ، یقه شمارو این دو بزرگوار خواهند گرفت 😁
فرض کنید شما یک پولی رو دادین به یکی که باهاش کار کنه و شما هم از سودش منتفع بشین. خوب تا اینجاش خیلی هم عالیه خوش به حالتون 😅
چالش اینجاست که عصر همون روز میگین شرمنده میشه پولمو بدین من پول کم آوردم. خوب اون بنده خدا هم میگه باشه بیا و واریز می کنه.
دوباره یک ساعت بعد میگین خوب بیا داداش این همون پوله ولی من تیکه تیکه (میزان رشد فایل) بهت این پول رو میدم. میگه باشه چیکار کنیم قبول.
دوباره عصر فردا میشه باز میگین ببخشید میشه پولمو پس بدی من دوباره پول کم اوردم( جبران کمبود فضای دیسک با شرینک کردن فایل لاگ) به محض اینکه پول رو گرفتی دوباره میگی من تا فردا تیکه تیکه بهت این پول رو میدم و این داستان هر روز ادامه داره.
به نظرتون اون شخص با شما چه برخوردی میکنه؟ چی میگه بهتون؟
آفرین ،دقیقا OS هم همین حرفهارو بهتون میزنه ولی چون ما توانایی شنیدنش رو نداریم به این رفتار زشت ادامه میدیم.
حالا در این پس دادن فضاو دوباره گرفتن فضا ، تمام دستورات شما باید منتظر بمونه تافضای کافی برای نوشتن داشته باشه و این میشه که وقتی سیستم شلوغه میزان فحش برثانیه به سیستم عزیز شما افزایش پیدا می کنه.
حالا برای اینکه این میزان فحش برثانیه رو کم کنید از همین الان برید این جاب رو کلا حذف کنید و با مدیریت درست لاگ بکاپ و همچنین تنظیم یک فضای اولیه برای این فایل برای همیشه از شر این Shrink کردن های روزانه خلاص بشین.
باشد که رستگار شویم و کمتر فحش بخوریم. 😁
#log_Backup
#TransactionLog
#Shrink
باور کنید این تفکر غلطیه اگر در هر دوره یا کلاسی این رو یاد گرفتین.
اگر Recovery Model دیتابیس شما Full هست و براساس میزان تراکنش ها مرتب ازش Log Backup بگیرید و همچنین سایز اولیه فایل رو درست تعریف کنید خیلی به ندرت پیش میاد که فایل شما رشد کنه. اونم برای زمانی هست که یک تراکنش خیلی بزرگی در سیستم شما درج بشه یا تغییرات عجیب غریبی رخ بده که در اون فضای خالی فایل Log شما قرار نگیره و مجبور به رشد باشه.
یکی از دلایل کندی دیتابیسهاتون میتونه همین مساله باشه.
حالا بیاین با یک مثال بهتون شرح بدم چه بلایی دارید سر SQL Server و OS میارید و مطمئن باشید در پل صراط ، یقه شمارو این دو بزرگوار خواهند گرفت 😁
فرض کنید شما یک پولی رو دادین به یکی که باهاش کار کنه و شما هم از سودش منتفع بشین. خوب تا اینجاش خیلی هم عالیه خوش به حالتون 😅
چالش اینجاست که عصر همون روز میگین شرمنده میشه پولمو بدین من پول کم آوردم. خوب اون بنده خدا هم میگه باشه بیا و واریز می کنه.
دوباره یک ساعت بعد میگین خوب بیا داداش این همون پوله ولی من تیکه تیکه (میزان رشد فایل) بهت این پول رو میدم. میگه باشه چیکار کنیم قبول.
دوباره عصر فردا میشه باز میگین ببخشید میشه پولمو پس بدی من دوباره پول کم اوردم( جبران کمبود فضای دیسک با شرینک کردن فایل لاگ) به محض اینکه پول رو گرفتی دوباره میگی من تا فردا تیکه تیکه بهت این پول رو میدم و این داستان هر روز ادامه داره.
به نظرتون اون شخص با شما چه برخوردی میکنه؟ چی میگه بهتون؟
آفرین ،دقیقا OS هم همین حرفهارو بهتون میزنه ولی چون ما توانایی شنیدنش رو نداریم به این رفتار زشت ادامه میدیم.
حالا در این پس دادن فضاو دوباره گرفتن فضا ، تمام دستورات شما باید منتظر بمونه تافضای کافی برای نوشتن داشته باشه و این میشه که وقتی سیستم شلوغه میزان فحش برثانیه به سیستم عزیز شما افزایش پیدا می کنه.
حالا برای اینکه این میزان فحش برثانیه رو کم کنید از همین الان برید این جاب رو کلا حذف کنید و با مدیریت درست لاگ بکاپ و همچنین تنظیم یک فضای اولیه برای این فایل برای همیشه از شر این Shrink کردن های روزانه خلاص بشین.
باشد که رستگار شویم و کمتر فحش بخوریم. 😁
#log_Backup
#TransactionLog
#Shrink
👍28😁6❤3👏3
چند روز پیش مشغول مانیتورینگ یکی از مراکز بودم ، دیدم که بیش از ۵۰۰ تا Deadlock روی دیتابیس رخ داده ! اون هم تو یک بازه کم. اصلا یک چیز عجیب غریبی بود.
رفتم کدها رو بررسی کردم دیدم Deadlock بین یک Select و Insert روی همون جدول داره رخ میده. Select داشت کل جدول رو Scan می کرد و Insert هم با شرایط خاصی نیاز داشت درج بشه که سبب Deadlock شده بود.
فیلدهای شرط Select رو بررسی کردم دیدم که یک فیلد از نوع nvarchar max هست.
(خداوکیلی Developer های عزیز اگه از این دیتاتایپ مثل نقل و نبات استفاده می کنید،برای حفظ جونتون هم که شده نزدیک یک DBA نشید. از ما گفتن بود 😁 )
مورد داشتم روی فیلد عددی هم Nvarchar max گذاشته شده.
در این فقره نوع Data type و طول فیلدها خساست از اخلاقهای بسیار نیکو پسندیده است.
خلاصه با تیم توسعه صحبت کردیم بچه ها زحمت کشیدن طول فیلد رو اصلاح کردن و من تونستم روی فیلدهای مورد نظر ایندکس بذارم.
بعد از قراردادن ایندکس کلا مشکل Deadlock عزیزمون حل شد و دیگه اون چالش رخ نداد.
البته این نکته رو هم در نظر بگیرید که جدول مذکور کلا ایندکسی نداشت.
من جداولی رو دیدم که خودش به دلیل تعدد ایندکس (بالای ۱۵ تا ایندکس. ماشالله دست و دل بازم بودن عزیزان 😅 ) باعث ایجاد Deadlock میشده.
اینطور نباشد که برید از فردا جداول مورد نظر رو غرق در ایندکس کنید بعد صدتاجای دیگه بترکه خلاصه مارو مورد عنایت قرار بدین. من در این فقره هیچگونه مسئولیتی قبول نمی کنم. 🙃
باشد که دیتابیسی عاری از هرگونه Deadlock داشته باشید.
#Deadlock
#DBA_Tips
رفتم کدها رو بررسی کردم دیدم Deadlock بین یک Select و Insert روی همون جدول داره رخ میده. Select داشت کل جدول رو Scan می کرد و Insert هم با شرایط خاصی نیاز داشت درج بشه که سبب Deadlock شده بود.
فیلدهای شرط Select رو بررسی کردم دیدم که یک فیلد از نوع nvarchar max هست.
(خداوکیلی Developer های عزیز اگه از این دیتاتایپ مثل نقل و نبات استفاده می کنید،برای حفظ جونتون هم که شده نزدیک یک DBA نشید. از ما گفتن بود 😁 )
مورد داشتم روی فیلد عددی هم Nvarchar max گذاشته شده.
در این فقره نوع Data type و طول فیلدها خساست از اخلاقهای بسیار نیکو پسندیده است.
خلاصه با تیم توسعه صحبت کردیم بچه ها زحمت کشیدن طول فیلد رو اصلاح کردن و من تونستم روی فیلدهای مورد نظر ایندکس بذارم.
بعد از قراردادن ایندکس کلا مشکل Deadlock عزیزمون حل شد و دیگه اون چالش رخ نداد.
البته این نکته رو هم در نظر بگیرید که جدول مذکور کلا ایندکسی نداشت.
من جداولی رو دیدم که خودش به دلیل تعدد ایندکس (بالای ۱۵ تا ایندکس. ماشالله دست و دل بازم بودن عزیزان 😅 ) باعث ایجاد Deadlock میشده.
اینطور نباشد که برید از فردا جداول مورد نظر رو غرق در ایندکس کنید بعد صدتاجای دیگه بترکه خلاصه مارو مورد عنایت قرار بدین. من در این فقره هیچگونه مسئولیتی قبول نمی کنم. 🙃
باشد که دیتابیسی عاری از هرگونه Deadlock داشته باشید.
#Deadlock
#DBA_Tips
👍44❤11👏3😁3💯1
شاید شما هم از دوستان 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
حالا بریم ببینیم این جذاب لعنتی چیه که تمام رفتار 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
Telegram
SQL Server
ُSQL Server Discussion Group (Farsi)
Juniors of SQL Server Group : PM to @Hamidreza_Sadeghian
Juniors of SQL Server Group : PM to @Hamidreza_Sadeghian
👍29❤4🤔2🤨1
خوب بریم برای یک چالش ذهنی جذاب دیگه.
در روایات آمده :
(( ای کسانی که ایمان آورده اید( منظور کسانی هست که به SQL Server ایمان آوردند) مبادا در نوع کدنویسی به صورت Row Based فکر کنید ، که همانا شما از کافران هستید)) 😉
حالا بریم برای روایت فوق .
بذارید با یک داستان جذاب شروع کنم. در یکی از پروژه هایی که کند بودیم و داشتیم در خصوص سناریوها صحبت می کردیم ، اینجوری پروژه شرح داده شد که ما یک سری محتویات XML در یک جدول داریم و باید اونها رو ردیف به ردیف خونده و یکسری عملیات روش انجام بدیم و درج کنیم. خوب به این عبارت ردیف به ردیف 🤬 🤬
دقت کنید.
بهش گفتم گل من ،چرا ردیف به ردیف اخه؟ تو که برای هر ردیف داری یک کاری انجام میدی گفت بله.
گفتم بعد در یک سری جدول هم درج می کنی گفت بله.
گفتم خوب مبارکه. همون اول بسم الله به جای اینکه یک ردیف رو سلکت کنی و بریزی داخل یک Temp ، بیا مثلا ۱۰۰۰ رکورد رو انتخاب کن بریز داخل Temp.
به جای اینکه اون عملیات رو برای یک ردیف انجام بدی بیا مثلا برای ۱۰۰۰ تا انجام بده چی میشه؟ گفت اخه من میخوام این عملیات روی تک تک رکوردها انجام بشه.
گفتم ببین دیگه اومدی و نسازیا. آقا به توچه SQL Server چطوری میاد اون کارو برای ۱۰۰۰ تا انجام میده.
تو بهش بگو برادر من عزیز من ، من ۱۰۰۰ تا ردیف XML دارم و قراره این اتفاقات روش بیافته. حالا دیگه این عزیزدل چطوری میره و برای تک تک اون ردیفها اینکارو انجام میده به من و توچه ربطی داره؟ برو به زندگیت برس اینقدر دخالت نکن. ول کن اخه. 😁
و همین امر سبب میشه یک فرآیندی که ساعتها زمان میبره به کمتر از چند دقیقه کاهش پیدا کنه. مورد داشتیم چنین عملیاتی ۷۲ ساعت برای پردازش ۳۰۰ هزار رکورد زمان میگرفت و با چنین تغییر تفکری زمانش به ۲ دقیقه کاهش پیدا کرد.
حالا بازم برید تفکر Set Based رو از داخل کدهاتون حذف کنید. بازهم هی بیاید بگید باید ردیف به ردیف 🤬 🤬 اینکارو انجام بدیم. باز هم برید داخل کدهاتون دوجین Cursor , While بذارید.
ایمان بیاورید و دست از اعتقادات خرافه بردارید.
اگر خواستید ما هم میتوانیم در ایمان آوردن شما بهتون کمک کنیم. 😅
اینم راه ارتباطی دعانویسمون :😂
@Hamidreza_Sadeghian
#set_Based
#Row_Based
#TSQL
در روایات آمده :
(( ای کسانی که ایمان آورده اید( منظور کسانی هست که به SQL Server ایمان آوردند) مبادا در نوع کدنویسی به صورت Row Based فکر کنید ، که همانا شما از کافران هستید)) 😉
حالا بریم برای روایت فوق .
بذارید با یک داستان جذاب شروع کنم. در یکی از پروژه هایی که کند بودیم و داشتیم در خصوص سناریوها صحبت می کردیم ، اینجوری پروژه شرح داده شد که ما یک سری محتویات XML در یک جدول داریم و باید اونها رو ردیف به ردیف خونده و یکسری عملیات روش انجام بدیم و درج کنیم. خوب به این عبارت ردیف به ردیف 🤬 🤬
دقت کنید.
بهش گفتم گل من ،چرا ردیف به ردیف اخه؟ تو که برای هر ردیف داری یک کاری انجام میدی گفت بله.
گفتم بعد در یک سری جدول هم درج می کنی گفت بله.
گفتم خوب مبارکه. همون اول بسم الله به جای اینکه یک ردیف رو سلکت کنی و بریزی داخل یک Temp ، بیا مثلا ۱۰۰۰ رکورد رو انتخاب کن بریز داخل Temp.
به جای اینکه اون عملیات رو برای یک ردیف انجام بدی بیا مثلا برای ۱۰۰۰ تا انجام بده چی میشه؟ گفت اخه من میخوام این عملیات روی تک تک رکوردها انجام بشه.
گفتم ببین دیگه اومدی و نسازیا. آقا به توچه SQL Server چطوری میاد اون کارو برای ۱۰۰۰ تا انجام میده.
تو بهش بگو برادر من عزیز من ، من ۱۰۰۰ تا ردیف XML دارم و قراره این اتفاقات روش بیافته. حالا دیگه این عزیزدل چطوری میره و برای تک تک اون ردیفها اینکارو انجام میده به من و توچه ربطی داره؟ برو به زندگیت برس اینقدر دخالت نکن. ول کن اخه. 😁
و همین امر سبب میشه یک فرآیندی که ساعتها زمان میبره به کمتر از چند دقیقه کاهش پیدا کنه. مورد داشتیم چنین عملیاتی ۷۲ ساعت برای پردازش ۳۰۰ هزار رکورد زمان میگرفت و با چنین تغییر تفکری زمانش به ۲ دقیقه کاهش پیدا کرد.
حالا بازم برید تفکر Set Based رو از داخل کدهاتون حذف کنید. بازهم هی بیاید بگید باید ردیف به ردیف 🤬 🤬 اینکارو انجام بدیم. باز هم برید داخل کدهاتون دوجین Cursor , While بذارید.
ایمان بیاورید و دست از اعتقادات خرافه بردارید.
اگر خواستید ما هم میتوانیم در ایمان آوردن شما بهتون کمک کنیم. 😅
اینم راه ارتباطی دعانویسمون :😂
@Hamidreza_Sadeghian
#set_Based
#Row_Based
#TSQL
👌23👍10😍3🔥2👏2
میخوام در حوزه Tuning شمارو با یک مفهومی به نام Good Enough (بسه دیگه من خوبم 😅 ) آشنا کنم.
فرض کنید میخواین یک خودی نشون بدین و بگین که ما خیلی خفنیم و کلاس رفتیم و کلی کتاب خوندیم حالا باید بگیم فلان کار رو کردیم.
دمتون هم گرم.
حالا میرید یک کدی پیدا می کنید که مثلا ۴ ساعت زمان میبره کلی تلاش می کنید مثلا زمانش میرسه به ۱ دقیقه. (بابا ایول چقدر شما خفنید اخه 😁 👏 )
هی منتظر میشین یکی بیاد ازتون تشکر کنه بگه دمت گرم حمیدرضا سیستممون خیلی دیگه سریع کار میکنه مثل بنز داره جواب میده. یک روز، دو روز ،سه روز صبر می کنیم بعد وقتی که میبینم نه مثل اینکه هیچ خبری نیست با کوله باری از 🤬 🤬 راهی اطلاع رسانی به شرکت میشیم.
میریم شروع می کنیم به تیم توسعه میگیم ببین محمد من یک کار خفن کردم این کد رو زمانش رو اینقدر تغییر دادم.
محمد : تو روی این کده کار کردی؟
حمیدرضا : خوب اره.
محمد : چقدر وقت گذاشتی؟
حمیدرضا :راستش دو روز اشک منو دراورد تا اصلاحش کردم.
محمد : آفرین خسته نباشید این یک گزارشی هست که هر ۴ ماه یک بار واحد X میگیره و خیلی هم زمانش براش اهمیتی نداره.
😤 😤 😡
اینجاست که انگار آب یخ روی شما ریختن. حالا تو این وسط دوجین هم ایندکس ایجاد کردین که باعث شده صدتا کد اساسی بره تو دیوار که این کد درست کار کنه.
عزیزان دل،
اول باید ببینید چه کدی داره چه باری میذاره و چند وقت یکبار داره بار ایجاد می کنه.
دوم اینکه تا چقدر باید پیش بریم روی تیونینگ کد که خوب باشه. یک کدی اگه توی یک دقیقه هم جواب بده اکیه نیازی نیست زیادی باهاش سرو کله بزنید و دوجین ایندکس بهش اضافه کنید.
یک کدی هم ۵۰ میلی ثانیه زمان میبره باید برسونیدش مثلا به ۲۰ میلی ثانیه.
اینکه روی چه کدی و چقدر کار کنیم تا کجا پیش بریم و سعی کنیم بهینه اش کنیم برمیگرده به تعداد دفعات اجرا ، میزان لودی که ایجاد می کنه و اهمیت دار بودن اون.
کدی که قراره هر یک ماه یکبار یک گزارش بگیره این شاید به اندازه کدی که روزی ۱۰۰۰ مرتبه اجرا میشه با اهمیت نباشه(هرچند ممکنه اون ماهی یک بار برای مدیر مربوطه باشه.که اونو میشه زمانش رو یک مقداری بهینه تر کرد تا اخراج نشیم 😂 )
این مهم رو در نظر بگیرید خدایی.
چون Tuning هزینه داره. الزاما ایجاد هر ایندکسی مناسب نیست.
الزاما تغییر در خیلی از ساختار مناسب نیست.
خیلی از رفتارها مناسب نیست و واقعا باید یک سبک و سنگین بین مزایا و معایبش اتفاق بیافته و بعد انجام بشه.
خدایی چقدر ما DBA ها خفن هستیم که حواسمون به همه چیز هست مثل ... (برای خودمون نوشابه پوست بکنیم 😅 )
@Hamidreza_Sadeghian
#GoodEnough
#PerformanceTuning
#DBA
فرض کنید میخواین یک خودی نشون بدین و بگین که ما خیلی خفنیم و کلاس رفتیم و کلی کتاب خوندیم حالا باید بگیم فلان کار رو کردیم.
دمتون هم گرم.
حالا میرید یک کدی پیدا می کنید که مثلا ۴ ساعت زمان میبره کلی تلاش می کنید مثلا زمانش میرسه به ۱ دقیقه. (بابا ایول چقدر شما خفنید اخه 😁 👏 )
هی منتظر میشین یکی بیاد ازتون تشکر کنه بگه دمت گرم حمیدرضا سیستممون خیلی دیگه سریع کار میکنه مثل بنز داره جواب میده. یک روز، دو روز ،سه روز صبر می کنیم بعد وقتی که میبینم نه مثل اینکه هیچ خبری نیست با کوله باری از 🤬 🤬 راهی اطلاع رسانی به شرکت میشیم.
میریم شروع می کنیم به تیم توسعه میگیم ببین محمد من یک کار خفن کردم این کد رو زمانش رو اینقدر تغییر دادم.
محمد : تو روی این کده کار کردی؟
حمیدرضا : خوب اره.
محمد : چقدر وقت گذاشتی؟
حمیدرضا :راستش دو روز اشک منو دراورد تا اصلاحش کردم.
محمد : آفرین خسته نباشید این یک گزارشی هست که هر ۴ ماه یک بار واحد X میگیره و خیلی هم زمانش براش اهمیتی نداره.
😤 😤 😡
اینجاست که انگار آب یخ روی شما ریختن. حالا تو این وسط دوجین هم ایندکس ایجاد کردین که باعث شده صدتا کد اساسی بره تو دیوار که این کد درست کار کنه.
عزیزان دل،
اول باید ببینید چه کدی داره چه باری میذاره و چند وقت یکبار داره بار ایجاد می کنه.
دوم اینکه تا چقدر باید پیش بریم روی تیونینگ کد که خوب باشه. یک کدی اگه توی یک دقیقه هم جواب بده اکیه نیازی نیست زیادی باهاش سرو کله بزنید و دوجین ایندکس بهش اضافه کنید.
یک کدی هم ۵۰ میلی ثانیه زمان میبره باید برسونیدش مثلا به ۲۰ میلی ثانیه.
اینکه روی چه کدی و چقدر کار کنیم تا کجا پیش بریم و سعی کنیم بهینه اش کنیم برمیگرده به تعداد دفعات اجرا ، میزان لودی که ایجاد می کنه و اهمیت دار بودن اون.
کدی که قراره هر یک ماه یکبار یک گزارش بگیره این شاید به اندازه کدی که روزی ۱۰۰۰ مرتبه اجرا میشه با اهمیت نباشه(هرچند ممکنه اون ماهی یک بار برای مدیر مربوطه باشه.که اونو میشه زمانش رو یک مقداری بهینه تر کرد تا اخراج نشیم 😂 )
این مهم رو در نظر بگیرید خدایی.
چون Tuning هزینه داره. الزاما ایجاد هر ایندکسی مناسب نیست.
الزاما تغییر در خیلی از ساختار مناسب نیست.
خیلی از رفتارها مناسب نیست و واقعا باید یک سبک و سنگین بین مزایا و معایبش اتفاق بیافته و بعد انجام بشه.
خدایی چقدر ما DBA ها خفن هستیم که حواسمون به همه چیز هست مثل ... (برای خودمون نوشابه پوست بکنیم 😅 )
@Hamidreza_Sadeghian
#GoodEnough
#PerformanceTuning
#DBA
👍27👌5❤3😁2👏1
سلام خدمت دوستان عزیز.
امیدارم حالتون عالی عالی عالی باشه
من با همکاری سایت مکتب خونه دوره آموزشی T-SQL Querying رو طراحی کردیم.
این دوره از پایه بوده و هیچ پیش نیازی رو نمیخواد.
مباحث زیادی در این دوره مطرح شده و با تمرین های مختلف و منتورینگ سعی بر این شده که افرادی که د راین دوره هستند به این مباحث مسلط بشن.
همچنین هزینه این دوره نسبت به مابقی دوره ها بسیار کمتر بوده که همه افراد بتونن ازش استفاده کنند.
از لینک زیر میتونید سرفصلهای آموزشی رو ببینید. و در صورت تمایل نسبت به ثبت نام د راین دوره اقدام کنید.
با کد زیر ۵۰ درصد تخفیف دریافت خواهید کرد:
نکته ای که هست اینه که کد تخفیف فقط برای ۲۰ نفر در نظر گرفته شده است.
کد تخفیف :COUPON-eb99d
https://maktabkhooneh.org/course/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-sql-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-sql-server-mk1378/?v=1&affiliate_code=y7p0k0
امیدارم حالتون عالی عالی عالی باشه
من با همکاری سایت مکتب خونه دوره آموزشی T-SQL Querying رو طراحی کردیم.
این دوره از پایه بوده و هیچ پیش نیازی رو نمیخواد.
مباحث زیادی در این دوره مطرح شده و با تمرین های مختلف و منتورینگ سعی بر این شده که افرادی که د راین دوره هستند به این مباحث مسلط بشن.
همچنین هزینه این دوره نسبت به مابقی دوره ها بسیار کمتر بوده که همه افراد بتونن ازش استفاده کنند.
از لینک زیر میتونید سرفصلهای آموزشی رو ببینید. و در صورت تمایل نسبت به ثبت نام د راین دوره اقدام کنید.
با کد زیر ۵۰ درصد تخفیف دریافت خواهید کرد:
نکته ای که هست اینه که کد تخفیف فقط برای ۲۰ نفر در نظر گرفته شده است.
کد تخفیف :COUPON-eb99d
https://maktabkhooneh.org/course/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-sql-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-sql-server-mk1378/?v=1&affiliate_code=y7p0k0
مکتبخونه
آموزش SQL | آموزش پایگاه داده SQL SERVER | مکتبخونه
در این دوره پس از آموزش SQL و مفاهیم مربوط به SQL Server، یاد میگیرید که با بانکهای اطلاعاتی SQL Server چگونه کار کنید و چطور یک بانک اطلاعاتی طراحی کنید
👍9❤3🤷♂2
سلام خدمت دوستان عزیزم 🌟
امیدوارم که عالی عالی باشین.
تا حالا شده از خودتون بپرسید:
"چقدر میتونیم با یه دیتابیس بهینه و مدیریتشده، به رشد کسبوکارمون سرعت بدیم؟" 🤔
من اینجا هستم تا بهتون بگم که نه تنها میشه، بلکه خیلی راحتتر از چیزی که فکر میکنید! 🎯
چند وقتی هست که تصمیم گرفتم به جای فعالیت در قالب شخصیت حقیقی ، خدماتم رو تو قالب یک شرکت رسمی ارائه بدم و حالا یه فرصت ویژه برای شرکتهای نرمافزاری دارم:
✨ رایگان دیتابیس شما رو Tune میکنم!
✨ مسئولیت نگهداری دیتابیس مشتریان شما رو به عهده میگیرم!
✨ یه همکاری برد-برد که هم خیال شما راحت باشه، هم درآمد بیشتری کسب کنید!
اگر براتون جذاب شد یا دوست دارید بیشتر در موردش بدونید، خوشحال میشم با هم صحبت کنیم. بیاید ببینیم چطور میتونیم یه تیم قوی برای دیتابیس بسازیم و کسبوکار شما رو به سطح بالاتری ببریم. 💪😊
منتظر پیامهاتون هستم! 📩
شاد باشین و شکرگزار
@Hamidreza_Sadeghian
امیدوارم که عالی عالی باشین.
تا حالا شده از خودتون بپرسید:
"چقدر میتونیم با یه دیتابیس بهینه و مدیریتشده، به رشد کسبوکارمون سرعت بدیم؟" 🤔
من اینجا هستم تا بهتون بگم که نه تنها میشه، بلکه خیلی راحتتر از چیزی که فکر میکنید! 🎯
چند وقتی هست که تصمیم گرفتم به جای فعالیت در قالب شخصیت حقیقی ، خدماتم رو تو قالب یک شرکت رسمی ارائه بدم و حالا یه فرصت ویژه برای شرکتهای نرمافزاری دارم:
✨ رایگان دیتابیس شما رو Tune میکنم!
✨ مسئولیت نگهداری دیتابیس مشتریان شما رو به عهده میگیرم!
✨ یه همکاری برد-برد که هم خیال شما راحت باشه، هم درآمد بیشتری کسب کنید!
اگر براتون جذاب شد یا دوست دارید بیشتر در موردش بدونید، خوشحال میشم با هم صحبت کنیم. بیاید ببینیم چطور میتونیم یه تیم قوی برای دیتابیس بسازیم و کسبوکار شما رو به سطح بالاتری ببریم. 💪😊
منتظر پیامهاتون هستم! 📩
شاد باشین و شکرگزار
@Hamidreza_Sadeghian
👍14❤1
امروز یک Disaster پدرمادر داری خوردیم که نگو. اصلا جیگرمون حال اومد 😂 😂 (شما بخونید ......)
حالا از کل داستان بگذرم یک خطای مسخره خوردم که تا به حال ندیده بودم. مجبور بودم وضعیت Node هارو تغییر بدم هرکاری میکردم بهم خطا میداد فایل Sqlconf.dll رو پیدا نمیکنم. خلاصه ماهم دست به کمر شدیم که بزنیم کسی که دست به فایلهای SQL Server زده رو شتک کنیم 🙃
رفتم روی نود دوم دیدم در مسیر
program files\microsoft sql server\ 160\sql2022\ setup boostrap
پوشه های زیر مجموعه اش نیست.
در یک حرکت انتحاری از سرور دوم این فایلها رو کپی کردم چون نسخ هر دو سرور یکی بود، و این حرکت ژانگولری باعث شد مشکل حل بشه و دوست خوبمون عین آدم به درخواستهای ما پاسخ بده.
تازه ما مثلا DBA هستیم اوضاعمون اینه. 😂 قشنگ شیرین دو ساعت Downtime داشتیم. وای به حال مجموعه ای که DBA هم نداره.
فکر کنم شب به شب برای سرورهاتون اسپند دود می کنید که چشم نخورن.
خدایی هردعایی گرفتین به ماهم بدین تک خور نباشین . 😂
ولی اگر دعا نگرفتین ما میتونیم کنارتون باشیم
حالا از کل داستان بگذرم یک خطای مسخره خوردم که تا به حال ندیده بودم. مجبور بودم وضعیت Node هارو تغییر بدم هرکاری میکردم بهم خطا میداد فایل Sqlconf.dll رو پیدا نمیکنم. خلاصه ماهم دست به کمر شدیم که بزنیم کسی که دست به فایلهای SQL Server زده رو شتک کنیم 🙃
رفتم روی نود دوم دیدم در مسیر
program files\microsoft sql server\ 160\sql2022\ setup boostrap
پوشه های زیر مجموعه اش نیست.
در یک حرکت انتحاری از سرور دوم این فایلها رو کپی کردم چون نسخ هر دو سرور یکی بود، و این حرکت ژانگولری باعث شد مشکل حل بشه و دوست خوبمون عین آدم به درخواستهای ما پاسخ بده.
تازه ما مثلا DBA هستیم اوضاعمون اینه. 😂 قشنگ شیرین دو ساعت Downtime داشتیم. وای به حال مجموعه ای که DBA هم نداره.
فکر کنم شب به شب برای سرورهاتون اسپند دود می کنید که چشم نخورن.
خدایی هردعایی گرفتین به ماهم بدین تک خور نباشین . 😂
ولی اگر دعا نگرفتین ما میتونیم کنارتون باشیم
👍22😁5🤣3🤔1
خوب در ادامه Disaster قبلی که گفتم ، یکی از چالش ها سر یک کدی بود که نامرد قرار نبود با تعداد بالا در زمان خیلی کم اجرا بشه. اصلا کده مرض داشت انگار تصمیم گرفته بود مارو صاف کنه 😂 . ماهم در حال بررسی زیرساخت و مسائل دیگه بودیم از قضا من متوجه شدم که این نامرد بی ..... بی ..... شروع کرده بود CPU رو کامل درگیر کرده بود به طوریکه حتی HA هم Failed میشد و کلا حتی به سرور هم ریموت نمیتونستیم بزنیم.
کلا کارش با یک Index حل شد 😅
اصلا یک چیز عجیب غریبی بودااا.
اینجاست که Tuning میگن باید ببینید دنبال حل یک کدی هستید که چند بار یا یک بار داره دریک بازه طولانی اجرا میشه یا کدی که در یک بازه مثلا ۲ ساعته ۱۰۰ هزارمرتبه داره اجرا میشه مسلمه دومی شمارو حسابی به چالش میکشه و اشکتون رو درمیاره.
بحث Performance Tuning باخوندن یک مقاله و دوتا مقاله حل نمیشه. شانسی هم نیست که کیلویی ایندکس بذارید.
باید بررسی کنید
مانیتورینگ داشته باشید
و از همه مهمتر در لحظه مناسب اقدام مناسب انجام بدین.
ولی اسپند دود کردن هم شاید برای شما جواب بده 😂
کلا کارش با یک Index حل شد 😅
اصلا یک چیز عجیب غریبی بودااا.
اینجاست که Tuning میگن باید ببینید دنبال حل یک کدی هستید که چند بار یا یک بار داره دریک بازه طولانی اجرا میشه یا کدی که در یک بازه مثلا ۲ ساعته ۱۰۰ هزارمرتبه داره اجرا میشه مسلمه دومی شمارو حسابی به چالش میکشه و اشکتون رو درمیاره.
بحث Performance Tuning باخوندن یک مقاله و دوتا مقاله حل نمیشه. شانسی هم نیست که کیلویی ایندکس بذارید.
باید بررسی کنید
مانیتورینگ داشته باشید
و از همه مهمتر در لحظه مناسب اقدام مناسب انجام بدین.
ولی اسپند دود کردن هم شاید برای شما جواب بده 😂
👍15😁5👏3❤1
خوب دوستان عزیز یک Disaster دارم براتون داغ داغ، همین الان از تنور درومده 😅
داستان از این قراره که Log backup های چند سری Failed شده بوده و همچنین فایل Log هم با سرعت عجیب غریبی رشد کرده بود به حدی که باعث شده بود کل دیسک پر بشه و همین امر سبب شده بود دیتابیس نیز از HA خارج بشه و اونجاهم Not sync بود. خوب در اولین تلاش سعی کردیم فضای دیسک رو خالی کنیم شاید اون Log هایی که وضعیتشون مشخص نبود درست بشه و شروع کنه ادامه مسیر رو رفتن که خوب اتفاقی نیافتاد.
در قدم بعدی دیتابیس مذکور از HA خارج شد و ازش یک Log Backup گرفتیم و لاگ رو Shrink کردیم که اون فضای عجیب غریب رو آزاد کنه و مجدد به HA اضافه اش کردیم.
خداروشکر اتفاق عجیب غریبی نبود و خیلی سریع حل شد.
به دوستان اون مجموعه گفتم که چه مواردی باید کنترل بشه و دقت بشه تا این اتفاق دیگه رخ نده.
نکته خیلی با اهمیت داستان این قسمته که دیتابیس یک موجود زنده است. حیات داره. به مراقبت نیاز داره. به رسیدگی نیاز داره. اگه به حال خودش ولش کنید یک جوری دستتون رو میذاره توی پوست گردو که صفا کنید.
پس تا دیر نشده راهکارهای مراقبت از دیتابیس رو برای خودتون داشته باشین.
سوالی هم در این زمینه داشتین منو تیمم در کنارتون هستیم.
شاد باشین و بدور از هرگونه Disaster
#Disaster_Recovery
#HA
#LogBackup
داستان از این قراره که Log backup های چند سری Failed شده بوده و همچنین فایل Log هم با سرعت عجیب غریبی رشد کرده بود به حدی که باعث شده بود کل دیسک پر بشه و همین امر سبب شده بود دیتابیس نیز از HA خارج بشه و اونجاهم Not sync بود. خوب در اولین تلاش سعی کردیم فضای دیسک رو خالی کنیم شاید اون Log هایی که وضعیتشون مشخص نبود درست بشه و شروع کنه ادامه مسیر رو رفتن که خوب اتفاقی نیافتاد.
در قدم بعدی دیتابیس مذکور از HA خارج شد و ازش یک Log Backup گرفتیم و لاگ رو Shrink کردیم که اون فضای عجیب غریب رو آزاد کنه و مجدد به HA اضافه اش کردیم.
خداروشکر اتفاق عجیب غریبی نبود و خیلی سریع حل شد.
به دوستان اون مجموعه گفتم که چه مواردی باید کنترل بشه و دقت بشه تا این اتفاق دیگه رخ نده.
نکته خیلی با اهمیت داستان این قسمته که دیتابیس یک موجود زنده است. حیات داره. به مراقبت نیاز داره. به رسیدگی نیاز داره. اگه به حال خودش ولش کنید یک جوری دستتون رو میذاره توی پوست گردو که صفا کنید.
پس تا دیر نشده راهکارهای مراقبت از دیتابیس رو برای خودتون داشته باشین.
سوالی هم در این زمینه داشتین منو تیمم در کنارتون هستیم.
شاد باشین و بدور از هرگونه Disaster
#Disaster_Recovery
#HA
#LogBackup
👍19👏2
دوستان عزیزم سلام
امیدوارم حالتون عالی عالی باشه
بانک مرکزی نیازمند یک نیروی متوسط DBA هست
ظاهرا پرداختیشون بین ۴۰-۴۵ هست. دفترشون سمت میرداماده ودورکاری هم ندارن.
اگه تمایل داشتید رزومه هاتون رو برای ایشون در لینکدین ارسال کنید.
https://www.linkedin.com/in/shahriar-nourhejabi-263521102/
امیدوارم حالتون عالی عالی باشه
بانک مرکزی نیازمند یک نیروی متوسط DBA هست
ظاهرا پرداختیشون بین ۴۰-۴۵ هست. دفترشون سمت میرداماده ودورکاری هم ندارن.
اگه تمایل داشتید رزومه هاتون رو برای ایشون در لینکدین ارسال کنید.
https://www.linkedin.com/in/shahriar-nourhejabi-263521102/
❤7👏2
Media is too big
VIEW IN TELEGRAM
سلام خدمت دوستان عزیزم .
امیدوارم عالی عالی باشین
در این ویدئو در خصوص دستور Group by with cube توضیح میدم.
این یکی از بخشهای دوره مکتبخونه است.
امیدوارم عالی عالی باشین
در این ویدئو در خصوص دستور Group by with cube توضیح میدم.
این یکی از بخشهای دوره مکتبخونه است.
👍16❤4