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

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

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

گروه تبادل نظر:
https://t.me/+uIc1qhv58gU0NWQ0
Download Telegram
Forwarded from Deleted Account
همه مدیران بانک اطلاعاتی SQL Server فکر می کنند که هر دفعه که SQL Server ریستارت میشود بانک اطلاعاتی TempDB هم دوباره ساخته میشود. اما این تفکر اشتباه است! برای اطلاعات بیشتر مطلب زیر را مطالعه کنید.
http://fard-solutions.com/tempdb-recreation-myth/
با عرض سلام و شب بخیر خدمت دوستان گرامی
شب بر همگان خوش
کتاب ارزشمند Power BI توسط دوست عزیزم جناب رضا راد به صورت رایگان منتشر شده است.
مطالعه این کتاب رو به شدت توصیه میکنم.
برای دانلود این کتاب ارزشمند ، از لینک زیر اقدام به دانلود بفرمایید.

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

http://radacad.com/download-free-power-bi-book-pdf-format

ID: @Hamidreza_Sadeghian
SQL Server Channel : @SQL_Server
SQL Server Group : https://telegram.me/joinchat/BTQQtzy50j80lW2DM90Wtw
سلام و عرض ادب خدمت دوستان گرامی
امیدوارم حال همه عزیزان خوب و خوش باشه
امشب میخوام کتاب Execution Plan رو براتون قرار بدم
این کتاب به شما دید خواهد داد چطوری یک Execution Plan رو تحلیل کنید ، با اجزای مختلف اون آشنا بشید و اینکه چطوری میتونید مشکلات رو از روی Plan متوجه بشید.

امیدوارم مورد استفاده شما قرار بگیره

ارادتمند
حمیدرضا صادقیان
ID : @Hamidreza_Sadeghian
سلام و عرض ادب خدمت شما
اميدوارم سالي كه گذشته با همه تلخي ها، براي شما سالي سرشار از شادي ، موفقيت، لحظات زيبا رقم خورده باشه.
از خداوند منان خواهانم سال جديد براي شما سالي سرشار از موفقيت، رسيدن به اهداف و آرزوها، رقم خوردن زيباترين لحظات زندگي و سلامتي براتون باشه و جز زيباترين سال هاي عمرتون ثبت بشه
پيشاپيش اين عيد باستاني رو خدمت شما تبريك عرض مي كنم.

عمرتان مستدام
ارادتمند

حميدرضا صادقيان
Forwarded from Deleted Account
Forwarded from Deleted Account
در بعضی مواقع نیاز است که تنظیمات Statistics در بانک اطلاعاتی غیر فعال شود و به صورت زمانبندی شده آمارها به روز رسانی شوند. در حین اجرای بروز رسانی ممکن است که اختلال در سیستم بوجود آید! حال چطور می توان آمارهای جداول را بدون اینکه اختلالی ایجاد کند بروز رسانی کرد؟ در این مقاله به این مورد با روش و تکنیکی غیر معمول این کار را انجام میدهیم. http://fard-solutions.com/update-sql-server-statistics-heavy-workload-database/
Forwarded from شرکت تحلیل‌گران داده‌های آینده(تدآ)
سلام و عرض ادب خدمت دوستان عزیزم
امیدوارم حالتون خوب باشه و روز بسیار خوبی رو شروع کرده باشین
دیروز بحثی رو در مورد نگهداری بانکهای اطلاعاتی مطرح کردم که میخوام امروز اونو باز کنم و درموردش بهتون توضیح بدم.
احتمالا اکثر شما عزیزان هر 6 ماه یک بار به دکتر مراجعه می کنید و یک چکاپ کلی از خودتون میگیرید. آزمایشهای دوره ای کلی انجام میدین تا مطمئن بشین
خدایی نکرده مشکل خاصی نباشه و اگر مسئله ای در حال رخ دادن هست بتونید خیلی سریع جلوشو بگیرید.
آیا همین روند رو در سازمان یا شرکتتون برای بانک های اطلاعاتی خودتون دارید؟
اگر همین امروز سرور مالی شما دچار مشکل بشه و خدایی نکرده از بین بره، تا چه زمانی اطلاعات شما از دست خواهد رفت؟
چه مدت زمانی طول خواهد کشید که سیستم شما دوباره به چرخه کار برگرده و شروع به فعالیت بکنید؟
این مدت زمانی که وقفه در کار شما ایجاد شده ، آیا هزینه های مستقیم و غیر مستقیم اون رو حساب کردین؟ و آیا اصلا بهش فکر کردین؟
بذارید یک مثال ملموس از شرکتهای هواپیمایی براتون بزنم.
در شرکت های هواپیمایی یکی از مهم ترین سیستم ها که باعث درآمد مستقیم سازمان میشه ، نرم افزارهای رزرواسیون هست.
تمامی بلیط ها چه اینترنتی چه از طریق آژانسها چه از طریق فروش خود شرکت ، به واسطه این سیستم انجام میشه.
حالا فرض کنید، کارمندان شرکت ساعت 8 صبح به محل کاراومدن و متوجه شدن سیستم در دسترس نیست.
چند روز آینده نیز تعطیلاتی پیش روست که مردم تمایل دارن برای سفر بلیط تهیه کنند.
میان وارد سایت شرکت بشن ، با خطای عدم دسترسی مواجه میشن.
چندین بار سعی میکنن متاسفانه دسترسی حاصل نمیشه.
پس به ناچار یک ایرلاین دیگه رو انتخاب میکنن و سفرشون رو انجام میدن.
در همین مدتی که این سیستم از دسترس خارج شده عملا میلیون ها تومان فروش از دست شرکت رفته و مشتریان زیادی رو در همین بازه کوتاه از دست داده.
پس باعث کاهش درآمد شده.
به جز این ، هزینه های غیرمستقیم ، مثل هزینه های پرسنلی رو شرکت داره پرداخت میکنه. پرسنلی که در حال حاضر کاری ندارن و منتظرن تا سیستم وصل بشه. به این هزینه ها، هزینه های آب و برق و تلفن و ... هم اضافه کنید.
پس به غیر از اینکه فروشی نداشته کلی هم هزینه اضافی این مدت داشته که در ازاش هیچ بازدهی نداشته.
خوب حالا اگر یک سرور جایگزین این وسط بود و به محض از دسترس خارج شدن این سیستم، سریع به سیستم دوم منتقل میشد، چه اتفاقی میافتاد؟
مسافران میتونستن خیلی راحت بلیط رو رزرو کنن.
کارمندان بیکار نبودن و هزینه های جاری به ازای یک درآمدی در حال ایجاد شدن بود.
خوب همینطور که در این سناریو ملاحظه کردین با یک سرور جایگزین میشه مشکل رو حل کرد.
شاید خیلی از شما عزیزان با خودتون بگید خوب ما روی هارد اکسترنال بکاپ داریم هفته ای یک بار هم روی CD داریم رایت میکنیم و آرشیو میکنیم.
چقدر مطمئن هستید در موقع لزوم ، این بکاپ ها کار خواهند کرد؟
آیا تست دوره ای براش در نظر گرفتید؟
اگر سرور جایگزین نداشته باشید و اطلاعات شما نیز از بین بره، تا چقدر از اطلاعاتتون رو میتونید از دست بدین بدون اینکه به کسب و کارتون صدمه وارد بشه؟
فرض کنید آخرین بکاپ اطلاعاتی شما برای روز قبل از حادثه هست. و بعد از رخ دادن حادثه شما اون اطلاعات رو میخواهید برگردونید.
حالا شما بعد از آخرین بکاپ ، 12 ساعت نیز کار کردین. و هیچ پشتوانه ای هم از این 12 ساعت ندارید.
خوب با این اوصاف، اطلاعات این 12 ساعت اخیر شما از بین خواهد رفت. این برای شما مهم نیست؟ اثری در سازمان یا شرکت شما نخواهد گذاشت؟

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

این پست ادامه خواهد داشت

اگر این مطالب برای شما جذاب و مورد استفاده است ، لطفا با دیگر دوستانتان به اشتراک بگذارید.

منتظر شنیدن نظرات شما عزیزان هستیم.

ارادتمند شما
حمیدرضا صادقیان
Channel Name : @HighPerformanceOrganization
ID : @Hamidreza_Sadeghian
Forwarded from شرکت تحلیل‌گران داده‌های آینده(تدآ)
سلام و عرض ادب خدمت شما سروران گرامی
در این پست میخوام در مورد شرکت و مجموعه فعالیت هایی که انجام میدیم خدمتتان توضیح ارائه بدم

شرکت تحلیل گران داده های آینده(تدآ) ، در زمینه های زیر فعالیت می کند:
- آموزش های تخصصی در حوزه بانک های اطلاعاتی SQL Server به تیم های نرم افزاری ، و سازمانها جهت تربیت نیروهای متخصص DBA جهت نگهداری صحیح بانک های اطلاعاتی

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

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

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

ارادتمند شما
حمیدرضا صادقیان
Channel name:@highperformanceOrganization
Id:@hamidreza_sadeghian
سلام و عرض ادب خدمت دوستان گرامی
امیدوارم حالتون خوب باشه
این فایلی 👆👆 که قراردادم در واقع مراحل قدم به قدم برای بحث Disaster Recovery در SQL Server هست که جناب Paul Randal خیلی کامل و قشنگ این رو به تصویر کشیده.

امیدوارم ازش استفاده کافی رو ببرید

ارادتمند
حمیدرضا صادقیان
ID: @Hamidreza_Sadeghian
SQL Server Channel : @SQL_Server
SQL Server Group : https://telegram.me/joinchat/BTQQtzy50j80lW2DM90Wtw
سلام خدمت شما دوستان عزیز!
موقع نصب SQL Server 2016 و قابلیت In-Database Analytics یکسری کاربر ویندوزی اضافی ساخته میشود و قابل حذف هم نیست! در این بلاگ به این موضوع اشاره شده است. http://fard-solutions.com/mystery-mssqlserver-windows-users-sql-server-2016/
سلام و عرض ادب خدمت دوستان گرامی
امیدوارم حالتون خوب باشه

یکی از نکاتی که در اکثر دیتابیس هایی که میبینم و بهش برمیخورم عدم رعایت کردن Data Type ها هست
بذارید یک مثال بزنم.

مثلا فرض کنید یک جدول کالا دارید که فیلد کدکالای اون از نوع عددی هست
حالا یک SP نوشتید که بیاد یک کالا رو در این جدول درج کنه یا اینکه یک کالایی رو جستجو کنه.
پارامتر ورودی SP برای کد کالا مثلا از نوع char هست.

کد نوشته شده هم به این شکل هست.
Select * from Tbl_Goods
Where GoodNo = '123245'
این کد با موفقیت اجرا میشه و مشکلی هم نداره.
ولی اگر در Execution Plan نگاه کنید یک Implicit Convert رخ داده.
که باعث میشه از ایندکسها درست نتونه استفاده کنید. Cardinality رو درست نتونه تخمین بزنه و درنهایت سبب ایجاد یک پلن پیچیده و پر هزینه خواهد شد
به عنوان مثال دیشب روی کدی کار میکردم که فیلدهای ID رو از نوع Guid گرفته و چون داخل برنامه از نوع Varchar گرفته همه جا اومده از CAst استفاده کرده و به Varchar تبدیل کرده و همین باعث شده بود که SQL Server با وجود ایندکس نمیتونست از ایندکس درستی استفاده کنه چون دیگه Where Clause شما Sargable نیست و فیلدهای اون ماهیتا تغییر کردن بنابراین یک Index Scan رخ میده.
همین امر باعث شده بود که هزینه پلن نزدیک 30 بود و پلن پارالل شده بود و همچنین 70000 تا Logical Read بر روی جدول فوق داشتیم.
کدهای مربوطه رو اصلاح کردم و به همون شکل Guid نشونش دادم هزینه پلن شد 0.00170 , تعداد Logical REad جدول فوق نیز به 4 رسید و از ایندکسی که گذاشته بودم به راحتی استفاده کرد و یک Index Seek در پلن رخ داد.

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

