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

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

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

گروه تبادل نظر:
https://t.me/+uIc1qhv58gU0NWQ0
Download Telegram
سلام خدمت دوستان عزیزم
امیدوارم حالتون عالی عالی باشه
من تصمیم دارم کدهایی که به نظر مهم میاد رو در گیت هاب قرار بدم و اینجا هم نشرش بدم تا اگه شما هم نیازی بهش داشتین بتونین ازش بهره بگیرید.
شما هم اگر علاقمند بودین در این امر مشارکت کنید ممنون میشم باهم صحبتی داشته باشیم.
اولین کدی که قرار دادم بدین شرح هست.
یکی از چالش هایی که در مباحث Performance Tuning باهاش سرو کله میزنیم ، بحث دیتاتایپ ها و طول آنهاست.
خیلی وقتها به دلیل اینکه اکثرا توسط ORM ها دیتابیس ها طراحی میشن شاید خیلی دقت نظری روی این موضوع نباشه. یا حتی اگه توسط برنامه نویسان طراحی میشه ، به واسطه اینکه الان شاید خیلی حجم دغدغه اساسی نباشه این موضوع از اهمیتش کم بشه.
ولی واقعا در بحث Performance Tuning جز مباحث اصلی هست و خود این مساله میتونه سلسله وار کلی منابع دیگه رو درگیر بکنه و مشکلات عجیب غریبی رو ایجاد کنه.
در این کد من سعی کردم جداولی که دیتا دارن رو استخراج کنم و در نهایت Max طول هر فیلد رو حساب کردم و جلوش نوشتم.
در فاز بعد سعی می کنم اختلافات اون رو هم محاسبه کنم و اونهایی که اختلاف زیادی دارن رو شناسایی کنم.
ولی در این فاز این بخشش به صورت چشمی باید توسط برنامه نویسان انجام بشه.
خوشحال میشم نظرات شمارو هم در این باره بدونم.
نحوه استفاده از کد هم داخلش توضیح داده شده.

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

https://github.com/hmdsadeghian/Performance-Troubleshooting
👍415👌3
سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین
خدمت شما عرض کنم که SSMS version 20 preview 1 ارائه شده که میتونید از لینک زیر دانلودش کنید.

شاد باشین و شکرگزار
حمیدرضا صادقیان
@Hamidreza_Sadeghian
https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms-20?view=sql-server-ver16
👍152👎2
سلام خدما دوستان عزیزم
امیدوارم عالی عالی باشین
سال نو‌ رو خدمت تمام دوستان عزیزم تبریک عرض میکنم
سالی پر از شادی، سلامتی، روزی فراوان و عشق و محبت رو برای تک تک شما آرزو میکنم.
امیدوارم انتهای سال موفق شده باشین به تمام اهدافی که برای خودتون ترسیم کردین رسیده باشین.

ارادتمند شما
حمیدرضا صادقیان
55🤩2👌2💯2🤝2
سلام خدمت دوستان عزیزم
امیدوارم حالتون عالی عالی باشه
داشتم سیستمها رو مانیتور می کردم ، دیدم که بعضی از Index ها Fragment بالایی دارند. با اینکه من جاب Index Maintenance هم دارم. اول رفتم جاب رو دیدم که ببینم نکنه اجرا نشده ، دیدم خیر داره اجرا میشه.
اومدم دستی ایندکس رو Rebuild کردم و وضعیتشو مانیتور کردم . دیدم که به شدت داره Fragment ایجاد میشه و توی 10 دقیقه دوباره 30 درصد Fragment ایجاد شد.
ساختار ایندکس رو بررسی کردم دیدم داخل کلید ایندکس یک فیلد داریم که از نوع Nvarchar هست و مدام این فیلد داره مقدارش Update میشه. با توجه به اینکه از نوع Nvarchar هست پس بسته به دیتایی که داره حجم اشغال میکنه. مقادیر رو بررسی کردم دیدم طول رشته هایی که داخلش بروز میشه متفاوت هست.
کاری که کردم این بود که مقدار Fill factor رو از 95 به 70 تغییر دادم و الان بعد از 24 ساعت تازه 20 درصد Fragment ایجاد شده است.
برای اینکه این مشکل اصولی حل بشه باید ساختار این فیلد عوض بشه که یا طولش ثابت بشه یا اینکه مدل ذخیره سازیش عوض بشه.
ولی در حال حاضر نیز با کاهش Fill Factor این مساله حل شد.
امیدوارم این نکته براتون مفید بوده باشه.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#Fillfactor #Fragment #Index #PerformanceTuning
👍8112👎2👏1
سلام به دوستان عزیزم
داشتم به ساختار LINQ در سی شارپ دقت می کردم ، خیلی جالبه که نحوه نوشتارش براساس Logical Processing خود زبان T-SQL هست. ترتیب نوشتار در زبان T-SQL به شکل زیر هست
1- Select
2- From
3- Where
4- Group by
5- having
6- order
ولی چیزی که در logical Processing رخ میده به این شکل هست
1- from
2- where
3- group by
4- having
5- select
6- order
خیلی برام جالب بود که دقیقا LINQ هم داره با این مدل نوشته میشه. این نکته از این جهت برام جالب بود که اگه این مدلی بهش نگاه بشه یادگیریش خیلی راحت خواهد بود و شاید این سوال رفع شده باشه که چرا در LINQ مثل زبان T-SQL دستور رو نمی نویسیم.

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

#LINQ #TSQL #LogicalProcessing
👍51👌76👎1
سلام خدمت دوستان عزیزم
امیدوارم حالتون عالی عالی باشه
دیروز در یک سازمانی با کدی مواجه شدم که 72 ساعت زمان میبره اجرا بشه.

البته منطق محاسباتی پیچیده ای داره. خیلی جالبه که حتی Estimate plan رو زدم 4 دقیقه طول کشید و به دلیل پیچیدگی و تعداد plan های ایجاد شده تا 100 تا پلن رو نمایش میداد ولی دیگه مابقی صفحه سفید بود ولی اسکرول میشد 😑

در حال بهینه سازی کد فوق هستم انشالله در روزهای دیگه با نکاتی در این خصوص حتما پستی جداگانه قرار میدم.

فقط در بررسی های اولیه ، نکاتی که در این کد قابل مشاهده بود موارد زیر بود.

تفکر row Processing به جای Set-based که باعث شده بود استفاده از حلقه ها در SP های مورد نظر صورت بگیره..

استفاده های بسیار زیاد از توابع Scalar که حتی در نسخه 2022 قابلیت تبدیل به inline شدن هم نداشتند.


فعلا این موارد اولیه بررسی بود.

در آینده بیشتر بهش خواهم پرداخت


شاد باشین و شکرگزار

حمیدرضا صادقیان
👍296👌5
سلام خدمت دوستان عزیزم

امیدوارم حالتون عالی عالی باشه

یکی از مسائلی که ممکنه باهاش در محاسبات برخورد کنید نحوه رفع خطای Divide by zero هست که در ادامه روشهای گوناگون اون رو باهم بررسی می کنیم.

مثال زیر را در نظر بگیرید.

DECLARE @Product1 INT;
DECLARE @Product2 INT;
SET @Product1 = 20;
SET @Product2 = 0;
SELECT @Product1 / @Product2 AS ProductRatio;
با اجرای کد بالا خطای Divide by zero را دریافت خواهید کرد.

روش اول این هست که از تابع nullif استفاده کنید.

DECLARE@Product1INT;
DECLARE@Product2INT;
SET@Product1= 20;
SET@Product2=0;
SELECT@Product1/ NullIf(@Product2,0) AS ProductRatio;
روش دوم استفاده از Case When هست



DECLARE @Product1 INT;
DECLARE @Product2 INT;
SET @Product1 = 50;
SET @Product2 = 0;
SELECT @Product1 / case
when @product2= 0
then null
else @product2 end as ProductRatio;


روش سوم استفاده از Set ArithAbort هست



به صورت پیش فرض این دستور On هست و زمانی که یک تقسیم برصفر رخ بده ، خطا تولید میکنه. در صورتی که اونو غیرفعال کنید خروجی دستور null خواهد شد.

