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
سلام خدمت دوستان عزیزم
امیدوارم که شاد باشین
یکی از انواع Lock هایی که در SQL Server هست Shared Lock هست که با حرف S نمایش داده میشه.
این Lock زمانی که یک دیتاقرارهست خوانده بشه بر روی داده ها قرار داده میشه. این محدوده میتونه یک Page ، یک ردیف خاص از یک جدول یا ایندکس قرار می گیرد. برای Isolation Level Serializable ، این لاگ بر روی یک رنج از داده های ایندکس قرار داده میشه.
چندین پروسس مختلف میونن همزمان باهم بر روی یک سری داده یکسان Shared lock داشته باشن و اینها همدیگه رو قفل نمی کنند.
هیچ پراسسی نمیتونه بر روی داده هایی که Shared Lock دارن یک Exclusive Lock قرار بده مگر اینکه اون درخواست در همون پراسسی باشه که Shared lock انجام شده و هیچ shared lock دیگه ای بر روی اون داده ها توسط پراسس دیگه ای ایجاد نشده. این لاک به محض اینکه خواندن تمام بشه آزاد میشه.
البته Serializable , REpetable read می تونن این رفتار رو تغییر بدن و تا زمانی که یک تراکنش باز هست این لاک آزاد نمیشه.
توی Sys.dm_Tran_locks در فیلد Reques_Mode اگر حرف S دیدین نمایشگر وجود Shared lock هست.
امیدوارم استفاده کرده باشین.
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#Lock_type
#Shared_Lock
#Dm_Tran_locks
امیدوارم که شاد باشین
یکی از انواع Lock هایی که در SQL Server هست Shared Lock هست که با حرف S نمایش داده میشه.
این Lock زمانی که یک دیتاقرارهست خوانده بشه بر روی داده ها قرار داده میشه. این محدوده میتونه یک Page ، یک ردیف خاص از یک جدول یا ایندکس قرار می گیرد. برای Isolation Level Serializable ، این لاگ بر روی یک رنج از داده های ایندکس قرار داده میشه.
چندین پروسس مختلف میونن همزمان باهم بر روی یک سری داده یکسان Shared lock داشته باشن و اینها همدیگه رو قفل نمی کنند.
هیچ پراسسی نمیتونه بر روی داده هایی که Shared Lock دارن یک Exclusive Lock قرار بده مگر اینکه اون درخواست در همون پراسسی باشه که Shared lock انجام شده و هیچ shared lock دیگه ای بر روی اون داده ها توسط پراسس دیگه ای ایجاد نشده. این لاک به محض اینکه خواندن تمام بشه آزاد میشه.
البته Serializable , REpetable read می تونن این رفتار رو تغییر بدن و تا زمانی که یک تراکنش باز هست این لاک آزاد نمیشه.
توی Sys.dm_Tran_locks در فیلد Reques_Mode اگر حرف S دیدین نمایشگر وجود Shared lock هست.
امیدوارم استفاده کرده باشین.
شاد و پرانرژی باشید
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#Lock_type
#Shared_Lock
#Dm_Tran_locks
سلام خدمت دوستان عزیزم.
شاید شما هم اصطلاح Session رو شنیده باشید. منظور از Session یک ارتباط بین یک کلاینت به یک SQL Server هست.
برای اینکه درخصوص Session های یک SQL Server اطلاعاتی بدست بیارید از Sys.dm_exec_Sessions میتونید این اطلاعات رو بدست بیارید.
در این DMV فیلد Session_ID های بزرگتر از 50 مربوط به سشن های کاربر هستند. ولی در سیستم های شلوغ ممکنه بعضی از سشن های سیستمی نیز عددی بزرکتر از 50 داشته باشند ،پس بهتره فیلد is_User_Process رو بررسی کنید. مانند :
Select * from sys.dm_exec_Sessions
where is_user_process =1;
فیلد Host_process_id همون PID نرم افزار متصل شده به SQL Server هست.
فیلد Cpu_time بر حسب میلی ثانیه بوده و مدت استفاده از CPU توسط اون Session رو از زمانیکه اتصال برقرار شده بهتون میده. فیلد MEmory_usage میزان رمی هست که خود اون سشن استفاده کرده نه اینکه میزان رم استفاده شده توسط کدهایی که دراون سشن اجرا شده است. معمولا عدد این فیلد کم هست. و براساس تعداد 8kb page هایی هست که اشغال کرده. به عنوان مثال اگر عددش 3 باشه یعنی 24 Kb اشغال کرده.
فیلد بعدی که اطلاعات خوبی بهتون میده فیلد Status هست که اوقات زیادی مقدار اون running هست که مشخص هست که یک پراسس توسط این سشن درحال اجراست. و Sleeping که در حال حاضر هیچ درخواستی توسط این سشن در حال اجرا نیست.
شاد و پر انرژی باشید ☺️☺️
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#DMV
#DM_Exec_Sessions
شاید شما هم اصطلاح Session رو شنیده باشید. منظور از Session یک ارتباط بین یک کلاینت به یک SQL Server هست.
برای اینکه درخصوص Session های یک SQL Server اطلاعاتی بدست بیارید از Sys.dm_exec_Sessions میتونید این اطلاعات رو بدست بیارید.
در این DMV فیلد Session_ID های بزرگتر از 50 مربوط به سشن های کاربر هستند. ولی در سیستم های شلوغ ممکنه بعضی از سشن های سیستمی نیز عددی بزرکتر از 50 داشته باشند ،پس بهتره فیلد is_User_Process رو بررسی کنید. مانند :
Select * from sys.dm_exec_Sessions
where is_user_process =1;
فیلد Host_process_id همون PID نرم افزار متصل شده به SQL Server هست.
فیلد Cpu_time بر حسب میلی ثانیه بوده و مدت استفاده از CPU توسط اون Session رو از زمانیکه اتصال برقرار شده بهتون میده. فیلد MEmory_usage میزان رمی هست که خود اون سشن استفاده کرده نه اینکه میزان رم استفاده شده توسط کدهایی که دراون سشن اجرا شده است. معمولا عدد این فیلد کم هست. و براساس تعداد 8kb page هایی هست که اشغال کرده. به عنوان مثال اگر عددش 3 باشه یعنی 24 Kb اشغال کرده.
فیلد بعدی که اطلاعات خوبی بهتون میده فیلد Status هست که اوقات زیادی مقدار اون running هست که مشخص هست که یک پراسس توسط این سشن درحال اجراست. و Sleeping که در حال حاضر هیچ درخواستی توسط این سشن در حال اجرا نیست.
شاد و پر انرژی باشید ☺️☺️
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#DMV
#DM_Exec_Sessions
Media is too big
VIEW IN TELEGRAM
سلام دوستان عزیزم وقتتون بخیر.
در این فیلم ، من به صورت کامل Grouping Set و Cube و Rollup رو توضیح دادم
امیدوارم لذت ببرید.
@Hamidreza_Sadeghian
#cube
#rollup
#Grouping_Set
در این فیلم ، من به صورت کامل Grouping Set و Cube و Rollup رو توضیح دادم
امیدوارم لذت ببرید.
@Hamidreza_Sadeghian
#cube
#rollup
#Grouping_Set
👍1
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه
یکی از قابلیتهای جذاب VS ، قابلیت LiveShare هست که به شما اجازه میده کدتون رو با افراد مختلفی در هرمکانی به اشتراک بذارین و باهم بر روی یک کد کار کنید. در این زمانی که اکثر کارها به صورت دورکار شدند شاید این قابلیت بسیار کاربردی و جذاب باشه.
اگر دیتابیستون رو هم با Database Project توسعه میدین میتونید از این قابلیت بهره ببرید.
در غیر اینصورت با VS اگر دارید کار می کنید، این قابلیت میتونه براتون بسیار راهگشا و جذاب باشه.
شمارو به دیدن این فیلم دعوت می کنم که بیشتر با این قابلیت آشنا بشین.
شاد و پرانرژی باشید☺️☺️
حمیدرضا صادقیان
#liveShare
#VS
#DatabaseProject
https://channel9.msdn.com/events/Connect/2017/T254?term=LiveShare&lang-en=true
امیدوارم حالتون خوب باشه
یکی از قابلیتهای جذاب VS ، قابلیت LiveShare هست که به شما اجازه میده کدتون رو با افراد مختلفی در هرمکانی به اشتراک بذارین و باهم بر روی یک کد کار کنید. در این زمانی که اکثر کارها به صورت دورکار شدند شاید این قابلیت بسیار کاربردی و جذاب باشه.
اگر دیتابیستون رو هم با Database Project توسعه میدین میتونید از این قابلیت بهره ببرید.
در غیر اینصورت با VS اگر دارید کار می کنید، این قابلیت میتونه براتون بسیار راهگشا و جذاب باشه.
شمارو به دیدن این فیلم دعوت می کنم که بیشتر با این قابلیت آشنا بشین.
شاد و پرانرژی باشید☺️☺️
حمیدرضا صادقیان
#liveShare
#VS
#DatabaseProject
https://channel9.msdn.com/events/Connect/2017/T254?term=LiveShare&lang-en=true
Docs
Introducing Visual Studio Live Share
In this introduction to Visual Studio Live Share, you learn how this new feature enables developers to share their full development context with teammates, to co-debug and co-edit code—even on different operating systems and using different tools. Come see…
سلام خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه
یکی از چالش هایی که ممکنه وجود داشته باشه بدست آوردن دیتاتایپ و مابقی مشخصات یک فیلد هست که نیاز هست یا از sysobjects بیاید Select کنید یا اینکه از information_schema.Columns استفاده کنید.
ولی یک راه حل ساده تر استفاده از تابع SQL_Variant_Property هست . درواقع این تابع مشخصات مقادیر از نوع SQL_Variant رو بهتون میده . با این تابع ، نوع فیلد ، طول فیلد ، Collation ، Total Byte, Maxlength رو میتوونید مشخص کنید.
به این مثال توجه کنید.
Use AdventureWorks2019
go
select SQL_VARIANT_PROPERTY(Name,'BaseType'),
SQL_VARIANT_PROPERTY(Name,'TotalBytes'),
SQL_VARIANT_PROPERTY(Name,'MaxLength')
from Production.Product
Go
با این کد هم نوع فیلد Name مشخص میشه هم تعداد بایتی که در هر رکورد ذخیره شده برای اون فیلد و هم ماکزیمم اون فیلدرو نشون میده.
امیدوارم لذت برده باشین.
شاد و پرانرژی باشید☺️☺️
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#SQL_Variant_Property
#TSQL_Tips
امیدوارم حالتون خوب باشه
یکی از چالش هایی که ممکنه وجود داشته باشه بدست آوردن دیتاتایپ و مابقی مشخصات یک فیلد هست که نیاز هست یا از sysobjects بیاید Select کنید یا اینکه از information_schema.Columns استفاده کنید.
ولی یک راه حل ساده تر استفاده از تابع SQL_Variant_Property هست . درواقع این تابع مشخصات مقادیر از نوع SQL_Variant رو بهتون میده . با این تابع ، نوع فیلد ، طول فیلد ، Collation ، Total Byte, Maxlength رو میتوونید مشخص کنید.
به این مثال توجه کنید.
Use AdventureWorks2019
go
select SQL_VARIANT_PROPERTY(Name,'BaseType'),
SQL_VARIANT_PROPERTY(Name,'TotalBytes'),
SQL_VARIANT_PROPERTY(Name,'MaxLength')
from Production.Product
Go
با این کد هم نوع فیلد Name مشخص میشه هم تعداد بایتی که در هر رکورد ذخیره شده برای اون فیلد و هم ماکزیمم اون فیلدرو نشون میده.
امیدوارم لذت برده باشین.
شاد و پرانرژی باشید☺️☺️
حمیدرضا صادقیان
@Hamidreza_Sadeghian
#SQL_Variant_Property
#TSQL_Tips
سلام دوستان عزیزم
امیدوارم سلامت باشین
میخوام از این به بعد چالش هایی که در شرکتهای مختلف باهاش برخورد میکنم رو باهاتون مطرح کنم و در نهایت بعد از شنیدن راه حلهای مختلف ، راهکارهارو ارائه میدم. با این موضوع شما با چالشهای موجود و راه حل های اون اشنا خواهید شد.
چالش اول :
ما قصد داریم در یک سیستم مالی مانده در ردیف رو محاسبه کنیم.
فرض کنید حساب صندوق من از بازه اول فروردین 99 تا اول اذر 99 گردش داره.
من ابتدا گزارش رو در این بازه دریافت میکنم خوب در هر ردیف بدهکار و بستانکار رو با مقادیر قبلی جمع میکنه و مشخص میشه در هر ردیف من چقدر بدهکار یا بستانکارم.
در هر ردیف باید مانده با ردیف قبل جمع بشه و نمایش داده بشه.
در روش دوم من میام بازه تاریخی رو از اول خرداد تا انتها دریافت میکنم. پس باید مبلغ از ابتدای سال تا اول خرداد جمع بشه و به عنوان مانده از قبل نمایش داده بشه. و باید در مانده ماهم تاثیر بذاره.
در روش سوم من در بازه اول خرداد تا اذرماه گزارش رو دریافت میکنم ولی قراره صفحه بندی بشه و در هر صفحه باید ده ردیف بیشتر نیاره. در صفحه اول خوب همه چیز طبیعیه. ولی در صفحه دوم باید مانده صفحه قبل هم نمایش داده بشه. و باید با مقادیر جدید جمع بشه
در ارائه راه حل باید پرفورمنس رو مدنظر داشته باشید
از روشهای row based و Cursor نباید استفاده بشه.
منتظر ارائه راه حل های شما هستم.
شاد و پرانرژی باشید☺️☺️
حمیدرضا صادقیان
@Hamidreza_Sadeghian
امیدوارم سلامت باشین
میخوام از این به بعد چالش هایی که در شرکتهای مختلف باهاش برخورد میکنم رو باهاتون مطرح کنم و در نهایت بعد از شنیدن راه حلهای مختلف ، راهکارهارو ارائه میدم. با این موضوع شما با چالشهای موجود و راه حل های اون اشنا خواهید شد.
چالش اول :
ما قصد داریم در یک سیستم مالی مانده در ردیف رو محاسبه کنیم.
فرض کنید حساب صندوق من از بازه اول فروردین 99 تا اول اذر 99 گردش داره.
من ابتدا گزارش رو در این بازه دریافت میکنم خوب در هر ردیف بدهکار و بستانکار رو با مقادیر قبلی جمع میکنه و مشخص میشه در هر ردیف من چقدر بدهکار یا بستانکارم.
در هر ردیف باید مانده با ردیف قبل جمع بشه و نمایش داده بشه.
در روش دوم من میام بازه تاریخی رو از اول خرداد تا انتها دریافت میکنم. پس باید مبلغ از ابتدای سال تا اول خرداد جمع بشه و به عنوان مانده از قبل نمایش داده بشه. و باید در مانده ماهم تاثیر بذاره.
در روش سوم من در بازه اول خرداد تا اذرماه گزارش رو دریافت میکنم ولی قراره صفحه بندی بشه و در هر صفحه باید ده ردیف بیشتر نیاره. در صفحه اول خوب همه چیز طبیعیه. ولی در صفحه دوم باید مانده صفحه قبل هم نمایش داده بشه. و باید با مقادیر جدید جمع بشه
در ارائه راه حل باید پرفورمنس رو مدنظر داشته باشید
از روشهای row based و Cursor نباید استفاده بشه.
منتظر ارائه راه حل های شما هستم.
شاد و پرانرژی باشید☺️☺️
حمیدرضا صادقیان
@Hamidreza_Sadeghian
سلام خدمت دوست عزیزم
امیدوارم که حالتون خوب باشه
آماده این بریم سر وقت چالش بعدی؟؟😜😜
در طراحی سیستم های نرم افزاری ، همیشه یک چالش وجود داره سر اینکه منطق نرم افزار یا در واقع Business Logic کجا باید پیاده سازی بشه؟
بعضی ها میگن کلا سمت دیتابیس ،
بعضی ها میگن سمت دیتابیس غلطه و فقط باید یک سری دستورات ساده باشه و باید سمت Backend هندل بشه.
بعضی ها هم میگن بخشی از اون سمت دیتابیس بخش دیگرش هم سمت Backend
شما نظرتون چیه و اینکه چرا این معماری رو انتخاب کردین؟
منتظر جوابهای شما عزیزان هستم.
شاد و پرانرژی باشید☺️☺️
حمیدرضا صادقیان
@Hamidreza_Sadeghian
امیدوارم که حالتون خوب باشه
آماده این بریم سر وقت چالش بعدی؟؟😜😜
در طراحی سیستم های نرم افزاری ، همیشه یک چالش وجود داره سر اینکه منطق نرم افزار یا در واقع Business Logic کجا باید پیاده سازی بشه؟
بعضی ها میگن کلا سمت دیتابیس ،
بعضی ها میگن سمت دیتابیس غلطه و فقط باید یک سری دستورات ساده باشه و باید سمت Backend هندل بشه.
بعضی ها هم میگن بخشی از اون سمت دیتابیس بخش دیگرش هم سمت Backend
شما نظرتون چیه و اینکه چرا این معماری رو انتخاب کردین؟
منتظر جوابهای شما عزیزان هستم.
شاد و پرانرژی باشید☺️☺️
حمیدرضا صادقیان
@Hamidreza_Sadeghian