ارادتمند شما
حمیدرضا صادقیان
@Hamidreza_Sadeghian
سلام خدمت دوستان عزیز
امیدوارم حالتون خوب باشه
یکی از دوستان از من سوال کرد که برای طراحی دیتابیس بهتره چه مواردی رعایت بشه.
من لیستی رو نوشتم که به نظرم اومد ، گفتم با شما هم به اشتراک بذارم امیدوارم به دردتون بخوره و کارساز باشه.
اگر نکته یا مطلبی در این خصوص دارید ممنون میشم به آیدی من ارسال کنید.



1 - دیتابیس باید تا حد امکان نرمال طراحی بشه
2- تعداد فیلدهای جدول نباید زیاد باشه
3- دیتا تایپ ها باید درست انتخاب بشه
4- هنگام نوشتن کدها باید حتما دیتا تایپها مشابه هم باشن
5- هنگام نوشتن کدهای SP و توابع باید حتی المقدور از Casting خودداری بشه
6- فقط داده هایی برگرده که بهش نیاز داریم
7- حتما کدها به صورت Set Based نوشته بشه
8- از توابع Scalar و MSTVF حتی المقدور کم استفاده بشه ( حداقل تا نسخه 2016)
9- به جای تریگرها حتی المقدور از Check Constraint ها استفاده بشه
10- کلیدها بهتره از نوع Int باشن
11- کلیدها وابسته نباشن و نیازی نباشه هنگام Update مقدار اونها عوض بشه
12- شرط ها به صورت Sargable Argument نوشته بشه که ایندکس ها درست روش اعمال بشن
13- بر روی هرجدول بیش از 2-3 تا ایندکس نباید باشه
14- تمام کوئری ها باید زیر 3 ثانیه جواب برگردونن که Locking و Blocking به حداقل برسه
15- برای درج داده ها به صورت دسته ای بهتره از SP با پارامترهای Table Parameter استفاده بشه و یک SP بارها صدا زده نشه
16- مدت زمانی که یک Transaction باز هست به حداقل برسه و تعداد لاک ها به حداقل برسه که عملیات lock escalation رخ نده ( البته این مورد به خودی خودش اشکال نیست و DB Engine انجام میده ولی با تکنیک های کدنویسی میشه مانع رخ دادنش شد که احتمال Blocking رو کاهش بده)

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

ID :@Hamidreza_Sadeghian
سلام به دوستان عزیز - آیا تا به حال با مشکلاتی از قبیل نداشتن فضای کافی برای گرفتن بکآپ و یا کاهش سرعت در هنگام بکآپ گیری برخورد کرده اید! اکثر این مشکلات از اینجا شروع میشود که پلن خوبی برای بکآپ گیری در سازمان وجود ندارد و تمامی بانکهای اطلاعاتی با یک پلن از پیش تعیین شده بکآپ گیری میشوند. در این بلاگ من در خصوص بکآپ گیری هوشمند توضیحاتی را داده ام. امیدوارم مورد قبول شما دوستان باشه. http://fard-solutions.com/sql-server-smart-database-backup-plan/
سلام خدمت دوستان عزیز
امیدوارم حالتون خوب باشه
احتمالا شما هم به این مشکل برخورد کردین که با چه روشی عملیات Paging رو در دیتابیس انجام بدین و یک سری رکوردهای خاص رو برگردونید.
در نسخه 2012 دستوری به نام offset Fetch معرفی شد که جز دستورات SQL ANSI است.
در ادامه یک SP نوشتم که دو تا پارامتر میگیره . یک تعداد رکوردهایی که نیاز هست فراخوانی بشه و دوم تعداد رکوردهایی که نیاز دارین Skip بشه و ازش رد بشه.
ساختار این دستور به شکل زیر است
Offset x rows fetch next y rows only
که پارامتر x تعداد رکوردهایی هست که شما میخواهید ازش صرفنظر کنید و بگذرید و پارامتر y تعداد رکوردهایی هست که تمایل دارید نمایش بده.
به کد SP توجه کنید.
Create Procedure UspPaging @FetchRow int, @SkipRow int
as
Select
Ob.object_id,
Ob.Name
from
Sys.objects as OB
order by ob.object_id
Offset @SkipRow rows fetch next @FetchRow rows only
Go

