SQL Server اوراکل را پشت سر گذاشت! + آموزش و مسابقه

SQL Server اوراکل را پشت سر گذاشت! + آموزش و مسابقه

نوشته شده توسط: فرید طاهری
۲۷ مهر ۱۳۹۴
زمان مطالعه: ۲ دقیقه
۰
(۰)

در اکتبر ۲۰۱۵ SQL Server توانست رقیت دیرنه خود اوراکل را پشت سر بگذارد، بر اساس نمواداری که شرکت Gartner ارائه کرده است، این محصول به رهبری Database تبدیل شده است و یک بازار کار عالی در حال شکل گیری در کل دنیا است.

البته باید اذعان داشت که SQL Server محبوبترین پایگاه داده در بین ایرانیان نیز است.

sql-server-oracle

در ادامه این فیلم یک آموزش و مسابقه هم خواهیم داشت، البته شرایط کمی متفاوت است ولی پیشنهاد می کنم حتما فیلم را تا انتها ببینید.

آموزش در مورد یک نکته بسیار ظریف و مهم درباره افزایش سرعت و کارایی بانک اطلاعاتی است

به طور کلی در SQL Server برای کار با داده‌های رشته‌ای دو نوع Data Type (نوع داده) داریم.

۱- نوع داده Fixed Length (طول ثابت) : زمانی که شما یک فیلد از این نوع داده تعریف کنید یک فضای ثابت در حافظه با توجه به نوع داده، طول آن و… اشغال می‌کند.
برای مثال نوع داده Char، NChar هر دو از نوع Fixed Length هستند و حافظه تخصیص یافته به آنها به صورت زیر می‌باشد.

یک فیلد با (۵)Char عبارت است از : با توجه به طول رشته حافظه تخصیص یافته ۵ بایت می‌باشد. چه مقدار شما ۱ کارکتر باشد و چه ۵ کارکتر

(۵)NChar : با توجه به طول رشته و نوع آن (یونی کد بودن) حافظه تخصیص یافته ۱۰ بایت می‌باشد. چه مقدار شما ۱ کارکتر باشد و چه ۵ کارکتر. (حواستان باشد Data Type از نوع یونی کد بوده و هر کاراکتر آن ۲ بایت در حافظه اشغال می‌کند.)

۲- نوع داده Variable Length (طول متغییر) : زمانی که شما یک فیلد از این نوع داده تعریف کنید یک فضای متغییر در حافظه با توجه به نوع داده، طول آن و… اشغال می‌کند.
برای مثال نوع داده VarChar، NVarchar  هر دو از نوع Variable Length هستند و حافظه تخصیص یافته به آنها به صورت زیر می‌باشد
(۵)Varchar : با توجه به طول رشته حافظه تخصیص یافته حداکثر ۵ بایت می‌باشد. اگر مقدار شما ۱ کارکتر باشد طول تخصیص یافته ۱ بایت و اگر ۵ کارکتر باشد طول تخصیص یافته به آن ۵ بایت می‌باشد.

(۵)NVarChar : با توجه به طول رشته حافظه تخصیص یافته حداکثر ۱۰ بایت می‌باشد. اگر مقدار شما ۱ کارکتر باشد طول تخصیص یافته ۲ بایت و اگر ۵ کارکتر باشد طول تخصیص یافته به آن ۱۰ بایت می‌باشد. (حواستان باشد Data Type از نوع یونی کد بوده و هر کاراکتر آن ۲ بایت در حافظه اشغال می‌کند.)

خوب این چیزی بود که همگی از آن اطلاع داریم

اما داستان زمانی است که شما از این Data Type Variable Length (نوع داده با طول متغییر) مانند VarChar،NVarchar در جداول خود استفاده کرده‌اید در این حالت رفتار SQL Server در تخصیص فضا به ازای این نوع Data Type‌ها کمی دور از انتظار است

برندگان مسابقه بر اساس قرعه کشی:

۱- هادی جباری دارستانی

۲- حمید صادق

۳- محمد زکی زاده

دوستان بالا لطفا با شماره ۰۲۱۴۴۲۷۷۶۹۹ تماس بگیرند تا کوپن تخفیف برای این دوستان اعلام گردد.

با تشکر از همه دوستانی که در این مسابقه شرکت کردند.

چه رتبه ای می‌دهید؟

میانگین ۰ / ۵. از مجموع ۰

اولین نفر باش

title sign
معرفی نویسنده
فرید طاهری
مقالات
6 مقاله توسط این نویسنده
محصولات
10 دوره توسط این نویسنده
فرید طاهری

فرید طاهری بنیان‌گذار و مدیرعامل شرکت نیک‌آموز است او همچنین: ایده‌پرداز محصولات آموزشی، آموزش سبک‌های تدریس نوین و جذاب به مدرسین، متخصص دیجیتال مارکتینگ، برنامه‌نویس سی‌شارپ و SQL Server، طراح و تحلیل‌گر سیستم‌های مالی و اداری، مشاور کسب و کارهای اینترنتی نیز می‌باشد.

پروفایل نویسنده
title sign
دیدگاه کاربران

    • با سلام و خسته نباشید
      من ابتدا به عنوان کارشناس پشتیبان مشغول به کار شدم و از اونجایی که یکی از وظایفم کار با 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/2806535
      http://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 این طور نیست.
        فقط به این مقایسه نگاه کنید تعداد کوئری هایی که اجرا شده را نگاه کنید یک سرور نسبتا ارزان قیمت (نسبت به سرورهای اوراکل ) 
        توی لینک مثال بالا هیچکدام پارتیشن نشده اند. این خیلی جالب است. 
        در ضمن 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 امکان پذیر است. حجم تا ۲TB و کلی قابلیت دیگر + Native Compiled Procedure + Native Compiled Function 
        در ضمن قرار نیست که ما کل دیتا را Memory Optimized کنیم می توان hot Data را در حافظه و… کمپانی های بزرگ نظیر BWIN و Nasdaq از این تکنولوژی استفاده می کنند و می توانند در ثانبه به درخواست های زیادی جواب دهند
        BWIN : استفاده از Memory Optimized جواب دادن به بیش از ۲۵۰ هزار درخواست در ثانیه
        Nsadaq : استفاده از Memory Optimized + Columnstore ایندکس + حجم ۲ پتا بایت دیتا پاسخ یک میلیون درخواست در ثانیه 
        Case Study مربوط به اونها در اینترنت است و در سایت چند بار روی اونها بحث شده 
        تغییرات نسخه ۲۰۱۶ واقعا عالی بوده و این در ارزیابی گارتنر هم مورد توجه قرار گرفته است
        برای کسب اطلاعات بیشتر در خصوص تغییرات SQL Server 2016 می توانید به لینک زیر مراجعه کنید
    •     با سلام

      با سپاس از آموزشهای خوب شما.
      برنامه نویس نرم افزارهای مبتنی بر پایگاه داده اسکیوال هستم. بدون دانش کافی شروع به نوشتن یک نرم افزار بازرگانی و انبارداری برای یک شرکت بزرگ کردم. با تلاش فراوان و کمک یکی از دوستان خوشبختانه توانستم کار رو به پایان برسونم. پس از حدود ۷ ماه که از نرم افزار استفاده میشود، بدلیل ثبت زیاد رکورد و استفاده از کوئری های با پرفورمنس پایین، بعضی گزارشها با سرعت پائین اجرا میشوند. میخواهم از پارتیشن بندی و سایر تکنولوژیهای کارآمد اسکیوال استفاده کنم اما بلد نیستم.
      •    برای اون چیزی که شما دنبالشی من دو محصول معرفی میکنم
        یکی جنون سرعت هست  و دیگری که قابلیت های sql مفصل تر توضیح داده شده دوره آموزشی sql server ویژه برنامه نویسان هست که شامل سه سطح میشه

    • با سلام. از سایت خوبتون بسیار تشکر می کنم. مطالبتان بسیار عالی است.
      برنامه نویس هستم. با .net و sql server کار می کنم.

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

هر روز یک ایمیل، هر روز یک درس
آموزش SQL Server بصورت رایگان
همین حالا فرم زیر را تکمیل کنید
دانلود رایگان جلسه اول
نیک آموز علاوه بر آموزش، پروژه‌های بزرگ در حوزه هوش تجاری و دیتا انجام می‌دهد.
close-link
وبینار رایگان ۳ راهکار هک نشدن SQL Server  یک شنبه ۲۳ اردیبهشت ساعت ۱۱
ثبت نام رایگان
close-image