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

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

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

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

ارادتمند شما
حمیدرضا صادقیان

با تشکر از @xXKingAttilaXx

ID:@Hamidreza_Sadeghian
Channel :@SQL_Server
سلام وعرض ادب خدمت دوستان عزیز
امیدوارم حالتون خوب باشه
شاید بارها پیش اومده باشه براتون که نیاز داشته باشین روی نتیجه SP ها سلکت بزنین و شرط بذارین یا از نتیجه اون در Join ها استفاده کنید.
خوب راه معمولش این هست که نتیجه SP رو داخل یک جدول موقت بریزین و بعد از اون جدول استفاده کنید.
یک راه ساده تر این هست که از Openrowset استفاده کنید.
برای استفاده از OpenrowSet ابتدا باید دستور زیر رو اجرا کنید.
sp_configure 'Ad Hoc Distributed Queries',1
Go
Reconfigure
go

سپس میتونید از این قالب استفاده کنید.
select a.* from openrowset('sqlncli','server=.;trusted_connection=yes;','
exec DbName.dbo.UspReturnPersonelList
''01-11-2018'',''29-12-2018''') as a
where a.[name] =N'Hamidreza'

در این کد در قسمت Trusted_Connection من از Windows_Authentication استفاده کردم و در قسمت Server هم نام سرور لوکال خودم رو قرار دادم. که میتونه نام هر سروری و باهر دسترسی باشه.
و درنهایت نام دیتابیس به همراه Schema رو با نام SP صدا زدم و بهش دوتا پارامتر تاریخ پاس دادم.

نکته : اگر حجم داده ها زیاد هست و نیاز دارید خیلی از این داده ها استفاده کنید پیشنهاد میکنم از جدول استفاده کنید. چون روی جدول شما قابلیت ایندکس گذاری نیز دارید . این مورد برای زمانهایی هست که یا حجم داده ها کمتر هستن یا تعداد استفاده آنها خیلی کم هست.

امیدوارم از این نکته لذت ببرید ☺️☺️

ارادتمند شما
حمیدرضا صادقیان



#openRowset #SQL_Server #TSQL #SP #Stored_Procedure
ID:@Hamidreza_Sadeghian
Channel :@SQL_Server
SQL Server Group :https://t.me/joinchat/BTQQtzy50j_MVbMcUf6PtA
بدون شرح 😍😍😍😍😉😉
👍1
دوره بسیار عالی با افرادی بسیار دقیق و باهوش در شرکت موتورسازان تراکتور سازی تبریز

#performance_tuning
#T_SQL
#SQL_Server
👍1
سلام و عرض ادب خدمت دوستان عزیزم
عید همه عزیزان مبارک باشه

فیلم زیر رو توصیه میکنم ببینید و به قدرت SQL Server بیشتر پی ببرین 😊

ارادتمند همه عزیزان

حمیدرضا صادقیان

@Hamidreza_Sadeghian

SQL Server 2017: World’s First Diskless Database

https://www.instagram.com/tv/B1DWD5fFqwo/?igshid=8so896hylwa8
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه
میخوام کتاب 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
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه و عزاداریاتون مقبول درگاه حضرت حق.

اگر تمایل دارید وارد مباحث 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
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه
امروز ویدئویی رو مشاهده کردم که در خصوص روشهای 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
سلام و عرض ادب خدمت دوستان عزیزم

یکی از مسائلی که اکثر قریب به اتفاق شرکت ها با اون دست و پنجه نرم می کنند عدم وجود سورس کنترل و ورژن کنترل بر روی دیتابیس هست وبرای هندل کردن این مورد میان از ابزارهایی مثل 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
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
👍3
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه
دوستانی که علاقه دارند 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
👍2