این هم نحوه فراخوانی
Exec UspPaging 10,0
در این دستور با اجرای SP هیچ رکوردی صرفنظر نشده و براساس Object_ID که مرتب شده ده رکورد اول رو برمیگردونه
Exec UspPaging 10,9
در این دستور 9 رکورد اول رو براساس Object_ID که مرتب شده صرفنظر میکنه و 10 رکورد بعدی رو نمایش میده.

امیدوارم این دستور به کار بیاد

ارادتمند شما
حمیدرضا صادقیان
ID: @Hamidreza_Sadeghian
SQL Server Channel : @SQL_Server
SQL Server Group : https://telegram.me/joinchat/BTQQtzy50j80lW2DM90Wtw
👍1
سلام و عرض ادب خدمت دوستان گرامی
شبتون بخیر باشه
نسخه ۲۰۱۷ نیز قابل استفاده می باشد و میتونید نسخه Developer اونو که تمامی امکانات نسخه Enterprise رو داره و به صورت رایگان عرضه میشه از سایت مایکروسافت دانلود کنید.
یکی از قابلیتهای جذابی که بهش اضافه شده این هست که شما میتونید دیتابیس هایی با ساختار گراف رو داخلش پیاده سازی کنید.
به عنوان مثال دیتابیسی مثل Facebook که همه اجزا به نوعی باهم درارتباط باشند.
این نوع دیتابیسها برای مواقعی بسیار کاربردی هست که شما یا ارتباطات بسیار پیچیده ای بین جداول خودتون دارید یا اینکه از فیلدهای hierarchyID استفاده می کنید.
یکی از محدودیتهای این فیلدها این هست که شما نمیتونید برای یک نود چندین نود پدر یا اصلی داشته باشید
ولی با وجود دیتابیس های گراف این مورد برای شما کاملا محیاست.
به این شکل شما میتونید یک ساختار درختی رو ایجاد کنید.
CREATE TABLE Person (ID INTEGER PRIMARY KEY, Name VARCHAR(100), Age INT) AS NODE;
CREATE TABLE friends (StartDate date) AS EDGE;
هم node ها هم Edge ها به صورت Table هستند و تمامی کارهایی که بر روی جداول میتونید انجام بدین بر روی این نوع جداول قابل پیاده سازی هست
برای کد نویسی هم دستور حدیدی به نام Match ااضافه شده که به شکل زیر است:
— Find friends of John
SELECT Person2.Name
FROM Person Person1, Friends, Person Person2
WHERE MATCH(Person1-(Friends)->Person2)
AND Person1.Name = 'John';

همچنین لازم به ذکر است که این ساختار به صورت کامل توسط خود SQL Server Engine ساپورت میشه و یک پردازشگر جداگانه براش تهیه نشده و همچنین ابزارها و کل اکوسیستم SQL Server مثل SSRS,SSIS, Power BI به راحتی با این نوع جداول ارتباط برقرار خواهند کرد .

امیدوارم از این مطلب لذت برده باشید

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

ID: @Hamidreza_Sadeghian
SQL Server Channel : @SQL_Server
SQL Server Group : https://telegram.me/joinchat/BTQQtzy50j80lW2DM90Wtw