set arithabort off;
Set ansi_warnings off
DECLARE @Product1 INT;
DECLARE @Product2 INT;
SET @Product1 = 20;
SET @Product2 = 0;
SELECT @Product1 / @Product2 ProductRatio;
نکته : پیشنهاد میشه از روش سوم تا جای ممکن استفاده نشه که میتونه براتون مشکلات Performance ایجاد کنه. ترجیحا از دو روش ابتدایی استفاده کنید بهتره.

شاد باشین و شکرگزار

حمیدرضا صادقیان
👍44👌5👏4🤩2🔥1
سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین
خدمت شما عرض می کنم که وب سایتی تخصصی در حوزه Data راه اندازی کردیم.
هدف ما این هست که در این وب سایت در حوزه های مختلف داده ،‌ تولید محتوا انجام بدیم.
این تولید محتواها در قالب فیلم های آموزشی ، پادکست ها و همچنین مقالات نوشتاری خواهد بود.
ممنون خواهم شد نظرات ارزشمندتون رو برای ما بیان کنید.
امیدوارم بتونیم در مسیر توسعه دانش ،‌گامی موثر رو برداریم.

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

https://data-club.ir/
👍2210👏6👌1
سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین
در این مقاله من درخصوص نحوه بروز رسانی Statistics ها صحبت کردم.
امیدوارم مفید واقع بشه

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

https://data-club.ir/sql-server/performance/update-statistics/
👍13👌1
سلام خدمت دوستان عزیزم
امیدوارم حالتون عالی باشه
یکی از مسائل مهمی که در کدنویسی ها باید رعایت بشه نوشتن صحیح کدها مخصوصا شرط ها هست که به SQL Server کمک کنه تا از ایندکس هایی که بر روی فیلدها قرار داره استفاده بهینه بکنه.
در کتاب آقای Itzik Ben-Gan بهش می گن SARGable Query . در این مقاله من به این موضوع پرداختم و با مثال در خصوصش توضیح دادم

امیدوارم مفید واقع بشه.
شاد باشین و شکرگزار
حمیدرضا صادقیان

https://data-club.ir/sql-server/performance/sargable-query-%da%86%db%8c%d8%b3%d8%aa%d8%9f
👍213🔥2👏2👌1
سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین
یکی از چالش هایی که کدهای ad hoc ایجاد می کند، ایجاد Plan به ازای هر کوئری هست که گاها ممکن هست حتی فقط کد مذکور یکبار ایجاد شود. که این امر میتونه در هدر رفتن فضای Plan cache تاثیر داشته باشه.
در این مقاله من در خصوص این موضوع صحبت کردم.

امیدوارم مفید واقع بشه
شاد باشین و شکر گزار

https://data-club.ir/sql-server/performance/%d8%a8%d8%b1%d8%b1%d8%b3%db%8c-%da%af%d8%b2%db%8c%d9%86%d9%87-optimize-for-ad-hoc-workload
13👌1
سلام خدمت دوستان عزیزم
یکی از مسائلی که موقع مانیتور کردن دیتابیس ها خیلی اهمیت داره ، این هست که شما بدونید تقدم و تاخر اجرای کدها به چه شکلی هست. فرض کنید شما در حال مانیتور کردن کدهای پرهزینه هستید.
ممکنه SP ها یا توابع تودرتویی اجرا بشه . خیلی اهمیت داره بدونید که این کدها به چه ترتیب و ساختاری اجرا شدند.
با استفاده ازExtended Events ها شما میتونید این مساله رو بهش برسید. دراین مقاله به این موضوع می پردازم.
https://data-club.ir/sql-server/performance/%d8%a8%d8%b1%d8%b1%d8%b3%db%8c-%da%af%d8%b2%db%8c%d9%86%d9%87-causality-tracking-%d8%af%d8%b1-extended-events


شاد باشین و شکرگزارحمیدرضا صادقیان@hamidreza_Sadeghian
👌10👍54🔥2
سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین

سوالات زیادی از من در مورد نحوه همکاری میشه ، گفتم در این پست به صورت عمومی اعلام کنم .

خدمت شما عرض کنم که من به سه صورت در حال حاضر با شرکتها قرارداد همکاری می بندم.

