TGViewer
Channel Public Channel
کانال تخصصی SQLSERVER

کانال تخصصی SQLSERVER

@sqlserver_professional

لینک کانال:
https://telegram.me/SQLSERVER_professional
Subscribers
848
Photos
146
Videos
6
Links
194

Showing posts older than #525 · Back to latest

Older Posts 20 shown
Post #523 2.02K
#انتقال رکوردهای آرشیوی به جدول دیگر در دیتابیس

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

به عنوان مثال یک سیستم انبار رو در نظر بگیرید، در یک سال جاری، خیلی کم پیش میاد که نیاز به اطلاعات سنوات گذشته داشته باشیم. چون که معمولا در این سیستم ها با اتمام سال ( میلادی یا شمسی) به نحوی استاد مربوط به سال گذشته حالت آرشیو پیدا می کنند ( با عناوینی تحت عنوان سال مالی، موجودی گیری پایان سال و...)
این مورد، در سیستم های فروش، حسابداری، حضور و غیاب و سیستم های مشابه نیز وجود دارد.

در حالت معمول، جدول های دیتابیس ما، حاوی همه رکوردها هستند، به عبارتی هم رکوردهایی که واقعا به صورت روزمره با اونها سرو کار داریم و روی اون ها عملیات انجام میدیم در جدول هستند که تعداد اون ها نسبت به کل رکوردها خیلی کمتر هست (Live Data) و هم رکوردهایی که حالت آرشیوی دارن و ممکنه اصلا در عملیات روتین و روزمره بهشون نیازی نداشته باشیم (Archive Data).
با توجه به توضیحات ارائه شده، می بینیم که لزومی به وجود رکوردهای مربوط به سنوات گذشته (آرشیو شده) و یا حتی چند ماه گذشته در خیلی از جداول ما نیست. بنابراین اگر بتوانیم این دو مجموعه رکورد رو از همدیگر تفکیک کنیم و عملیات روزمره ما تنها بر روی رکوردهای عملیاتی ( با تعداد خیلی کمتر) انجام شود، افزایش سرعت قابل توجهی در انجام عملیات خواهیم داشت. به عبارتی راه حل و یا تکنیکی لازم داریم تا با ستفاده از آن دو عملیات زیر قابل انجام باشد:
1- تفکیک رکوردهای عملیاتی از رکوردهای آرشیوی
2- قابل دسترس بودن رکوردهای آرشیوی در صورت نیاز

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

1. استفاده از Filtered Index
2. ایجاد یک SP جهت انتقال رکوردهای آرشیوی به جدولی با ساختار مشابه جدول اصلی و حذف رکوردهای انتقالی از جدول اصلی
3. استفاده از Partitioning

محسن بندامیر @Mohsen_Bandamir
کانال تخصصی Sqlserver:
@SQLSERVER_professional

در این آموزش قصد داریم روش دوم رو توضیح بدیم، از عمده مزیت های این روش، قابلیت پیاده سازی اون در تمام نسخه ها و ویرایش های Sqlserver و همینطور سادگی پیاده سازی و قابل فهم بودن اون هستش.

ای SP در ابتدا چند پارامتر ورودی داره :
@sourcetablename
نام جدول مبدآ حاوی رکوردهای آرشیوی و عملیاتی
@desttablename
نام جدول مقصد، جهت انتقال رکوردهای آرشیوی به آن
@column_to_check
نام ستونی که بر اساس آن، رکوردهای آرشیوی را مشخص می کنیم (معمولا یک فیلد تاریخ است)
@purge_date
مشخص کننده تارخ و یا مقداری است که رکوردهای حاوی مقدار کمتر از آن (در فیلد column_to_check) به جدول مقصد منتقل می شوند
@batch_size
تعیین تعداد رکوردی که در هر بار (در هر اجرای تراکنش) از جدول مبدآ به جدول مقصد منتقل می شوند. جهت افزایش کارایی، این مقدار ا تعیین می کنیم
@minutes_to_process
تعیین یک بازه زمانی جهت انجام این عملیات (به دقیقه).


به عنوان مثال، این پارامترها رو به این صورت مقدار دهی می کنیم:
@sourceTABLENAME = '[ftest].[dbo].[Table_1]',
@desttablename = '[ftest_log].[dbo].[arch_table_1]',
@column_to_check = 'logdate',
@PURGE_DATE = '1395/12/30',
@BATCH_SIZE = 500,
@MINUTES_TO_PROCESS = 15

اسکریپت ایجاد این SP رو از قسمت زیر دانلود و استفاده کنید: 👇👇👇
محسن بندامیر @Mohsen_Bandamir
کانال تخصصی Sqlserver:
@SQLSERVER_professional
Post #521 1.47K
⏺مشاهده لیست کلیه Feature هایی که در ویرایش های (Edition) مختلف Sqlserver 2016 پشتیبانی می شوند.

👈بهتر است قبل از انتخاب یکی از Edition های Enterprise -Standard - Web - Express with Advanced Services و Express در ابتدا Feature هایی که هر یک پشتیبانی می کنند را بررسی و سپس اقدام به نصب نمایید:

