نسخه SQL Server Enterprise چند امکانات داخلی منصر به فرد دارد که توانایی بالا برای بازدهی سریع در سیستم هایی با تراکنشهای بالا و پردازشهای سنگین را دارد. به عنوان مثال سیستمهای «خرید آنلاین» یا «پایانه های فروش» یا سیستمهای گزارشگیری و آنالیزی مانند Credit Reference Information System برای بانکها و بیمه ها که این امکانات و قابلیتهای پنهان در SQL Server Standard Edition موجود نمی باشد.
متاسفانه مسعولان فروش در شرکت مایکروسافت ( به عنوان مثال مایکروسافت مالزی و سنگاپور) تماما در مورد امکانات ظاهری و کلی صحبت می کنند به عنوان مثال در نسخه Enterprise چند پردازنده قابل استفاده است و یا حداکثر حافظه و قابلیتهایی مانند Business Intelligence, High Availability و البته هزینه خرید هر لایسنس برای یک پردازنده فیزیکی ( قیمت هر لایسنس برای Enterprise حدود ۲۶ هزار دلار آمریکا است) اما متاسفانه در یک سوی قضیه مشتری است که هیچ دانشی از امکانات این نرم افزار ندارد و فقط دنبال این است که هزینه لایسنس ها را تا حداکثر پایین بیاورد ولی به چه قیمت ؟ به قیمت اینکه در تراکنشهای بالا سرعت بازدهی پایین آید و امکان از دست دادن مشتریان فراهم شود؟ (البته تمامی این مثالهای در ایران قابل اجرا نیست به هزار و یک دلیل)
داستان:
یک شرکت که خدمات خرید اینترنتی و دستگاه های پایانه فروش ارایه می دهد در سرور اصلی خود به دلیل پایین آوردن هزینه ها از SQL Server Standard Edition استفاده می کند. این شرکت برای بالا بردن کیفیت خدمات خود باید دارای سرور پایگاه داده قوی و پر سرعتی باشد که بتواند تمام نیازهای گزارش گیری در یک زمان را فراهم آورد. بعد از یک سال ارایه خدمات این شرکت دچار مشکلات بزرگی از قبیل حجم بالای پایگاه داده – سرعت بازدهی پایین – نداشتن توانایی آرشیو کردن میلیونها رکرورد در چند ثانیه بدون هزینه یا وقت اضافی. به طور کلی تمامی این مشکلات با داشتن SQL Server Enterprise Edition بر طرف می شود. پس در نتیجه این شرکت نیاز به مشاوره قبل از خرید لایسنس را داشته ولی چه افسوس که برای این موضوع بسیار دیر است.
اگر SQL Server Enterprise گران است پس در مورد SQL Server Standard چه فکر می کنید؟
قابلیت اول: Advance Scan – Merry-Go-Round Algorithm این قابلیت اجازه می دهد که چند Task در خواندن یک جدول شریک شوند. به این معنی که اگر یک Execution Plan نیاز به خواند Data Page های یک جدول را داشته باشد موتور پایگاه داده آن را شناسایی کرده و با Execution Plan که قبل از آن اجرا شده و هنوز به اتمام نرسیده است شریک می کند. اینطور که اگر یک جدول ۱۰۰۰ Data Page داشته باشد و Execution Context 1 آن جدول را تا ۵۰۰ Data Page خوانده باشد و Execution Context 2 اجرا شود موتور پایگاه داده این وضعیت را شناسایی کرده و خواندن جدول را بین آنها تقسیم میکند و در این هنگام داده های جدول را یک بار خوانده و به هر دو Execution Context می فرستد نه اینکه جدول را از اول تا آخر برای هر دو Execution Context بخواند.
قابلیت دوم: Fast Recovery این قابلیت اجازه می دهد که پایگاه داده ها هرچه زودتر بعد از عملیات REDO به صورت Online در بیایند قبل از اینکه عملیات UNDO اجرا شود. این قابلیت توسط Lock Logging امکان پذیر است که تمامی اطلاعات Lock ها در فایل تراکنش ذخیره می شوند.
قابلیت سوم: Prefetching این قابلیت اجاره می دهد که SQL Server در حین خواندن داده های NonClustered Index به صورت Asynchronous داده های وابسته را از جدوال یا Clustered Index ها بخواند.
قابلیت چهارم: Scan Single Scatter موتور ذخیره سازی SQL Server و یا Storage Engine تمامی Index Page های میانی یا Intermediate Level را خوانده و لیست بلندی از داده های اصلی یا Leaf Page ها تهیه می کند. در این حین یک جستوجوی کلی بر روی Key Order انجام می دهد و Data Page های ذخیره شده کنار هم را شناسایی و در یک عملیات IO از دیسک می خواند. به عنوان مثال اگر Data Page شماره ۳۰۸و۴۶۵ و ۴۸۸ و ۴۸۹ در کنار هم باشند که نیاز به خواندن داشته باشید تمامی آنها را یکجا می خواند.
قابلیت پنجم: Automatic Matching این قابلیت در Query Optimizer اجازه می دهد که از اطلاعات آماری Computed Column ها در اجرا کوری استفاده شود. البته این قابلیت از SQL Server 2008 در تمامی نسخه ها وجود دارد.
قابلیت ششم: Role Reversal این قابلیت در اجرا عملیات Hash Join به کار می رود در انجام عملیات Hash Join اگر Query Optimizer نتواند کوچکترین جدول را شناسایی کند جای آنها را تغییر می دهد. ( به فارسی و نوشتاری خیلی سخته توضیحش به لینکداین رجوع شود.)
قابلیت هفتم: Partitioning این قابلیت این امکان را می دهد که به قسمتی از داده های جدول دسترسی داشته باشیم و توانایی آرشیو کردن داده ها را با سرعت بالایی انجام می دهد.
قابلیت هشتم: Data Compression با این قابلیت شما می توانید حجم داده ها را تا ۷۰٪ کاهش دهید البته بستگی به نوع داده ای دارد. توجه بدون آنالیز و مشاوره با متخصص هیچ وقت این قابلیت را فعال سازی نکنید به دلیل آنکه اگر نوع داده ای هم خوانی نداشته باشد حجم داده ها زیاد تر شده به جای آنکه کمتر شود.
22 دیدگاه
مجتبی شهریور
سلام
مرسی از مقاله خوبتون
در قابلیت هشتم ،کاهش حجم داده ها : استفاده از این قابلیت را مشروط به نوع داده بیان فرمودین مشخصا میشه بیان فرمود کدام نوع داده ها قابل استفاده و کدام نوع غیر قابل استفاده می باشذ- متشکرم
Hamid J. Fard
مجتبی عزیز: نوع های داده ای مثل varchar(max), text,varbinary(max), image, nvarchar(max) نوع داده ای هستند که بدلیل ساختارشون نمی شده کم حجم کرد. البته در لینکی که مسعود ارایه داده یک ذکری به sp_estimate_data_compression_savings شده ولی به دلایلی این ماژول اطلاعات دقیقی به ما نمیده و کماکان باعث گمراهی می شه. اگر می خواهید پایگاه داده ای را کم حجم کنید به صورت اصولی باید تمامی مراحل اجرا رو در نظر بگیرید.
سیدمهدی معصومی
سلام
قابلیت هفتم را که فرمودید برای حجم بالای چندین میلیون رکود مفید می باشد چرا که در تعداد و حجم کم نه تنها این کار بهبود ایجاد نمی کند بلکه مشکلاتی را هم بوجود خواهد آورد
با تشکر از مطالب خوب شما
Hamid J. Fard
می تونم بپرسم چه مشکلاتی؟ لطفا ذکر کنید که من هم راه حل ارایه بدم. اینهمه سال من از این قابلیت استفاده کردم چه در حجم کم جه در حجم زیاد داده بازدهی خوبی داشته و کارهای مدیریتی رو راحت تر کرده.
مجتبی مزورعی
این بحث ها در ایران خیلی جایگاه ندارد چون معمولا همه افراد از کاملترین نسخه برنامه sql server استفاده می کنند
Hamid J. Fard
البته همانطور که گفتم این اصلا در ایران معنی نداره به این دلیل که شرکتهای ایرانی به استفاده غیر قانونی و شرعی و هر چیز دیگری که اسمش رو بگذاریم عادت کردن. این رو همیشه در نظر بگیرید که همانطور که شما دوست ندارید شرکتی یا شخصی بدون اجازه و لایسنس نرم افزار شما از آن استفاده کنه ما هم نباید بدون لایسنس از نرم افزارهای شرکتهای غربی استفاده کنیم. درست و اخلاقی نیست.
مسعود طاهری
دوستان سلام
Hamid J. Fard
مسعود عزیز ممنون بابت پشتیبانی از طریق لینک.
Hamid J. Fard
البته مسعود جان لیستی که من تهیه کردم و در این مقاله است در لیستی که مایکروسافت ارایه می ده نیست. قابلیت زیر رو هم به قابلیتهای بالا اضافه کنید
مسعود طاهری
بلی درست است
Hamid J. Fard
مسعود جان من منظورم Delayed Transaction Durability نبود. Deferred Transaction یک امکان دیگر است. در پست اصلی در لینکداین مطلب رو اضافه کردم.
Hamid J. Fard
مسعود جان Delayed Transaction Durability با Deferred Transaction فرق داره و البته اینکه توضیح شما درباره Delayed Transaction Durability یک مقدار اشتباه است. اینطور که Delayed Transaction Durability سرعت ثبت لاگ رو بالا نمی بره بلکه تراکنش دیگر منتظر به ثبت فیزیکی رکورد تراکنش در Transaction Log نمی ماند و SQL Server تراکنش انجام شده را به صورت ثبت شده فرض می کند و البته به دلیل رفتار SQL Server در مقابل این نوع تراکنش ها احتمال Corrupted Transaction یا Database Inconsistency بالا میره.
مسعود طاهری
حمید عزیز بلی
Hamid J. Fard
مسعود عزیز خیلی برام جالبه که همش شما لینک ارایه می دید. به هر حال ممنون از پشتیبانی لینکی شما.
مسعود طاهری
حمید واقعیت این است که خیلی از بچه ها درخواست ارائه لینک برای بررسی مطالب تکمیلی دارند دادن یه توضیح کوچیک و معرفی یک لینک خوب به درک مطلب خیلی کمک می کنه.
تورج عزیزی
به خاطر به اشتراک گذاشتن دانشتون بدون منت، ممنون…
در نسخه Express که این امکانات وجود نداره درسته؟
مسعود طاهری
خیر – با توجه به اینکه این نسخه مجانی است قابلیت های آن محدود (حجم محدود و…) است
Hamid J. Fard
تورج عزیز: شما می توانید فقط از Express به عنوان Database Mirroring Witness در سازمانها و شرکتها استفاده کنید.
MEHDI
سلام
به نظرتون بهترین نسخه برای کار و نوشتن برنامه با سی شارپ کدوم نسخه هست و دلایل خودتون رو بگید؟
مسعود طاهری
سلام این موضوع بستگی به نوع برنامه ای دارد که شما می خواهید بنویسید
m
خیلی مقایسه جالبی بود.اولین باری بود که این سبک مقایسه رو راجع به sql میدیدم.بیشتر جاهای دیگه ای رو که دیده بودم فقط یکسری کپی برداری یا ترجمه بود.
جواد
سلام خسته نباشید ببخشید یک سوال داشتم که ربطی به مقاله بالا نداره عذرخواهی میکنم
میخواستم بین دو تا سرور قابلیت Replication رو راه اندازی کنم وقتی میخوام تنظیمات مربوط به Publication رو ست کنم خطای زیر رو میده
TITLE: New Publication Wizard
——————————
SQL Server is unable to connect to server ”.
SQL Server replication requires the actual server name to make a connection to the server. Specify the actual server name, ‘ACADEMY-PC’. (Replication.Utilities)
server name رو هم تغییر میدم ولی بازهم همین خطارو میده
خیلی ممنون