1- صورت اول به صورت ماهانه هست ، به این صورت که براساس تعداد سرورها و تعداد دیتابیس ها و کارهایی که باید انجام بشه ، یک رقمی رو باهم توافق میکنیم و یک حداکثر زمانی هم در قرارداد قید میشه. من در خلال هر ماه سرورهارو پایش میکنم رسیدگی می کنم و بررسی می کنم و اگه چالشی ببینم اطلاع رسانی می کنم و راه حلش هم ارائه میدم که به چه صورت میشه مسائل رخ داده رو حل کرد. کارهای ادمینی هم تماما به عهده بنده و تیم بنده هست.
همچنین در این قرارداد مواردی که مشخص میشه رو در خلال آموزش هم توضیح میدم که چیکار کنیم دیگه اون مساله رخ نده.

2- صورت دوم به صورت ساعتی هست. یک رقم ساعتی رو باهم توافق می کنیم و یک قرارداد می بندیم. براساس ساعاتی که من با شما همکاری دارم ساعات رو اعلام می کنم و براساس رقم توافق شده پرداخت انجام میشه. در این حالت تا زمانی که کاری به من ارجاع نشه من هیچ کاری انجام نخواهم داد.

3- صورت سوم هم آموزش هست که براساس یک سیلابس مشخص آموزش های مورد نظر رو انجام میدم.

در صورتی که فکر می کنید با هرکدوم از روشهای فوق من میتونم کمکی بهتون بکنم ، با کمال میل در خدمتتون هستم.

شاد باشین وشکرگزار
حمیدرضا صادقیان
@Hamidreza_Sadeghian
👍181
سلام دوستان عزیزم.
امیدوارم عالی عالی باشین.

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

۱- به دلیل اینکه تمایل دارم افراد بیشتری از این فضا استفاده کنند ، برای هر شخص یا سازمان این مشاوره فقط یک بار به صورت رایگان خواهد بود.
۲- خواهش میکنم صورت مساله کاملا شفاف باشه و بدونم در خصوص چه موضوعی قرار هست صحبت کنیم.
۳- زمان بندی که باهم قرار میدیم رو حتما رعایت کنید.

شاد باشین و شکرگزار
@Hamidreza_Sadeghian
37👍12👏3🤩1👌1
سلام دوستان عزیزم
امیدوارم که عالی عالی باشین.

چندروز پیش در حین مانیتور کردن یک مرکز بیمارستانی ، دیدم یک کد بسیار پرهزینه داره اجرا میشه. زمان اجرای این کد تقریبا دو دقیقه بود و بیش از ۱۰ میلیون Logical Read داشت.
ساختار کدش به این شکل بود :
Select * from
(
select
join ....
)
where id=888

من دیدم اول داره join ها لحاظ میشه و چون Inner join بود اومدم اون شرط بیرونی رو به داخل و درون خود Join انتقال دادم. (دقت کنیدا گفتم Inner join بود. در Outer join این نتیجه تغییر می کنه)

با اینکار باعث شد زمان اجرای کد از ۲ دقیقه به ۳۰۰ میلی ثانیه کاهش پیدا کنه و Logical Read بیش از ۱۰ میلیون به ۵۰ کاهش پیدا کرد.

راه اندازی سامانه مانیتورینگ بسیار حائز اهمیته.

خیلی وقتها خیلی تغییرات رو هم میشه با اصلاح ساختار ایندکس ها انجام داد و بهبودی های خوبی رو حاصل کرد.
در اکثر سیستم هایی که من دیدم در خیلی از جداول عملیاتی حجم ایندکس های زیادی هستند که یا تکراری هستن یا بدون استفاده . که با حذف اونها هم حجم بکاپ ها به شدت کاهش پیدا می کنه. هم سرعت کدها افزایش پیدا می کنه هم میزان Blocking ها کم میشه.

نکته بعد اینکه اگر مانیتورینگ هم راه اندازی کردین باید بدونید علائم ها چی هستند تا بتونید درست تفسیر کنید.
سامانه مانیتورینگ مثل یک برگ آزمایش میمونه. صرفا با سرچ یک کلمه در اینترنت نمیشه به نتایج مثبتی رسید.