https://msdn.microsoft.com/en-us/library/cc645993.aspx
Post #519 1.41K
#ویدئو آموزشی
خیلی از مواقع در sqlserver پیش میاد که نیاز به ریست کردن سرویس sqlserver داریم. مثلا با ست کردن فلگ خاص و یا اعمال تغییر در تنظیمات سرور.
در ویدئو آموزشی زیر راه های مختلف برای ریست و یا شات دان کردن سرویس های sqlserver آموزش داده شده است.
👇👇👇👇👇👇👇👇👇
(البته لازمه اشاره کنم که یکی دیگه از روش ها ( علاوه بر دو روش ذکر شده در آموزش)، استفاده از Sqlserver Configuration manager می باشد. )
Post #517 1.43K
عملگر IN و Subquery
Post #516 1.54K
عملگر IN و مقدار NULL
Post #515 1.7K
کانال تخصصی SQLSERVER مقایسه پلن های اجرایی در sql2016
#SQL Server 2016 Compare Showplan

https://www.allegient.com/wp-content/uploads/SQL_Server_Blog_4.png

در sqlserver 2016 امکان جدیدی وجود داره که شما میتونین دو پلن اجرایی رو با هم دیگه مقایسه کنید.
در SQL Server 2016 Compare Showplan علاوه بر HighLight کردن قسمت های مشترک بین دو پلن اجرایی، شما میتونین تفوت های موجود در دو پلن رو از نظر هزینه، میزان حافظه مصرفی، میزان بهبود و ... مشاهده کنید.
یکی از کاربردهای این مورد میتونه مواقعی باشه که شما یک کوئری دارای مشکل کارایی دارید و پلن اجرایی اون رو ذخیره می کنید، اعمال تغییرات در جهت بهبود کارایی ( مانند اضافه کردن ایندکس و ...) اجرای مجدد از کوئری می گیریم. حال با ذخیره کردن پلن اجرایی جدید و با استفاده از SQL Server 2016 Compare Showplan می تونیم بهبودهای ایجاد شده رو بطور جمع و جور مشاهده کنیم.
مشاهده توضیحات تکمیلی: 👇👇👇
https://www.mssqltips.com/sqlservertip/4095/sql-server-2016-compare-showplan-option/
Post #514 1.28K
مقایسه پلن های اجرایی در sql2016
Post #511 1.62K
#آموزش
خیلی از مواقع پیش میاد که نیاز داریم جداول و دیتابیسمون رو از Sqlserver به یک سرور دیگر و یا حتی نرم افزارهایی مانند Excel منتقل کنیم و یا بالعکس.
خوب روش های رایجی که برای این کار وجود داره، بک آپ ریستور و یا استفاده از Generate Script هست. اما روش ساده و مناسب دیگر استفاده از Import و Export در Sqlserver می باشد.
در مقاله زیر نحوه استفاده از این امکان به صورت تصویری و مرحله به مرحله توضیح داده شده است : 👇👇👇
Post #509 1.51K
#CTE:
همونطور که میدونیم Common Table Expression ها یکی از انواع جداول موقتی هستند که در تهیه برخی از کوئری های پیچیده علاوه بر افزایش کارایی، نوشتن کوئری رو هم راحت تر میکنن. مثلا با استفاده از Recursive CTE میتونین به راحتی خروجی های سلسله مراتبی ( مثلا منو و زیر منو) رو تولید کنید.
برای آشنایی بیشتر با تکنیک های استفاده از CTE در طراحی کوئری، لینک زیر رو مشاهده کنید:👇👇👇
http://www.sqlservercentral.com/articles/Cursor+vs+Recursive+CTE/99795/?utm_source=SSC&utm_medium=pubemail
SQLServerCentral Usage of CTE - Trick with Dates This article exlores the usage of CTEs as a replacement to cursors in order to generate additional data by applying logic to existing data.
Post #508 1.81K
https://goo.gl/HXdVb4

کلا در sql نوع های عددی رو به دو دسته تقسیم می کنیم دسته اول که بهشون approximate data types میگیم مانند float و real
به این معنا که عددی که شما قصد ذخیره اون در فیلدی با ابن نوع رو دارین، به صورت دقیق ذخیره نمیشه و یه تخمین بسیار نزدیک به اون ذخیره می شود
و اما سایر نوع های داده ای عددی integer, decimal, money, وsmallmoney و ... بر خلاف نوع داده ای float - real دقیقا مقدار عددی وارد شده رو ذخیره می کنند.

کاربرد Decimal - Numeric , ... :
1-زمانی که شما نیاز به انجام محاسبات دقیق دارید. برنامه های حسابداری - مالی - انبار و ...
2-استفاده از این ستون در شرط Where و عملگرهای = and <>

کاربرد نوع داده ای Float - Real:
دقت کنید زمانی که نیاز به نگهداری مقادیر اعشاری در یک جدول باشد دو مفهوم مطرح می شود:
Precision: تعداد کل ارقامی که یک نوع داده ای نگهداری می کند
Scale: تعداد ارقامی که در سمت راست (ارقام صحیح) قرار میگیرند

دو نوع داده ای numeric , decimal مقدار Precision برابر با 38 می باشد. بنابراین اگر نیاز به نگهداری مقادیری در جدولتون دارین که تعداد ارقام اون از 38 بیشتر باشد این نوع های داده ای مناسب هستند.

نتیجه گیری:
از نوع داده ای decimal و numeric زمانی که دقیق بودن اعداد و محاسبات برای شما مهم و حیاتی هستند استفاده کنید.
از نوع های داده ای Flat ,Real در مقایسه ها (= و < و >) در شرط where استفاده نکنید.
محسن بندامیر @mohsen_bandamir
Post #506 1.28K
انتخاب نوع داده ای مناسب برای یک فیلد
Post #504 1.41K
منبع power BI از Reza Rad به زبان انگلیسی 👇👇👇
Post #503 1.56K
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →