سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه
میخوام کتاب SQL Server 2019 wait statistics رو بهتون معرفی کنم.
در این کتاب با مفاهیم Wait Statistics ها آشنا میشین و یاد میگیرین که چطوری در Performance Tuning ازشون به بهترین نحو استفاده کنید .
در لینک زیر این کتاب رو برای دانلود قرار میدم .
امیدوارم بهره کافی رو از این کتاب ببرید.
سوالاتتون رو پیرامون مباحث مطرح شده میتونید در گروه نیز مطرح کنید
ارادتمند شما حمیدرضا صادقیان
@Hamidreza_Sadeghian
SQL Server Group :https://t.me/joinchat/BTQQtzy50j-wVkfdnQOtRA
Download link: http://2ad.ir/52kV9NC
امیدوارم حالتون خوب باشه
میخوام کتاب SQL Server 2019 wait statistics رو بهتون معرفی کنم.
در این کتاب با مفاهیم Wait Statistics ها آشنا میشین و یاد میگیرین که چطوری در Performance Tuning ازشون به بهترین نحو استفاده کنید .
در لینک زیر این کتاب رو برای دانلود قرار میدم .
امیدوارم بهره کافی رو از این کتاب ببرید.
سوالاتتون رو پیرامون مباحث مطرح شده میتونید در گروه نیز مطرح کنید
ارادتمند شما حمیدرضا صادقیان
@Hamidreza_Sadeghian
SQL Server Group :https://t.me/joinchat/BTQQtzy50j-wVkfdnQOtRA
Download link: http://2ad.ir/52kV9NC
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوش باشه
یکی از مسائلی که شاید باهاش برخورد کنید این هست که هنگامی که یک Select رو بر روی یک جدول میگیرید که Clustered Index داره ، شاید اگر دقت کرده باشید نتیجه به صورت مرتب شده گاها براساس PK نمایش داده میشه.
ممکنه این به ذهنتون برسه که خوب پس با این اوصاف نیازی نیست که حتما از Order By استفاده کنیم.!
خیر این مورد صحیح نیست. وقتی که SQL Server نیاز به Clustered Index Scan داره ، داده ها رو به ترتیب PK میخونه و پیش میره.
خوب یکی از ویژگی های موجود در مسائل Performance بحثی هست به نام Merry-go-round scan .
که به شما اجازه میده چند تا Task همزمان بتونن از منابع یک Index استفاده کنند.
فرض کنید در Session 1 من یک کوئری اجرا کردم که نیاز به Index Scan بوده و تا نصف ایندکس نیز پیش رفته.
در همین حال در Session 2 نیز همون کوئری اجرا میشه و نیاز هست که از همون ایندکس استفاده بشه.
اتفاقی که اینجا رخ میده این هست که S2 به S1 می پیونده و مابقی مسیری که ایندکس بررسی میشه طی میکنه و داده هایی که نیاز هست حالا برای دوتا Session ارسال میشه. به محض اینکه S1 به انتهای ایندکس رسید S2 از ابتدای ایندکس جستجو کرده تا به نقطه ای برسه که به S1 متصل شده بود. به همین خاطر باعث میشه اون ترتیب PK عملا از بین بره .
نکته : هر زمانی که نیاز به خروجی مرتب شده داشتید حتما از Order By استفاده کنید.
ارادتمند شما
حمیدرضا صادقیان
@hamidreza_Sadeghian
امیدوارم حالتون خوش باشه
یکی از مسائلی که شاید باهاش برخورد کنید این هست که هنگامی که یک Select رو بر روی یک جدول میگیرید که Clustered Index داره ، شاید اگر دقت کرده باشید نتیجه به صورت مرتب شده گاها براساس PK نمایش داده میشه.
ممکنه این به ذهنتون برسه که خوب پس با این اوصاف نیازی نیست که حتما از Order By استفاده کنیم.!
خیر این مورد صحیح نیست. وقتی که SQL Server نیاز به Clustered Index Scan داره ، داده ها رو به ترتیب PK میخونه و پیش میره.
خوب یکی از ویژگی های موجود در مسائل Performance بحثی هست به نام Merry-go-round scan .
که به شما اجازه میده چند تا Task همزمان بتونن از منابع یک Index استفاده کنند.
فرض کنید در Session 1 من یک کوئری اجرا کردم که نیاز به Index Scan بوده و تا نصف ایندکس نیز پیش رفته.
در همین حال در Session 2 نیز همون کوئری اجرا میشه و نیاز هست که از همون ایندکس استفاده بشه.
اتفاقی که اینجا رخ میده این هست که S2 به S1 می پیونده و مابقی مسیری که ایندکس بررسی میشه طی میکنه و داده هایی که نیاز هست حالا برای دوتا Session ارسال میشه. به محض اینکه S1 به انتهای ایندکس رسید S2 از ابتدای ایندکس جستجو کرده تا به نقطه ای برسه که به S1 متصل شده بود. به همین خاطر باعث میشه اون ترتیب PK عملا از بین بره .
نکته : هر زمانی که نیاز به خروجی مرتب شده داشتید حتما از Order By استفاده کنید.
ارادتمند شما
حمیدرضا صادقیان
@hamidreza_Sadeghian
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه و عزاداریاتون مقبول درگاه حضرت حق.
اگر تمایل دارید وارد مباحث Data Science بشین و میخواهید Machine Learning رو فرابگیرید پیشنهاد میکنم ابتدا با ابزار Octave پیشنهاد می کنم شروع کنید .
چون با این زبان ، که بسیار به Matlab نیز شبیه هست خیلی راحت میشه الگوریتم هارو پیاده سازی کرد یا پروتوتایپ آماده کرد و راحت الگوریتم هارو در زمان کوتاه تری فرا گرفت
بعد از اینکه به الگوریتم ها مسلط شدین میتونید به سمت پایتون یا زبانهای دیگه مثل C++ یا جاوا مهاجرت کنید.
در سیلیکون ولی هم برای یادگیری و یا طراحی پروتوتایپ از این زبان استفاده می کنند.
از طریق لینک زیر میتونید به صورت رایگان اونو دانلود کنید.
و همچنین برای یادگیری Machine LEarning نیز میتونید از کورس زیر که لینکش رو قرار میدم استفاده کنید که رایگان نیز هست.
ارادتمند شما
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#Data_Science
#Machine_Learning
https://www.gnu.org/software/octave/#install
https://www.coursera.org/learn/machine-learning
امیدوارم حالتون خوب باشه و عزاداریاتون مقبول درگاه حضرت حق.
اگر تمایل دارید وارد مباحث Data Science بشین و میخواهید Machine Learning رو فرابگیرید پیشنهاد میکنم ابتدا با ابزار Octave پیشنهاد می کنم شروع کنید .
چون با این زبان ، که بسیار به Matlab نیز شبیه هست خیلی راحت میشه الگوریتم هارو پیاده سازی کرد یا پروتوتایپ آماده کرد و راحت الگوریتم هارو در زمان کوتاه تری فرا گرفت
بعد از اینکه به الگوریتم ها مسلط شدین میتونید به سمت پایتون یا زبانهای دیگه مثل C++ یا جاوا مهاجرت کنید.
در سیلیکون ولی هم برای یادگیری و یا طراحی پروتوتایپ از این زبان استفاده می کنند.
از طریق لینک زیر میتونید به صورت رایگان اونو دانلود کنید.
و همچنین برای یادگیری Machine LEarning نیز میتونید از کورس زیر که لینکش رو قرار میدم استفاده کنید که رایگان نیز هست.
ارادتمند شما
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#Data_Science
#Machine_Learning
https://www.gnu.org/software/octave/#install
https://www.coursera.org/learn/machine-learning
octave.org
GNU Octave
GNU Octave is a programming language for scientific computing.
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه
امروز ویدئویی رو مشاهده کردم که در خصوص روشهای Paging توضیح میدادو اینکه Performance کدوم روش بهتر است.
سوای اینکه نیاز بود پلن ها بررسی بشه که نشد و همچنین IO Statistics بررسی بشه که اون هم نشد ، بیان شد که Row_Number عملکرد بهتری نسبت به Offset / Fetch داره در صورتی که اگر یک جستجوی ساده در اینترنت انجام بدین و مقالات MVP های مختلف رو بررسی کنید و حتی بلاگ های سایت مایکروسافت رو نیز مطالعه کنید خواهید دید که Performance دستور Offset/Fetch به مراتب بهتر از Row_Number هست .
در ادامه دو نمونه از این مقالات و مقایسه هارو براتون قرار میدم تا دقیقتر موضوع رو بررسی کنید.
ارادتمند شما
حمیدرضا صادقیان
@Hamidreza_Sadeghian
https://www.mssqltips.com/sqlservertip/2696/comparing-performance-for-different-sql-server-paging-methods/
https://sqlperformance.com/2015/01/t-sql-queries/pagination-with-offset-fetch
امیدوارم حالتون خوب باشه
امروز ویدئویی رو مشاهده کردم که در خصوص روشهای Paging توضیح میدادو اینکه Performance کدوم روش بهتر است.
سوای اینکه نیاز بود پلن ها بررسی بشه که نشد و همچنین IO Statistics بررسی بشه که اون هم نشد ، بیان شد که Row_Number عملکرد بهتری نسبت به Offset / Fetch داره در صورتی که اگر یک جستجوی ساده در اینترنت انجام بدین و مقالات MVP های مختلف رو بررسی کنید و حتی بلاگ های سایت مایکروسافت رو نیز مطالعه کنید خواهید دید که Performance دستور Offset/Fetch به مراتب بهتر از Row_Number هست .
در ادامه دو نمونه از این مقالات و مقایسه هارو براتون قرار میدم تا دقیقتر موضوع رو بررسی کنید.
ارادتمند شما
حمیدرضا صادقیان
@Hamidreza_Sadeghian
https://www.mssqltips.com/sqlservertip/2696/comparing-performance-for-different-sql-server-paging-methods/
https://sqlperformance.com/2015/01/t-sql-queries/pagination-with-offset-fetch
Mssqltips
Comparing performance for different SQL Server paging methods
Every DBA has worked on an application that does some sort of search and returns paged lists to the user. Each version of SQL Server has introduced new ways to return these paged lists (aside from the obvious of returning the entire list and let the appli
سلام و عرض ادب خدمت دوستان عزیزم
یکی از مسائلی که اکثر قریب به اتفاق شرکت ها با اون دست و پنجه نرم می کنند عدم وجود سورس کنترل و ورژن کنترل بر روی دیتابیس هست وبرای هندل کردن این مورد میان از ابزارهایی مثل RedGate استفاده می کنند که متاسفانه نمیتونه چرخه DLM رو تکمیل کنه.
استفاده از Database Project یا همون SSDT به شما کمک میکنه چرخه DLM رو پیاده سازی کنید.
می تونید برای دیتابیس ها Unit Test بنویسید ، چیزی که من تقریبا در هیچ شرکت و یا سازمانی اصلا ندیدم و حتی متاسفانه دانشش وجود نداشت.
همچنین میتونید برای دیتابیس ها محیط Test,UAT,PRoduction ایجاد کنید و پابلیش های مختلفی داشته باشین.
همزمان چندین نفر می تونن بر روی دیتابیس تغییرات اعمال کنند بدون اینکه باهم تداخلی داشته باشه.
دسترسی ها از روی محیط عملیاتی کاملا حذف میشه .
هیچ وقت تداخل تغییرات به وجود نمیاد
به راحتی میتونید ورژن های مشتریان و دیتابیس های عملیاتی ر وکنترل کنید و تغییرات رو داشته باشید و بر روی مقصد اعمال کنید.
اگر تصمیم دارید یک چرخه دقیق مهندسی نرم افزار رو پیاده سازی کنید پیشنهاد می کنم حتما چرخه DLM رو در سازمان یا شرکتتون پیاده سازی کنید.
میتونید Build های اتوماتیک پیاده سازی کنید.
خیلی راحت میتونید Refactoring بر روی دیتابیس انجام بدین بدون اینکه نگران باشید ممکنه در یک شی در داخل دیتابیس یک چیزی تغییر کرده باشه که در جاهای دیگه تغییر نکرده و میتونه در یک جایی باعث از کار افتادن سیستم بشه.
پیشنهاد می کنم برای درک صحیح از صحبتهایی که عرض کردم فیلم زیر رو حتما ببینید
ارادتمند شما
حمیدرضا صادقیان
ID: @Hamidreza_Sadeghian
#DLM #DAtabase_Project #Database_Lifecycle_Management #SQL_Server #CI
https://channel9.msdn.com/Events/TechEd/Europe/2014/DBI-B312
یکی از مسائلی که اکثر قریب به اتفاق شرکت ها با اون دست و پنجه نرم می کنند عدم وجود سورس کنترل و ورژن کنترل بر روی دیتابیس هست وبرای هندل کردن این مورد میان از ابزارهایی مثل RedGate استفاده می کنند که متاسفانه نمیتونه چرخه DLM رو تکمیل کنه.
استفاده از Database Project یا همون SSDT به شما کمک میکنه چرخه DLM رو پیاده سازی کنید.
می تونید برای دیتابیس ها Unit Test بنویسید ، چیزی که من تقریبا در هیچ شرکت و یا سازمانی اصلا ندیدم و حتی متاسفانه دانشش وجود نداشت.
همچنین میتونید برای دیتابیس ها محیط Test,UAT,PRoduction ایجاد کنید و پابلیش های مختلفی داشته باشین.
همزمان چندین نفر می تونن بر روی دیتابیس تغییرات اعمال کنند بدون اینکه باهم تداخلی داشته باشه.
دسترسی ها از روی محیط عملیاتی کاملا حذف میشه .
هیچ وقت تداخل تغییرات به وجود نمیاد
به راحتی میتونید ورژن های مشتریان و دیتابیس های عملیاتی ر وکنترل کنید و تغییرات رو داشته باشید و بر روی مقصد اعمال کنید.
اگر تصمیم دارید یک چرخه دقیق مهندسی نرم افزار رو پیاده سازی کنید پیشنهاد می کنم حتما چرخه DLM رو در سازمان یا شرکتتون پیاده سازی کنید.
میتونید Build های اتوماتیک پیاده سازی کنید.
خیلی راحت میتونید Refactoring بر روی دیتابیس انجام بدین بدون اینکه نگران باشید ممکنه در یک شی در داخل دیتابیس یک چیزی تغییر کرده باشه که در جاهای دیگه تغییر نکرده و میتونه در یک جایی باعث از کار افتادن سیستم بشه.
پیشنهاد می کنم برای درک صحیح از صحبتهایی که عرض کردم فیلم زیر رو حتما ببینید
ارادتمند شما
حمیدرضا صادقیان
ID: @Hamidreza_Sadeghian
#DLM #DAtabase_Project #Database_Lifecycle_Management #SQL_Server #CI
https://channel9.msdn.com/Events/TechEd/Europe/2014/DBI-B312
👍1
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه
یکی از سوالاتی که خیلی مطرح هست ، نحوه انتخاب دیتاتایپ ها و سایز فیلدها هست. گاها مشاهده کردم که خیلی دست و دلبازانه 😜 سایز فیلدها و نوعشون انتخاب میشه. خوب شاید بفرمایید چه مشکلی پیش میاد؟
در حجم های دیتای پایین یا تعداد کاربرهای کم شاید مشکل خاصی پیش نیاد.
ولی وقتی که تعداد کاربران افزایش پیدا میکنه یا سایز جداول شما افزایش پیدا می کنه برای شما دچار دردسر میکنه.
یکی از مسائلی که پیش میاد حدس زدن اشتباه SQL Server بر روی داده های شما در Query های شما هست. وقتی شما کدی رو مینویسید SQL Server برای اینکه حدس بزنه چقدر داده رو قراره استخراج کنه یا روش کار کنه که به SQL Server بگه که من چقدر Ram نیاز دارم برمبنای سایز و نوع فیلدها و تعداد رکوردی هست که در کوئری شما مدنظر هست. اینهارو باهم ضرب میکنه و به یک عددی میرسه.
فرض کنید مثلا جدول شما صدمگابایت فضا داره و این جدول شما دارای دو یا سه تافیلد varchar(1000) هست. وقتی که در کدتون این فیلدها استفاده میشه SQL Server ابتدای امر حدس میزنه که چه تعداد رکورد قراره استخراج بشه بعد سایز یک رکورد رو با مقدار دیتاتایپ ها محاسبه میکنه واون تعداد رکورد رو در سایز یک رکورد ضرب میکنه و مثلا میرسه به عدد 10 گیگابایت. و اینجا به SQL Server درخواست میده که من نیاز به 10 گیگابایت Ram برای اجرای این دستور دارم.
و احتمالا بعدش رو میتونید به راحتی حدس بزنید چه اتفاقی میافته؟؟؟؟
این نکته رو گفتم که اگر تصمیم دارید دیتابیس بزرگی طراحی کنید یا فکر میکنید در آینده ممکنه دیتابیس بزرگ بشه ، به این نکته دقت کنید تا در آینده دچار مشکل نشید.
ارادتمند شما
حمیدرضا صادقیان
@Hamidreza_Sadeghian
امیدوارم حالتون خوب باشه
یکی از سوالاتی که خیلی مطرح هست ، نحوه انتخاب دیتاتایپ ها و سایز فیلدها هست. گاها مشاهده کردم که خیلی دست و دلبازانه 😜 سایز فیلدها و نوعشون انتخاب میشه. خوب شاید بفرمایید چه مشکلی پیش میاد؟
در حجم های دیتای پایین یا تعداد کاربرهای کم شاید مشکل خاصی پیش نیاد.
ولی وقتی که تعداد کاربران افزایش پیدا میکنه یا سایز جداول شما افزایش پیدا می کنه برای شما دچار دردسر میکنه.
یکی از مسائلی که پیش میاد حدس زدن اشتباه SQL Server بر روی داده های شما در Query های شما هست. وقتی شما کدی رو مینویسید SQL Server برای اینکه حدس بزنه چقدر داده رو قراره استخراج کنه یا روش کار کنه که به SQL Server بگه که من چقدر Ram نیاز دارم برمبنای سایز و نوع فیلدها و تعداد رکوردی هست که در کوئری شما مدنظر هست. اینهارو باهم ضرب میکنه و به یک عددی میرسه.
فرض کنید مثلا جدول شما صدمگابایت فضا داره و این جدول شما دارای دو یا سه تافیلد varchar(1000) هست. وقتی که در کدتون این فیلدها استفاده میشه SQL Server ابتدای امر حدس میزنه که چه تعداد رکورد قراره استخراج بشه بعد سایز یک رکورد رو با مقدار دیتاتایپ ها محاسبه میکنه واون تعداد رکورد رو در سایز یک رکورد ضرب میکنه و مثلا میرسه به عدد 10 گیگابایت. و اینجا به SQL Server درخواست میده که من نیاز به 10 گیگابایت Ram برای اجرای این دستور دارم.
و احتمالا بعدش رو میتونید به راحتی حدس بزنید چه اتفاقی میافته؟؟؟؟
این نکته رو گفتم که اگر تصمیم دارید دیتابیس بزرگی طراحی کنید یا فکر میکنید در آینده ممکنه دیتابیس بزرگ بشه ، به این نکته دقت کنید تا در آینده دچار مشکل نشید.
ارادتمند شما
حمیدرضا صادقیان
@Hamidreza_Sadeghian
Media is too big
VIEW IN TELEGRAM
سلام و عرض ادب خدمت دوستان عزیزم. امیدوارم حالتون خوب باشه. در این ویدئو نحوه نصب SQL Server 2017 رو کامل توضیح دادم. امیدوارم مورد استفاده قرار بگیره.
👍1
سلام خدمت دوستان عزیز
امیدوارم حالتون خوب باشه
یکی از نکاتی که در اکثر سرورها باهاش برخورد میکنم عدم تنظیم صحیح Cost Threshold for Parallelism هست.
پیش فرض این عدد موقع نصب 5 هست ولی حاالا اجازه بدین که در خصوص این مورد بیشتر توضیح بدم.
فرض کنید شما یک کارتن بهتون دادن که داخلش 100 عدد موبایل هست و قراره شما اینو ارسال کنید به بندرعباس.
اگر شما بیاین این جعبه رو باز کنید و به صدتا اتوبوس بدین و هر موبایل با یک اتوبوس به بندرعباس ارسال بشه ، هزینه خیلی زیادی برای شما خواهد داشت مضاف براینکه بندرعباس هم باید یک هزینه اضافی بکنید که این موبایلهارو از تک تک اتوبوسها بگیرید و جمع آوری کنید.
حالا اگه این کارتن رو با یک اتوبوس یا هواپیما ارسال کننید با هزینه زمانی و ریالی خیلی کمتر به مقصد ارسال خواهد شد.
ولی فرض کنید قراره صد تا یخچال فریزر ساید بای ساید رو به بندرعباس ارسال کنید. اینجا دیگه توی یک ماشین جا نمیشه و میتونه براتون دردسر ساز بشه پس ناچارید چندتا ماشین تهیه کنید وو این هارو ارسال کنید. چون اگه قرار باشه بایک ماشین ارسال بشه میتونه هزینه زمانی زیادی برای شما داشته باشه که صبر کنید ماشین بره برگرده دوباره یک پارت دیگه بار بزنه.
حالا برگردیم سرQuery ها. وقتی یک Query با یک هزینه پایین مثلا 10 داره اجرا میشه و براساس این تنظیمات مجبوره پارالل اجرا بشه حکم همون جعبه موبایلها رو داره که این باعث هدر رفتن منابع سرور من جمله CPU خخواهد شد و Wait های بر روی CPU افزایش پیدا میکنه.
ولی وقتی مثلا Cost کد شما فرضا بالای 100 هست اینجا معمولا بهتره به صورت پارالل اجرا بشه که سریعتر کد محاسبه و اجرا بشه تا به نتیجه برسه.
پس بهتره این عدد رو درست تنظیم کنیم تا کدهایی که با Cost های پایین هستن به صورت پارالل اجرا نشن و همین باعث میشه خیلی از Wait های موجود بر روی CPU در سرورهای شلوغ کاهش پیدا کنه و به نوعی Blocking یا Deadlock ها به مقدار زیادی کاهش پیدا کنه.
این عدد معمولا روی 50 تنظیم میشه ولی بسته به نوع و قدرت سرورها میتونه روی 100 یا 200 نیز تنظیم بشه.
برای تنظیم اون هم بر روی Instance راست کلیک و Properties رو بزنید در قسمت Advanced میتونید این پارامتر رو تنظیم کنید.
امیدوارم این نکته مفید واقع بشه.
ارادتمند شما
حمیدرضا صادقیان
#Cost_Threshold_For_Parallelism
#MAXDOP
@Hamidreza_Sadeghian
امیدوارم حالتون خوب باشه
یکی از نکاتی که در اکثر سرورها باهاش برخورد میکنم عدم تنظیم صحیح Cost Threshold for Parallelism هست.
پیش فرض این عدد موقع نصب 5 هست ولی حاالا اجازه بدین که در خصوص این مورد بیشتر توضیح بدم.
فرض کنید شما یک کارتن بهتون دادن که داخلش 100 عدد موبایل هست و قراره شما اینو ارسال کنید به بندرعباس.
اگر شما بیاین این جعبه رو باز کنید و به صدتا اتوبوس بدین و هر موبایل با یک اتوبوس به بندرعباس ارسال بشه ، هزینه خیلی زیادی برای شما خواهد داشت مضاف براینکه بندرعباس هم باید یک هزینه اضافی بکنید که این موبایلهارو از تک تک اتوبوسها بگیرید و جمع آوری کنید.
حالا اگه این کارتن رو با یک اتوبوس یا هواپیما ارسال کننید با هزینه زمانی و ریالی خیلی کمتر به مقصد ارسال خواهد شد.
ولی فرض کنید قراره صد تا یخچال فریزر ساید بای ساید رو به بندرعباس ارسال کنید. اینجا دیگه توی یک ماشین جا نمیشه و میتونه براتون دردسر ساز بشه پس ناچارید چندتا ماشین تهیه کنید وو این هارو ارسال کنید. چون اگه قرار باشه بایک ماشین ارسال بشه میتونه هزینه زمانی زیادی برای شما داشته باشه که صبر کنید ماشین بره برگرده دوباره یک پارت دیگه بار بزنه.
حالا برگردیم سرQuery ها. وقتی یک Query با یک هزینه پایین مثلا 10 داره اجرا میشه و براساس این تنظیمات مجبوره پارالل اجرا بشه حکم همون جعبه موبایلها رو داره که این باعث هدر رفتن منابع سرور من جمله CPU خخواهد شد و Wait های بر روی CPU افزایش پیدا میکنه.
ولی وقتی مثلا Cost کد شما فرضا بالای 100 هست اینجا معمولا بهتره به صورت پارالل اجرا بشه که سریعتر کد محاسبه و اجرا بشه تا به نتیجه برسه.
پس بهتره این عدد رو درست تنظیم کنیم تا کدهایی که با Cost های پایین هستن به صورت پارالل اجرا نشن و همین باعث میشه خیلی از Wait های موجود بر روی CPU در سرورهای شلوغ کاهش پیدا کنه و به نوعی Blocking یا Deadlock ها به مقدار زیادی کاهش پیدا کنه.
این عدد معمولا روی 50 تنظیم میشه ولی بسته به نوع و قدرت سرورها میتونه روی 100 یا 200 نیز تنظیم بشه.
برای تنظیم اون هم بر روی Instance راست کلیک و Properties رو بزنید در قسمت Advanced میتونید این پارامتر رو تنظیم کنید.
امیدوارم این نکته مفید واقع بشه.
ارادتمند شما
حمیدرضا صادقیان
#Cost_Threshold_For_Parallelism
#MAXDOP
@Hamidreza_Sadeghian
👍3
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه
دوستانی که علاقه دارند Replication رو خوب یاد بگیرند و بهش مسلط بشن کتاب Pro SQL Server 2008 Replication رو براتون ارسال می کنم. با اینکه برای نسخه 2008 هست ولی نکات خیلی خوبی داره و دید خیلی خوبی بهتون میده.
ارادتمند شما
حمیدرضا صادقیان
@Hamidreza_Sadeghian
امیدوارم حالتون خوب باشه
دوستانی که علاقه دارند Replication رو خوب یاد بگیرند و بهش مسلط بشن کتاب Pro SQL Server 2008 Replication رو براتون ارسال می کنم. با اینکه برای نسخه 2008 هست ولی نکات خیلی خوبی داره و دید خیلی خوبی بهتون میده.
ارادتمند شما
حمیدرضا صادقیان
@Hamidreza_Sadeghian
سلام و عرض ادب خدمت دوستان عزیز
امیدوارم حالتون خوب باشه
بعضی وقتها از من سوال میکنند چیکار کنیم که نسبت به رفتارهای درونی SQL Server بیشتر آشنا بشیم و بفهمیم چیکار میکنه.
میخوام بهتون تکنیکی رو یاد بدم که بهتون دید خوبی میده.
همونطور که میدونید ابزار SSMS برای کار با SQL Server هست و خوب تقریبا اکثر کارها به واسطه اون انجام میشه. پشت اون یک سری کد نوشته شده که نشاندهنده بخشی از ساختار SQL Server هست.
برای اینکه با دستورات و جداول سیستمی خوب اشنا بشین و ارتباطاتش رو درست درک کنید ، پیشنهاد می کنم Profiler رو اجرا کنید و شروع کنید به کارکردن با قسمتهای مختلف SSMS .!
اون موقع به راحتی میتونید کدهایی که توسط SSMS داره اجرا میشه رو ببینید و با دستورات و جداول سیستمی ، توابع و پراسیجرها ، DMV ها و... آشنا بشین ، ارتباطاتش رو بدست بیارین و کلی دانش خوب نسبت به رفتار SQL Server کسب کنید.
امیدوارم این نکته در جهت افزایش دانایی به کارتون بیاد.
شادو پرانرژی باشید.
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#SSMS
#Profiler
#DMV
#SQLServerEngine
#SQLServer
#SQL_Server
امیدوارم حالتون خوب باشه
بعضی وقتها از من سوال میکنند چیکار کنیم که نسبت به رفتارهای درونی SQL Server بیشتر آشنا بشیم و بفهمیم چیکار میکنه.
میخوام بهتون تکنیکی رو یاد بدم که بهتون دید خوبی میده.
همونطور که میدونید ابزار SSMS برای کار با SQL Server هست و خوب تقریبا اکثر کارها به واسطه اون انجام میشه. پشت اون یک سری کد نوشته شده که نشاندهنده بخشی از ساختار SQL Server هست.
برای اینکه با دستورات و جداول سیستمی خوب اشنا بشین و ارتباطاتش رو درست درک کنید ، پیشنهاد می کنم Profiler رو اجرا کنید و شروع کنید به کارکردن با قسمتهای مختلف SSMS .!
اون موقع به راحتی میتونید کدهایی که توسط SSMS داره اجرا میشه رو ببینید و با دستورات و جداول سیستمی ، توابع و پراسیجرها ، DMV ها و... آشنا بشین ، ارتباطاتش رو بدست بیارین و کلی دانش خوب نسبت به رفتار SQL Server کسب کنید.
امیدوارم این نکته در جهت افزایش دانایی به کارتون بیاد.
شادو پرانرژی باشید.
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#SSMS
#Profiler
#DMV
#SQLServerEngine
#SQLServer
#SQL_Server
👍2
سلام وعرض ادب خدمت دوستان عزیز
امیدوارم حالتون خوب باشه
شاید بارها با این مشکل مواجه شدین که یک دفعه سرور کند شده و شما باید سریع دنبال سرنخ و مشکل میگشتین . احتمالا اولین گزینه استفاده از Activity Monitor بوده. خوب اینجا یک سری چالش هست که پیشنهاد میشه از این ابزار استفاده نکنید.
ابزارهای رایگانی وجود داره که در ادامه معرفی خواهم کرد.
وقتی که شما از Activity Monitor استفاده می کنید بخش عمده ای از Wait type ها رو درون یک Wait type خاص گروه بندی می کنه و هیچ مستنداتی هم براش نیست که بدونید دقیقا چه Wait type هایی تجمیع شدن. به عنوان مثال Wait type های PAGELATCH_UP, PAGELATCH_SH, PAGELATCH_EX رو درون Buffer latch تجمیع میکنه در صورتی که برای بررسی دقیق مشکلات دقیقا نیاز هست بدونیم که الان مشکل بر روی جه نوع wait هست که بتونیم عملیات مختص به اون رو پیاده سازی کنیم.
برای مانیتورینگ پیشنهاد میکنم از ابزار FirstResponderKit جناب BrentOzar که در سایتش قرار داره و رایگانه استفاده کنید.
و مورد بعدی هم از Sp_WhoisActive که توسط جناب Adam Machanic نوشته شده.
امیدوارم این نکته در بررسی مشکلات بهتون کمک کنه و همیشه سروری با دسترس بودن بالا و سرعت بالا داشته باشید😊
شاد و پرانرژی باشید.
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#ActivityMonitor
#SQLServerMonitoring
#Troubleshooting
#Administration
#SQLServerAdministrator
امیدوارم حالتون خوب باشه
شاید بارها با این مشکل مواجه شدین که یک دفعه سرور کند شده و شما باید سریع دنبال سرنخ و مشکل میگشتین . احتمالا اولین گزینه استفاده از Activity Monitor بوده. خوب اینجا یک سری چالش هست که پیشنهاد میشه از این ابزار استفاده نکنید.
ابزارهای رایگانی وجود داره که در ادامه معرفی خواهم کرد.
وقتی که شما از Activity Monitor استفاده می کنید بخش عمده ای از Wait type ها رو درون یک Wait type خاص گروه بندی می کنه و هیچ مستنداتی هم براش نیست که بدونید دقیقا چه Wait type هایی تجمیع شدن. به عنوان مثال Wait type های PAGELATCH_UP, PAGELATCH_SH, PAGELATCH_EX رو درون Buffer latch تجمیع میکنه در صورتی که برای بررسی دقیق مشکلات دقیقا نیاز هست بدونیم که الان مشکل بر روی جه نوع wait هست که بتونیم عملیات مختص به اون رو پیاده سازی کنیم.
برای مانیتورینگ پیشنهاد میکنم از ابزار FirstResponderKit جناب BrentOzar که در سایتش قرار داره و رایگانه استفاده کنید.
و مورد بعدی هم از Sp_WhoisActive که توسط جناب Adam Machanic نوشته شده.
امیدوارم این نکته در بررسی مشکلات بهتون کمک کنه و همیشه سروری با دسترس بودن بالا و سرعت بالا داشته باشید😊
شاد و پرانرژی باشید.
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#ActivityMonitor
#SQLServerMonitoring
#Troubleshooting
#Administration
#SQLServerAdministrator
سلام دوستان عزیزم
امیدوارم حالتون خوب باشه
شاید براتون پیش اومده باشه که نیاز داشته باشید برای تغییرات جداول ، یا ایجاد جداول جدید کد بنویسید و در سایت مشتری اجرا کنید.
در نسخه های پایین تر از 2016 برای اینکه یک جدول رو حذف کنید بهتر بود تست می کردین که وجود داره که کد شما خطا نده.
If object_id(N'dbo.Products',N'U') is not null Drop Table Dbo.products
از نسخه 2016 به بعد میتونید از ساختار زیباتر و ساده تری استفاده کنید و به این صورت بنویسید.
Drop Table If exists dbo.products
و اگر چند جدول بود کافیه فقط با کاما از هم جدا بشن . مانند
Drop Table If exists dbo.products,dbo.orders
امیدوارم لذت برده باشید.
شاد و پرانرژی باشید.
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#TSQL_Tips
#DDL
امیدوارم حالتون خوب باشه
شاید براتون پیش اومده باشه که نیاز داشته باشید برای تغییرات جداول ، یا ایجاد جداول جدید کد بنویسید و در سایت مشتری اجرا کنید.
در نسخه های پایین تر از 2016 برای اینکه یک جدول رو حذف کنید بهتر بود تست می کردین که وجود داره که کد شما خطا نده.
If object_id(N'dbo.Products',N'U') is not null Drop Table Dbo.products
از نسخه 2016 به بعد میتونید از ساختار زیباتر و ساده تری استفاده کنید و به این صورت بنویسید.
Drop Table If exists dbo.products
و اگر چند جدول بود کافیه فقط با کاما از هم جدا بشن . مانند
Drop Table If exists dbo.products,dbo.orders
امیدوارم لذت برده باشید.
شاد و پرانرژی باشید.
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#TSQL_Tips
#DDL
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه
در بحث Logical Processing شاید این سوال برای شما پیش اومده باشه که وقتی برای یک فیلدی در Select میایم Alias تعریف می کنیم چرا د رهمون Select نمیتونیم از اون Alias استفاده کنیم.
به این مثال دقت کنید.
Select
Year(OrderDate) as YearORderDate,
YearOrderDate+1 as NewOrderDate
From
Sales.Orders
توی این دستور شما نمیتونید از فیلد yearOrderDate استفاده کنید . درسته که در Logical Processing اینجا Select پردازش شده ولی دلیل اصلی این هست که تمامی عملیاتی که در Select قرار میگیره به جز distinct و top در یک دسته انجام میشه و در عمل همه اونها باهم پردازش و ایجاد میشن به همین خاطر دسترسی به اون آلیاس هنوز وجود نداره و شما حتما باید از year(OrderDate) در خط دوم استفاده کنید.
امیدوارم لذت برده باشین
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#TSQL_Tips
#Logical_Processing
امیدوارم حالتون خوب باشه
در بحث Logical Processing شاید این سوال برای شما پیش اومده باشه که وقتی برای یک فیلدی در Select میایم Alias تعریف می کنیم چرا د رهمون Select نمیتونیم از اون Alias استفاده کنیم.
به این مثال دقت کنید.
Select
Year(OrderDate) as YearORderDate,
YearOrderDate+1 as NewOrderDate
From
Sales.Orders
توی این دستور شما نمیتونید از فیلد yearOrderDate استفاده کنید . درسته که در Logical Processing اینجا Select پردازش شده ولی دلیل اصلی این هست که تمامی عملیاتی که در Select قرار میگیره به جز distinct و top در یک دسته انجام میشه و در عمل همه اونها باهم پردازش و ایجاد میشن به همین خاطر دسترسی به اون آلیاس هنوز وجود نداره و شما حتما باید از year(OrderDate) در خط دوم استفاده کنید.
امیدوارم لذت برده باشین
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#TSQL_Tips
#Logical_Processing
سلام خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه.
یک نکته ای رو جاهای مختلف دیدم خواستم بهتون گوشزد کنم.
شاید شنیده باشین که در view ها یا به طور کل در Table Expression ها از order by نمیتونید استفاده کنید و حتما باید Top باشه تا بتونید از order by استفاده کنید.
و حتما هم یا دیدین یا خودتون انجام دادین که به این صورت مثلا بنویسید
Create view vw1
select top 100 percent ...
from ...
order by id
go
خوب باید خدمتتون عرض کنم که این Order by هیچ تضمینی به مرتب شدن خروجی شما در بیرون نمیکنه.
این order by در واقع برای همون سلکت داخل view هست که مثلا شما میخواهید یک تعداد رکورد خاص رو برگردونید.
برای سلکت های بیرونی مثل این هست که شما دارید از یک جدول مجازی سلکت میکنید پس هیچ گارانتی در خصوص مرتب بودن داده ها نداره. و اگر دارید به این صورت مینویسید ، میتونید به راحتی حذفش کنید و در سلکت اصلیتون از Order by استفاده کنید.
امیدوارم لذت برده باشین
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#TSQL_Tips
#Logical_Processing
امیدوارم حالتون خوب باشه.
یک نکته ای رو جاهای مختلف دیدم خواستم بهتون گوشزد کنم.
شاید شنیده باشین که در view ها یا به طور کل در Table Expression ها از order by نمیتونید استفاده کنید و حتما باید Top باشه تا بتونید از order by استفاده کنید.
و حتما هم یا دیدین یا خودتون انجام دادین که به این صورت مثلا بنویسید
Create view vw1
select top 100 percent ...
from ...
order by id
go
خوب باید خدمتتون عرض کنم که این Order by هیچ تضمینی به مرتب شدن خروجی شما در بیرون نمیکنه.
این order by در واقع برای همون سلکت داخل view هست که مثلا شما میخواهید یک تعداد رکورد خاص رو برگردونید.
برای سلکت های بیرونی مثل این هست که شما دارید از یک جدول مجازی سلکت میکنید پس هیچ گارانتی در خصوص مرتب بودن داده ها نداره. و اگر دارید به این صورت مینویسید ، میتونید به راحتی حذفش کنید و در سلکت اصلیتون از Order by استفاده کنید.
امیدوارم لذت برده باشین
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#TSQL_Tips
#Logical_Processing
سلام خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه
زمانی که دارید یک Script مینویسید و قراره یک سری آبجکتها تغییر کنن. شما میاین چک می کنید که ایا وجود داره یاخیر. و اگر داشت حذفش میکنیدو مجدد اونو میسازید. منظورم از این آبجکتها View,sp,function هست.
حالا میتونید از این نوع کد استفاده کنید که دیگه نیازی به اون کنترل نداشته باشید.
CREATE or alter procedure xxx
as
go
امیدوارم لذت برده باشین
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#TSQL_Tips
امیدوارم حالتون خوب باشه
زمانی که دارید یک Script مینویسید و قراره یک سری آبجکتها تغییر کنن. شما میاین چک می کنید که ایا وجود داره یاخیر. و اگر داشت حذفش میکنیدو مجدد اونو میسازید. منظورم از این آبجکتها View,sp,function هست.
حالا میتونید از این نوع کد استفاده کنید که دیگه نیازی به اون کنترل نداشته باشید.
CREATE or alter procedure xxx
as
go
امیدوارم لذت برده باشین
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#TSQL_Tips
سلام و عرض ادب خدمت دوستان عزیزم.
امیدوارم حالتون خوب باشه.
لینک گروه اسکیوال سرور تقدیم شما
https://t.me/joinchat/BTQQtzy50j8b6XCwUvQePA
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
امیدوارم حالتون خوب باشه.
لینک گروه اسکیوال سرور تقدیم شما
https://t.me/joinchat/BTQQtzy50j8b6XCwUvQePA
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
سلام وعرض ادب خدمت دوستان عزیز
یکی از مسائلی که گاها دیدم رخ میده این هست که خیلی از کارها توسط GUI خود SSMS انجام میشه و شاید کنترلش سخت باشه . پیشنهاد میکنم هر کاری که قراره انجام بشه ، تنظیماتشو توسط خود UI انجام بدین و در نهایت قبل از اجرا کردن ، دکمه Generate Script رو بزنید و توسط کد دستوراتی که میخواهید رو اجرا کنید.
اینجوری هم کنترل بیشتری روی کاری که میخواهید انجام بدین دارید، هم اینکه اگه نیاز به تغییر ، استاپ یا هرچیز دیگه داشته باشه دستتون بازه. ولی از طریق UI دیگه کنترلی روی روند اجرا نخواهید داشت.
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
یکی از مسائلی که گاها دیدم رخ میده این هست که خیلی از کارها توسط GUI خود SSMS انجام میشه و شاید کنترلش سخت باشه . پیشنهاد میکنم هر کاری که قراره انجام بشه ، تنظیماتشو توسط خود UI انجام بدین و در نهایت قبل از اجرا کردن ، دکمه Generate Script رو بزنید و توسط کد دستوراتی که میخواهید رو اجرا کنید.
اینجوری هم کنترل بیشتری روی کاری که میخواهید انجام بدین دارید، هم اینکه اگه نیاز به تغییر ، استاپ یا هرچیز دیگه داشته باشه دستتون بازه. ولی از طریق UI دیگه کنترلی روی روند اجرا نخواهید داشت.
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
سلام دوستان عزیزم
امیدوارم سالم باشین
من خیلی توی مشاوره هایی که دیدم ، مشاهده کردم که برای حل مشکل همزمانی و رفع Lock ها و کاهش Blocking ها خیلی از With(nolock) استفاده شده.
به هیچ عنوان روی سیستم های عملیاتی توصیه نمیکنم از این هینت استفاده کنید یا از Isolation level Read uncommitted استفاده کنید.
به خاطر اینکه فرض کنید مثلا شما یک سفارش خریدی رو ثبت کردین که یک سری موجودی در انبار اضافه شده ، ولی هنوز این خرید تایید نشده ، بعد یک نفر دیگه میخواد فروش انجام بده و چون از Nolock استفاده شده میتونه این خرید و تعدادی که اضافه شده رو بخونه وبراساس اون فروش انجام میده، بعد به هردلیلی خرید کنسل میشه و حذف میشه ولی نفر دوم روی اون خرید ، یک فروش انجام داده !!!
یا اینکه ممکنه با توجه به اسکنی که بر روی جدول انجام میشه ، یک اطلاعاتی خوانده بشه بعد در یک سشن دیگه اون دیتا آپدیت بشه و به یک جای جدید منتقل بشه و دوباره در سشن اول اون دیتا خونده بشه و عملا یک اطلاعات دوبار خوانده بشه.
یا ممکنه زمان خواندن اطلاعات ، دیتای شما آپدیت بشه و منتقل بشه به پیجهایی که توسط کانکشن قبلی خوانده شده و این باعث میشه بعضی از اطلاعات خوانده نشه و دیتای غلطی داشته باشین.
پس خواهشا تحت هیچ شرایطی از این دستور در محیطهای عملیاتی استفاده نکنید اگه علاقه ندارین دیتای غلطی وارد چرخه سیستم های شما بشه.
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#Nolock
#Read_Uncommitted
امیدوارم سالم باشین
من خیلی توی مشاوره هایی که دیدم ، مشاهده کردم که برای حل مشکل همزمانی و رفع Lock ها و کاهش Blocking ها خیلی از With(nolock) استفاده شده.
به هیچ عنوان روی سیستم های عملیاتی توصیه نمیکنم از این هینت استفاده کنید یا از Isolation level Read uncommitted استفاده کنید.
به خاطر اینکه فرض کنید مثلا شما یک سفارش خریدی رو ثبت کردین که یک سری موجودی در انبار اضافه شده ، ولی هنوز این خرید تایید نشده ، بعد یک نفر دیگه میخواد فروش انجام بده و چون از Nolock استفاده شده میتونه این خرید و تعدادی که اضافه شده رو بخونه وبراساس اون فروش انجام میده، بعد به هردلیلی خرید کنسل میشه و حذف میشه ولی نفر دوم روی اون خرید ، یک فروش انجام داده !!!
یا اینکه ممکنه با توجه به اسکنی که بر روی جدول انجام میشه ، یک اطلاعاتی خوانده بشه بعد در یک سشن دیگه اون دیتا آپدیت بشه و به یک جای جدید منتقل بشه و دوباره در سشن اول اون دیتا خونده بشه و عملا یک اطلاعات دوبار خوانده بشه.
یا ممکنه زمان خواندن اطلاعات ، دیتای شما آپدیت بشه و منتقل بشه به پیجهایی که توسط کانکشن قبلی خوانده شده و این باعث میشه بعضی از اطلاعات خوانده نشه و دیتای غلطی داشته باشین.
پس خواهشا تحت هیچ شرایطی از این دستور در محیطهای عملیاتی استفاده نکنید اگه علاقه ندارین دیتای غلطی وارد چرخه سیستم های شما بشه.
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#Nolock
#Read_Uncommitted