خانه SQL Server مقایسه SQL Server با Oracle SQL Server افزایش سرعت SQL Server نوشته شده توسط: فرید طاهری تاریخ انتشار: ۲۷ مهر ۱۳۹۴ آخرین بروزرسانی: 02 بهمن 1403 زمان مطالعه: ۲ دقیقه ۰ (۰) SQL Server بهتر از اوراکل، در اکتبر ۲۰۱۵ SQL Server توانست رقیت دیرنه خود اوراکل را پشت سر بگذارد، بر اساس نموداری که شرکت Gartner ارائه کرده است، این محصول به رهبری دیتابیس تبدیل شده است و یک بازار کار عالی در حال شکل گیری در کل دنیا است. البته باید اذعان داشت که SQL Server محبوبترین پایگاه داده در بین ایرانیان نیز است. پایگاه داده SQL Server بهتر از اوراکل به طور کلی در SQL Server برای کار با دادههای رشتهای دو نوع Data Type (نوع داده) داریم. ۱- نوع داده Fixed Length (طول ثابت): زمانی که شما یک فیلد از این نوع داده تعریف کنید یک فضای ثابت در حافظه با توجه به نوع داده، طول آن و… اشغال میکند. برای مثال نوع داده Char، NChar هر دو از نوع Fixed Length هستند و حافظه تخصیص یافته به آنها به صورت زیر میباشد. یک فیلد با (۵)Char عبارت است از : با توجه به طول رشته حافظه تخصیص یافته ۵ بایت میباشد. چه مقدار شما ۱ کارکتر باشد و چه ۵ کارکتر (۵)NChar : با توجه به طول رشته و نوع آن (یونی کد بودن) حافظه تخصیص یافته ۱۰ بایت میباشد. چه مقدار شما ۱ کارکتر باشد و چه ۵ کارکتر. (حواستان باشد Data Type از نوع یونی کد بوده و هر کاراکتر آن ۲ بایت در حافظه اشغال میکند.) افراد علاقهمند میتوانند با مطالعه مقاله پرکاربردترین دستورات SQL Server، دانش خود را در زمینه کوئرینویسی گسترش دهند. ۲- نوع داده Variable Length (طول متغییر): زمانی که شما یک فیلد از این نوع داده تعریف کنید یک فضای متغییر در حافظه با توجه به نوع داده، طول آن و… اشغال میکند. برای مثال نوع داده VarChar، NVarchar هر دو از نوع Variable Length هستند و حافظه تخصیص یافته به آنها به صورت زیر میباشد. (۵)Varchar : با توجه به طول رشته حافظه تخصیص یافته حداکثر ۵ بایت میباشد. اگر مقدار شما ۱ کارکتر باشد طول تخصیص یافته ۱ بایت و اگر ۵ کارکتر باشد طول تخصیص یافته به آن ۵ بایت میباشد. پیشنهاد میکنیم برای درک بهتر مفاهیم کوئری نویسی را مطالعه کنید. (۵)NVarChar : با توجه به طول رشته حافظه تخصیص یافته حداکثر ۱۰ بایت میباشد. اگر مقدار شما ۱ کارکتر باشد طول تخصیص یافته ۲ بایت و اگر ۵ کارکتر باشد طول تخصیص یافته به آن ۱۰ بایت میباشد. (حواستان باشد Data Type از نوع یونی کد بوده و هر کاراکتر آن ۲ بایت در حافظه اشغال میکند.) سخن پایانی SQL Server بهتر از اوراکل، اما داستان زمانی است که شما از این Data Type Variable Length (نوع داده با طول متغییر) مانند VarChar،NVarchar در جداول خود استفاده کردهاید در این حالت رفتار SQL Server در تخصیص فضا به ازای این نوع Data Typeها کمی دور از انتظار است برندگان مسابقه بر اساس قرعه کشی: ۱- هادی جباری دارستانی ۲- حمید صادق ۳- محمد زکی زاده دوستان بالا لطفا با شماره ۰۲۱۴۴۲۷۷۶۹۹ تماس بگیرند تا کوپن تخفیف برای این دوستان اعلام گردد. با تشکر از همه دوستانی که در این مسابقه شرکت کردند. ما در نیک آموز منتظر نظرات ارزشمند شما درباره این مقاله هستیم. چه رتبه ای میدهید؟ میانگین ۰ / ۵. از مجموع ۰ اولین نفر باش معرفی نویسنده مقالات 5 مقاله توسط این نویسنده محصولات 9 دوره توسط این نویسنده فرید طاهری فرید طاهری بنیانگذار و مدیرعامل شرکت نیکآموز است او همچنین: ایدهپرداز محصولات آموزشی، آموزش سبکهای تدریس نوین و جذاب به مدرسین، متخصص دیجیتال مارکتینگ، برنامهنویس سیشارپ و SQL Server، طراح و تحلیلگر سیستمهای مالی و اداری، مشاور کسب و کارهای اینترنتی نیز میباشد. مقالات مرتبط ۰۲ آبان SQL Server ابزار Database Engine Tuning Advisor؛ مزایا، کاربردها و روش استفاده تیم فنی نیک آموز ۱۵ مهر SQL Server معرفی Performance Monitor ابزار مانیتورینگ SQL Server تیم فنی نیک آموز ۱۱ مهر SQL Server راهنمای جامع مانیتورینگ بکاپ ها در SQL Server تیم فنی نیک آموز ۰۸ مهر SQL Server Resource Governor چیست؟ آشنایی با نحوه پیکربندی و اهمیت های آن تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ رقیه حجازی ۲۹ / ۰۷ / ۹۴ - ۱۲:۲۵ با سلام و خسته نباشیدمن ابتدا به عنوان کارشناس پشتیبان مشغول به کار شدم و از اونجایی که یکی از وظایفم کار با SQL بود، شروع به یاد گرفتن در این زمینه کردم. بعد از یادگیری و سعی و تلاش فراوان کارم رو با کارشناس فنی ادامه دادم.فعالیت هایی که در زمینه SQL دارم عبارتند از :۱- کار با برنامه Profiler برای استخراج query ها و یا procedure هایی که دارای Duration های بالا و یا دارای خطا می باشند است و حل مشکلات آنها.۲- استفاده از Execution Plan برای بررسی اجرای Queryها.۳-تهیه Query با استفاده از CTE های تودرتو، WindowFunction،Pivot, …۴- انجام فعالیت های کوچک در زمینه Adminو …. پاسخ به دیدگاه حمیدقلیپور ۲۹ / ۰۷ / ۹۴ - ۰۹:۳۶ با سلام و احترام قلی پور هستم برنامه نویس و طراح بانک اطلاعاتی(قبلا تصور میکردم اوراکل برترین دیتابیس هست) ۱. از SQLServer 2014 استفاده میکنم. ۲.بشدت به دنبال راهکارهای افزایش سرعت کوئری ها در نرم افزار های تولیدی هستم. ۳.تلاش میکنم Stored Procedure ها و Function های بسیار بهینه ای تولید کنم. ۴.از Clustred Index و Unique Index در طراحی جداول استفاده میکنم. پاسخ به دیدگاه شهرام اکبرزاده ۲۹ / ۰۷ / ۹۴ - ۰۸:۵۲ با سلام بر همه دوستان گرامی.از همگی شما صمیمانه تشکر می کنم که به مطب نوشته شده به دقت نظر دادید.بازهم ضمن تشکر ازسرور گرامی آقای طاهری که با حوصله به مطالب به شکل کاملا فنی پاسخ می دهند. – مهدی جان، منبع معتبر من همان http://db-engines.com/en/ranking است که پیشتر توسط یکی از دوستان اشاره شده بود.نظر شما را به یکی از ویژگی های دیگر Oracle جلب می کنم تا بدانید برای چه ادعای نرسیدن Sql Server به Oracle را مطرح کردم. منظورم از طرح این مسئله موردی مطرح کردن مزایا و معایب نیست اما به نظر من طراحان Oracle بسیار دقیقتر از طراحان Sql Server عمل کرده اند: کلیه DBMSها دستورات ارسالی شما را آنالیز(Parse) می کنند و سپس اقدام به اجرا آن می کنند. حالOracle کلیه دستورات شما در بخش خاصی از حافظه(SHARED POOL) ذخیره می کند تا چنانچه فرد دیگری همان دستور را ارسال کرد دیگر نیازی به آنالیز(برخی مواقع عملیات سنگینی است) نباشد. البته اطلاعات دیگری هم همراه با آن ذخیره می شوند مانند Execution Plan. یکی دیگر از مهمترین اهداف آن نیز این است که چنانچه برای Oracle میسر باشد، دستورات پیچیده را به گونه ای تغییر دهد تا با کارایی بیشتر کار کنند. http://www.akadia.com/services/ora_interpreting_explain_plan.html – مسعود جان، memory Optimized Table (خیلی پیشتر در Oracle وجود داشت) در Sql Server محدودیتهایی دارد. به عنوان نمونه، اینگونه جداول نمی توانند دارای foreign key باشند. و یا حجم RAM قابل توجه نیاز دارند.لینکهای زیر را مشاده کنید:http://www.sqlpassion.at/archive/2015/03/11/dont-yet-recommend-memory-oltp-customers/https://www.simple-talk.com/sql/performance/the-promise—and-the-pitfalls—of-in-memory-oltp/بعلاوه واضح است که هنگام Join با سایر جداول، دیگر کارایی سابق را ندارند. در Oracle ویژگی memory Optimized Table به صورت transparent بوده و می توان بدون تغییر در جداول آنها را memory Optimized Table نمود. Oracle می تواند بر حسب Query تصمیم بگیرد که باید Index Scan را انجام دهد و یا Full Table Scan. لطفا به این مثال دقت کنید:فرض کنید لیست کلیه دانشجویان دانشگاه تهران را از ابتدای تاسیس تا امروز در جدولی وجود دارد که تاریخ ورود دانشجویان نیز Index شده است.حال چنانچه بخواهیم لیست دانشجویان ورودی سال ۱۳۹۳ به بعد را بدست آوریم Oracle دو بار به هارد رجوع می کند : بکبار برای جستجو در Index و بار دیگر برای خواندن اطلاعات از Table. حال چنانچه بخواهیم لیست کلیه دانشجویان ورودی سال ۱۳۲۰ به بعد را بدست آوریم، Optimizer اراکل با هوشمندی کامل تشخیص می دهد که اگر Full Table Scan انجام دهد Cost کمتری به دیتابیس تحمیل می کند لذا اینبار تنها به Table رجوع می کند. Lock Escalation در Sql Server وجود دارد در حالی که Oracle فاقد Lock Escalation است. مسعود جان، Sql Server در ایجاد Parallel Query محدودیتهای دارد. به عنوان مثال در نسخه های اخیر Sql توصیه شده که مقدار پیش فرض آن تغییر پیدا نکند.به خاطر آنکه نظرم خیلی طولانی شد، لطفا این دو لینک را مطالعه کنید:https://support.microsoft.com/en-us/kb/2806535http://www.dba-oracle.com/art_opq.htm من در دو روز گذشته نتوانستم مطلب Gartner را مطالعه کنم اما مطمئن هستم پارامترهایی نظیر قیمت نیز در آن تاثیر داشته اند. در غیر اینصورت اگر تمامی پارامترهای آن فنی بوده باشند آیا نباید منتظر ورشکستگی اراکل باشیم؟؟؟؟؟؟ شاد و پیروز باشید. پاسخ به دیدگاه مسعود طاهری ۲۹ / ۰۷ / ۹۴ - ۰۹:۲۷ Oracle می تواند بر حسب Query تصمیم بگیرد که باید Index Scan را انجام دهد و یا Full Table Scan. یکی از مهمترین آیتم هایی که در تصمیم گیری این موضوع به SQL کمک می کند Statistics است. + البته به همراه سایر پارامترها. منظورتان از دوبار مراجعه فکر می کنم همان Lookup است که ما هم در SQL آن را داریم. همچنین اگر بخواهیم Cost مربوط به دوبار مراجعه را حذف کنیم می توانیم از Cover Index استفاده کنیم. که فکر کنم اوراکل این مورد را ندارد. یک نکته دیگر هم اشاره کنم که تاثیر اون رو خیلی خوب دیدم ایندکس ها Columnstore واقعا نعمت هستند در SQL Server دیتا اون در دیسک به صورت فشرده و… ذخیره میشه اما اوراکل کل دیتا را در RAM قرار می دهد و این یعنی فاجعه. در ضمن SQL صرفا دیتای که نیاز داره به RAM میاره و… این مثال را در نظر بگیرید اگر از Columnstore ایندکس در اوراکل استفاده کنید دیتا ورهاوس که جدول فکت آن N ترابایت است باید در حافظه باشه اما در SQL این طور نیست. در ارواکل اگر سرور توی این سناریو Restart بشه باید کلی منتظر باشید تا کل N ترا دیتا به حافظه منتقل بشه و ایندکس ساخته بشه اما SQL این طور نیست. فقط به این مقایسه نگاه کنید تعداد کوئری هایی که اجرا شده را نگاه کنید یک سرور نسبتا ارزان قیمت (نسبت به سرورهای اوراکل ) http://blogs.technet.com/b/dataplatforminsider/archive/2014/04/16/sql-server-2014-and-hp-sets-two-world-records-for-data-warehousing-leading-in-both-performance-and-price-performance.aspx توی لینک مثال بالا هیچکدام پارتیشن نشده اند. این خیلی جالب است. در ضمن Columnstore ایندکس در ۲۰۱۶ می توانه به Memory Optimized Table ترکیب بشه و حالت Non Clustered Columnstore اون می تونه دیگه Readonly نباشه و Filtered باشه که واقعا یک قابلیت ارزنده است و مطمئن باشید که در سرعت اجرای کوئری ها به شدت موثر خواهد بود. پاسخ به دیدگاه مسعود طاهری ۲۹ / ۰۷ / ۹۴ - ۰۹:۳۳ سلام مجدد به شهرام عزیز.متشکرم از لینک ها و جواب های خوب شما memory Optimized Table (خیلی پیشتر در Oracle وجود داشت) نمی دانم منظور شما درباره Timetens اوراکل می باشد این رو بگم که در معماری Internal اون اگر بخونید می بینید هنوز Lock را داره اما Memory Optimized مربوط به SQL نه این معماری به صورت Lock Free و Latch Free است. و این موضوع یکی از مواردی است که باعث میشه شما بتوانید حجم زیادی از درخواست ها را پاسخ بدید. در Sql Server محدودیتهایی دارد. به عنوان نمونه، اینگونه جداول نمی توانند دارای foreign key باشند. و یا حجم RAM قابل توجه نیاز دارند. بله اما در نسخه ۲۰۱۶ این مشکلات رفع شده Relation امکان پذیر است. حجم تا 2TB و کلی قابلیت دیگر + Native Compiled Procedure + Native Compiled Function در ضمن قرار نیست که ما کل دیتا را Memory Optimized کنیم می توان hot Data را در حافظه و… کمپانی های بزرگ نظیر BWIN و Nasdaq از این تکنولوژی استفاده می کنند و می توانند در ثانبه به درخواست های زیادی جواب دهند BWIN : استفاده از Memory Optimized جواب دادن به بیش از ۲۵۰ هزار درخواست در ثانیه Nsadaq : استفاده از Memory Optimized + Columnstore ایندکس + حجم ۲ پتا بایت دیتا پاسخ یک میلیون درخواست در ثانیه Case Study مربوط به اونها در اینترنت است و در سایت چند بار روی اونها بحث شده تغییرات نسخه ۲۰۱۶ واقعا عالی بوده و این در ارزیابی گارتنر هم مورد توجه قرار گرفته است برای کسب اطلاعات بیشتر در خصوص تغییرات SQL Server 2016 می توانید به لینک زیر مراجعه کنید https://nikamooz.com/tag/sql-server-2016/ پاسخ به دیدگاه علوي ۲۹ / ۰۷ / ۹۴ - ۰۸:۵۴ ببخشید اشتباهی لینک قبلی رو گذاشتم. منظورم این لینک بود: آیا دوران پادشاهی اوراکل در حوزه ی مدیریت پایگاه داده های عملیاتی به پایان رسیده است؟ پاسخ به دیدگاه علوي ۲۹ / ۰۷ / ۹۴ - ۰۸:۵۴ ببخشید اشتباهی لینک قبلی رو گذاشتم. منظورم این لینک بود: آیا دوران پادشاهی اوراکل در حوزه ی مدیریت پایگاه داده های عملیاتی به پایان رسیده است؟ پاسخ به دیدگاه احمد ۲۸ / ۰۷ / ۹۴ - ۱۱:۰۸ مقاله: آیا دوران پادشاهی اوراکل در حوزه ی مدیریت پایگاه داده های عملیاتی به پایان رسیده است؟ پاسخ به دیدگاه احمد ۲۸ / ۰۷ / ۹۴ - ۱۱:۰۸ مقاله: آیا دوران پادشاهی اوراکل در حوزه ی مدیریت پایگاه داده های عملیاتی به پایان رسیده است؟ پاسخ به دیدگاه احمد رضاپور ۲۸ / ۰۷ / ۹۴ - ۰۹:۳۲ با سلام با سپاس از آموزشهای خوب شما. برنامه نویس نرم افزارهای مبتنی بر پایگاه داده اسکیوال هستم. بدون دانش کافی شروع به نوشتن یک نرم افزار بازرگانی و انبارداری برای یک شرکت بزرگ کردم. با تلاش فراوان و کمک یکی از دوستان خوشبختانه توانستم کار رو به پایان برسونم. پس از حدود ۷ ماه که از نرم افزار استفاده میشود، بدلیل ثبت زیاد رکورد و استفاده از کوئری های با پرفورمنس پایین، بعضی گزارشها با سرعت پائین اجرا میشوند. میخواهم از پارتیشن بندی و سایر تکنولوژیهای کارآمد اسکیوال استفاده کنم اما بلد نیستم. پاسخ به دیدگاه علی یگانه مقدم ۲۹ / ۰۷ / ۹۴ - ۰۳:۳۱ برای اون چیزی که شما دنبالشی من دو محصول معرفی میکنمیکی جنون سرعت هست و دیگری که قابلیت های sql مفصل تر توضیح داده شده دوره آموزشی sql server ویژه برنامه نویسان هست که شامل سه سطح میشه پاسخ به دیدگاه امیدرضا اسدی ۲۸ / ۰۷ / ۹۴ - ۰۷:۴۹ با سلام. از سایت خوبتون بسیار تشکر می کنم. مطالبتان بسیار عالی است.برنامه نویس هستم. با .net و sql server کار می کنم. پاسخ به دیدگاه نسرین اکبری ۲۸ / ۰۷ / ۹۴ - ۰۶:۵۰ سلام ، نسرین اکبری هستم . چندین سال مداوم در زمینه پشتیبانی فعالیت داشتم که مستقیما با کوئری نویسی در دیتابیس حل مشکل می کردم . الانیک سالیه که فاصله گرفتم اما آموزشها و نکات شما رو دنبال می کنم . عالین . خسته نباشید . پاسخ به دیدگاه 1 2 3 4 5