خانه SQL Server SQL Server اوراکل را پشت سر گذاشت! + آموزش و مسابقه SQL Server نوشته شده توسط: فرید طاهری ۲۷ مهر ۱۳۹۴ زمان مطالعه: ۲ دقیقه ۰ (۰) در اکتبر ۲۰۱۵ SQL Server توانست رقیت دیرنه خود اوراکل را پشت سر بگذارد، بر اساس نمواداری که شرکت Gartner ارائه کرده است، این محصول به رهبری Database تبدیل شده است و یک بازار کار عالی در حال شکل گیری در کل دنیا است. البته باید اذعان داشت که SQL Server محبوبترین پایگاه داده در بین ایرانیان نیز است. در ادامه این فیلم یک آموزش و مسابقه هم خواهیم داشت، البته شرایط کمی متفاوت است ولی پیشنهاد می کنم حتما فیلم را تا انتها ببینید. آموزش در مورد یک نکته بسیار ظریف و مهم درباره افزایش سرعت و کارایی بانک اطلاعاتی است به طور کلی در 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ها کمی دور از انتظار است برندگان مسابقه بر اساس قرعه کشی: ۱- هادی جباری دارستانی ۲- حمید صادق ۳- محمد زکی زاده دوستان بالا لطفا با شماره ۰۲۱۴۴۲۷۷۶۹۹ تماس بگیرند تا کوپن تخفیف برای این دوستان اعلام گردد. با تشکر از همه دوستانی که در این مسابقه شرکت کردند. چه رتبه ای میدهید؟ میانگین ۰ / ۵. از مجموع ۰ اولین نفر باش برچسب ها # Data Type# Fixed Length Data Type# SQL Server# Variable Length Data Type# آشنایی با نوع دادهها در SQL Server# آموزش SQL Server# اوراکل معرفی نویسنده مقالات 6 مقاله توسط این نویسنده محصولات 10 دوره توسط این نویسنده فرید طاهری فرید طاهری بنیانگذار و مدیرعامل شرکت نیکآموز است او همچنین: ایدهپرداز محصولات آموزشی، آموزش سبکهای تدریس نوین و جذاب به مدرسین، متخصص دیجیتال مارکتینگ، برنامهنویس سیشارپ و SQL Server، طراح و تحلیلگر سیستمهای مالی و اداری، مشاور کسب و کارهای اینترنتی نیز میباشد. پروفایل نویسنده مقالات مرتبط ۰۹ اردیبهشت SQL Server حمله SQL Injection چیست؟ صفرتاصد حمله تزریق SQL و راه های جلوگیری از آن تیم فنی نیک آموز ۰۶ اردیبهشت SQL Server پایگاه داده برداری چیست؟ بررسی کاربردها، نحوه کار و آینده Vector Database تیم فنی نیک آموز ۰۲ اردیبهشت SQL Server تاثیر ایندکس های Computed-Column روی دستور DBCC CHECKDB تورج عزیزی ۲۶ فروردین SQL Server دستور SELECT TOP در SQL Server تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ رقیه حجازی ۲۹ / ۰۷ / ۹۴ - ۱۲:۲۵ با سلام و خسته نباشیدمن ابتدا به عنوان کارشناس پشتیبان مشغول به کار شدم و از اونجایی که یکی از وظایفم کار با 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 امکان پذیر است. حجم تا ۲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 می توانید به لینک زیر مراجعه کنید https://nikamooz.com/tag/sql-server-2016/ پاسخ به دیدگاه علوي ۲۹ / ۰۷ / ۹۴ - ۰۸:۵۴ ببخشید اشتباهی لینک قبلی رو گذاشتم. منظورم این لینک بود: آیا دوران پادشاهی اوراکل در حوزه ی مدیریت پایگاه داده های عملیاتی به پایان رسیده است؟ پاسخ به دیدگاه علوي ۲۹ / ۰۷ / ۹۴ - ۰۸:۵۴ ببخشید اشتباهی لینک قبلی رو گذاشتم. منظورم این لینک بود: آیا دوران پادشاهی اوراکل در حوزه ی مدیریت پایگاه داده های عملیاتی به پایان رسیده است؟ پاسخ به دیدگاه احمد ۲۸ / ۰۷ / ۹۴ - ۱۱:۰۸ مقاله: آیا دوران پادشاهی اوراکل در حوزه ی مدیریت پایگاه داده های عملیاتی به پایان رسیده است؟ پاسخ به دیدگاه احمد ۲۸ / ۰۷ / ۹۴ - ۱۱:۰۸ مقاله: آیا دوران پادشاهی اوراکل در حوزه ی مدیریت پایگاه داده های عملیاتی به پایان رسیده است؟ پاسخ به دیدگاه احمد رضاپور ۲۸ / ۰۷ / ۹۴ - ۰۹:۳۲ با سلام با سپاس از آموزشهای خوب شما. برنامه نویس نرم افزارهای مبتنی بر پایگاه داده اسکیوال هستم. بدون دانش کافی شروع به نوشتن یک نرم افزار بازرگانی و انبارداری برای یک شرکت بزرگ کردم. با تلاش فراوان و کمک یکی از دوستان خوشبختانه توانستم کار رو به پایان برسونم. پس از حدود ۷ ماه که از نرم افزار استفاده میشود، بدلیل ثبت زیاد رکورد و استفاده از کوئری های با پرفورمنس پایین، بعضی گزارشها با سرعت پائین اجرا میشوند. میخواهم از پارتیشن بندی و سایر تکنولوژیهای کارآمد اسکیوال استفاده کنم اما بلد نیستم. پاسخ به دیدگاه علی یگانه مقدم ۲۹ / ۰۷ / ۹۴ - ۰۳:۳۱ برای اون چیزی که شما دنبالشی من دو محصول معرفی میکنمیکی جنون سرعت هست و دیگری که قابلیت های sql مفصل تر توضیح داده شده دوره آموزشی sql server ویژه برنامه نویسان هست که شامل سه سطح میشه پاسخ به دیدگاه امیدرضا اسدی ۲۸ / ۰۷ / ۹۴ - ۰۷:۴۹ با سلام. از سایت خوبتون بسیار تشکر می کنم. مطالبتان بسیار عالی است.برنامه نویس هستم. با .net و sql server کار می کنم. پاسخ به دیدگاه نسرین اکبری ۲۸ / ۰۷ / ۹۴ - ۰۶:۵۰ سلام ، نسرین اکبری هستم . چندین سال مداوم در زمینه پشتیبانی فعالیت داشتم که مستقیما با کوئری نویسی در دیتابیس حل مشکل می کردم . الانیک سالیه که فاصله گرفتم اما آموزشها و نکات شما رو دنبال می کنم . عالین . خسته نباشید . پاسخ به دیدگاه 1 2 3 4 5