امیدوارم این مساله دید خوبی بهتون در خصوص مانیتورینگ بده.
شاد باشین و شکرگزار
حمیدرضا صادقیان
@Hamidreza_Sadeghian
👍565👌5👏4
سلام خدمت دوستان عزیزم
امیدوارم عالی عالی باشین
چند وقته یک خطایی رو بر روی سرور دارم مشاهده می کنم که پیداکردن و حلش خیلی برای من سخت شده بود و اطلاعات درستی ازش نداشتم
توی این مقاله کل فرآیندی که طی کردم رو نوشتم و باهاتون به اشتراک گذاشتم
امیدوارم مفید واقع بشه

شاد باشین و شکرگزار
حمیدرضا صادقیان
@Hamidreza_Sadeghian
https://data-club.ir/sql-server/sql-and-t-sql/%d8%a8%d8%b1%d8%b1%d8%b3%db%8c-%d8%ae%d8%b7%d8%a7%db%8c-17813
17👍8👏4
سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین
در این مقاله قصد داریم بهتون یاد بدیم چطوری از Python در SSIS استفاده کنیم. با این روش شما میتونید از قدرت کدنویسی Python نیز بهره ببرید.

شاد باشین و شکرگزار
مرتضی ناصری

https://data-club.ir/sql-server/sql-and-t-sql/%da%86%da%af%d9%88%d9%86%d9%87-%d8%af%d8%b1-ssis-%d8%a7%d8%b2-%da%a9%d8%af-%d9%87%d8%a7%db%8c-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%da%a9%d9%86%db%8c%d9%85
👍156
سلام خدمت دوستان عزیزم
امیدوارم حالتون عالی باشه
دوباره تصمیم دارم برای ده شرکت به صورت رایگان پایش بانک اطلاعاتی SQL Server رو راه اندازی کنم.
این پایش توسط شخص بنده انجام خواهد شد و وابسته به هیچ شرکتی نمی باشد.

هدف از این پایش ، شناسایی چالش های Performance در SQL Server می باشد.
شرکتها و مراکزی که در این خصوص چالش دارند ، بامن صحبت کنند که یک وقتی رو باهم تنظیم کنیم و اینکارو انجام بدیم.

بعد از این پایش ،‌ من در قالب یک گزارش مطالب رو خدمتتون ارائه میدم.
اگر تمایل داشتید در زمینه رفعش هم میتونیم باهم صحبت کنیم.
در غیر اینصورت خودتون میتونید برای رفعش اقدام کنید.

امیدوارم که این حرکت بتونه برای کسانی که چالش های جدی Performance در لایه دیتابیس دارند کمک کننده باشه.

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

@Hamidreza_Sadeghian
👍17👏5
سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین

در این مقاله سعی کردم نحوه عمیق شدن در زبان T-SQL رو توضیح بدم.
همچنین منابع مورد نیاز هم معرفی کردم.

امیدوارم مفید واقع بشه.

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

https://data-club.ir/sql-server/sql-and-t-sql/%db%8c%d8%a7%d8%af%da%af%db%8c%d8%b1%db%8c-%d8%b9%d9%85%db%8c%d9%82-t-sql
16👍2
سلام خدمت دوستان عزیزم
امیدوارم که عالی عالی باشین

در این مقاله قصد داریم، در خصوص اینکه چطوری از تابع SUMMARIZE در DAX استفاده کنیم تا میانگین مقادیر تسهیم نشده با چند ریزدانگی مختلف را محاسبه کنیم.

امیدوارم مفید واقع بشه

شاد باشین و شکرگزار
مهیار محمدی

@kmoh1368

https://data-club.ir/sql-server/ssas/%d9%85%d8%ad%d8%a7%d8%b3%d8%a8%d9%87-%d9%85%db%8c%d8%a7%d9%86%da%af%db%8c%d9%86-%d9%85%d9%82%d8%a7%d8%af%db%8c%d8%b1-%d8%aa%d8%b3%d9%87%db%8c%d9%85-%d9%86%d8%b4%d8%af%d9%87-%d8%af%d8%b1-%d8%ac%d8%af
8👍6👌1