اشتراکها
اشتراکها
اینفوگرافی کیفیت کد ها در سال 2016
اشتراکها
آفیس 2016 برای مک
نظرات مطالب
LocalDB FAQ
اشتراکها
مدیریت LocalDB با SqlLocalDB.exe
نظرات مطالب
مفهوم READ_COMMITTED_SNAPSHOT در EF 6
فرض کنید یک جدول نظرات دارید با این تعریف
بعد در management studio دو پنجره اجرای کوئری جدید را ایجاد کنید. در پنجره اول بنویسید:
در پنجره دوم بنویسید
- ابتدا عبارت پنجره اول را اجرا کنید. این پنجره حاوی یک تراکنش نا تمام است. شروع دارد اما به عمد پایان آنرا ذکر نکردیم.
- الان پنجره دوم را اجرا کنید.
مشاهده خواهید کرد که ... به جواب نمیرسید. کوئری اجرا نمیشود و سیستم قفل شده چون تراکنش اول commit نشده (مثلا یک تراکنش طولانی را اینجا شبیه سازی کردیم؛ یا حتی یک اشتباه در تعاریف T-SQL انجام شده).
در ادامه، عملیات این پنجرهها را دستی متوقف کنید. بعد مطابق دستوراتی که پیشتر ذکر شد، READ_COMMITTED_SNAPSHOT را روی دیتابیس فعال کنید.
مجددا دو مرحله قبل را اجرا کنید. در این حالت کوئری دوم اجرا خواهد شد، چون اطلاعات را از کپی فقط خواندنی بانک اطلاعاتی شما دریافت میکند؛ بر اساس آخرین اطلاعات commit شده در سیستم.
CREATE TABLE [BlogComments]( [Id] [int] IDENTITY(1,1) NOT NULL, [Body] [nvarchar](max) NULL, [Date1] [datetime] NOT NULL, CONSTRAINT [PK_BlogComments] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
-- در پنجره اول BEGIN TRAN UPDATE [BlogComments] SET Body='Test' WHERE id=1
-- در پنجره دوم SELECT TOP 1000 [Id] ,[Body] ,[Date1] FROM [BlogComments]
- الان پنجره دوم را اجرا کنید.
مشاهده خواهید کرد که ... به جواب نمیرسید. کوئری اجرا نمیشود و سیستم قفل شده چون تراکنش اول commit نشده (مثلا یک تراکنش طولانی را اینجا شبیه سازی کردیم؛ یا حتی یک اشتباه در تعاریف T-SQL انجام شده).
در ادامه، عملیات این پنجرهها را دستی متوقف کنید. بعد مطابق دستوراتی که پیشتر ذکر شد، READ_COMMITTED_SNAPSHOT را روی دیتابیس فعال کنید.
مجددا دو مرحله قبل را اجرا کنید. در این حالت کوئری دوم اجرا خواهد شد، چون اطلاعات را از کپی فقط خواندنی بانک اطلاعاتی شما دریافت میکند؛ بر اساس آخرین اطلاعات commit شده در سیستم.
Buffer Pool یکی از مصرف کنندگان اصلی حافظه در SQL Server است. برای مثال زمانیکه اطلاعاتی را از بانک اطلاعاتی دریافت میکنید، این دادهها در Buffer Pool کش میشوند. همچنین SQL Server اطلاعات کلیه Execution Plans را نیز در Plan Cache که جزئی از Buffer Pool است، برای استفادهی مجدد نگهداری میکند. هر چقدر حافظهی فیزیکی سرور شما بیشتر باشد، مقدار Buffer Pool نیز به همین میزان افزایش خواهد یافت که البته حداکثر آنرا میتوان در تنظیمات حافظهی سرور محدود کرد (Max Server Memory setting).
در دنیای واقعی میزان حافظهی فیزیکی سرورها محدود است. در SQL Server 2014 راه حلی برای این مشکل تحت عنوان Buffer Pool Extensions ارائه شدهاست که محل قرارگیری آنرا در تصویر ذیل مشاهده میکنید:
Buffer Pool Extensions از یک فایل ساده که به آن Extension File نیز گفته میشود، تشکیل شدهاست و امکان ذخیره سازی آن بر روی هاردهای سریعی مانند SSD Driveها میسر است. این فایل، ساختاری را همانند page file، در سیستم عامل ویندوز دارد. در این حالت بجای اضافه کردن RAM بیشتر به سرور، یک Extension File را میتوان بکار گرفت. هر زمان که Buffer Pool اصلی تحت فشار قرار گیرد (به میزان حافظهای بیش از حافظهی فیزیکی سرور نیاز باشد)، از این افزونهی فایلی استفاده خواهد شد.
اطلاعات جزئیات Buffer Pool را توسط کوئری ذیل میتوان بدست آورد:
نحوهی فعال سازی و تنظیم Buffer Pool Extensions
قبل از هر کاری بهتر است وضعیت افزونهی Buffer pool را بررسی کرد:
همانطور که ملاحظه میکنید، در حالت پیش فرض غیرفعال است.
سپس یک فایل یک گیگابایتی را به عنوان افزونهی Buffer pool ایجاد میکنیم.
توصیه شدهاست که این فایل را در یک درایور پر سرعت SSD قرار دهید؛ ولی محدودیتی از لحاظ محل قرارگیری ندارد (هر چند به نظر فقط در حالتیکه از SSD Drive استفاده شود واقعا کار میکند).
اینبار اگر کوئری اول را اجرا کنیم، چنین خروجی قابل مشاهده است:
این فایل به صورت خودکار در حین ریاستارت یا خاموش شدن سرور، حذف شده و با راه اندازی مجدد آن، باز تولید خواهد شد.
تغییر اندازهی افزونهی Buffer pool
اگر سعی کنیم، یک گیگابایت را مثلا به 10 گیگابایت افزایش دهیم:
با خطای ذیل مواجه خواهیم شد:
برای رفع این مشکل، ابتدا باید افزونهی Buffer pool را غیرفعال کرد:
سپس میتوان مجددا اندازه و یا مسیر دیگری را مشخص کرد. بهتر است اندازهی این فایل را حدود 16 برابر حداکثر میزان حافظهی سرور (Max Server Memory) تعیین کنید.
همچنین توصیه شدهاست که پس از غیرفعال کردن این افزونه، بهتر است یکبار instance جاری را ری استارت کنید.
چه زمانی بهتر است از افزونهی Buffer pool استفاده شود؟
در محیطهای read-heavy OLTP، استفاده از یک چنین افزونهای میتواند میزان کارآیی و پاسخگویی سیستم را به شدت افزایش دهد (تا 50 درصد).
سؤال: آیا غیرفعال کردن افزونهی Buffer pool سبب از دست رفتن اطلاعات میشود؟
خیر. BPE، تنها clean pages را در خود ذخیره میکند؛ یعنی تنها اطلاعاتی که Commit شدهاند در آن حضور خواهند داشت و در این حالت حذف آن یا ری استارت کردن سرور، سبب از دست رفتن اطلاعات نخواهند شد.
برای مطالعه بیشتر
Buffer Pool Extension
SQL Server 2014 Buffer Pool Extensions
Do you require a SSD to use the Buffer Pool Extension feature in SQL Server 2014
Buffer Pool Extensions in SQL Server 2014
SQL Server 2014 – Buffer Pool Extension
در دنیای واقعی میزان حافظهی فیزیکی سرورها محدود است. در SQL Server 2014 راه حلی برای این مشکل تحت عنوان Buffer Pool Extensions ارائه شدهاست که محل قرارگیری آنرا در تصویر ذیل مشاهده میکنید:
Buffer Pool Extensions از یک فایل ساده که به آن Extension File نیز گفته میشود، تشکیل شدهاست و امکان ذخیره سازی آن بر روی هاردهای سریعی مانند SSD Driveها میسر است. این فایل، ساختاری را همانند page file، در سیستم عامل ویندوز دارد. در این حالت بجای اضافه کردن RAM بیشتر به سرور، یک Extension File را میتوان بکار گرفت. هر زمان که Buffer Pool اصلی تحت فشار قرار گیرد (به میزان حافظهای بیش از حافظهی فیزیکی سرور نیاز باشد)، از این افزونهی فایلی استفاده خواهد شد.
اطلاعات جزئیات Buffer Pool را توسط کوئری ذیل میتوان بدست آورد:
Select * from sys.dm_os_buffer_descriptors
نحوهی فعال سازی و تنظیم Buffer Pool Extensions
قبل از هر کاری بهتر است وضعیت افزونهی Buffer pool را بررسی کرد:
select * from sys.dm_os_buffer_pool_extension_configuration
همانطور که ملاحظه میکنید، در حالت پیش فرض غیرفعال است.
سپس یک فایل یک گیگابایتی را به عنوان افزونهی Buffer pool ایجاد میکنیم.
ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION ON (FILENAME = 'd:\BufferPoolExt.BPE', SIZE = 1GB);
اینبار اگر کوئری اول را اجرا کنیم، چنین خروجی قابل مشاهده است:
این فایل به صورت خودکار در حین ریاستارت یا خاموش شدن سرور، حذف شده و با راه اندازی مجدد آن، باز تولید خواهد شد.
تغییر اندازهی افزونهی Buffer pool
اگر سعی کنیم، یک گیگابایت را مثلا به 10 گیگابایت افزایش دهیم:
ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION ON (FILENAME = 'd:\BufferPoolExt.BPE', SIZE = 10GB);
Could not change the value of the 'BPoolExtensionPath' property
ALTER SERVER CONFIGURATION SET BUFFER POOL EXTENSION OFF
همچنین توصیه شدهاست که پس از غیرفعال کردن این افزونه، بهتر است یکبار instance جاری را ری استارت کنید.
چه زمانی بهتر است از افزونهی Buffer pool استفاده شود؟
در محیطهای read-heavy OLTP، استفاده از یک چنین افزونهای میتواند میزان کارآیی و پاسخگویی سیستم را به شدت افزایش دهد (تا 50 درصد).
سؤال: آیا غیرفعال کردن افزونهی Buffer pool سبب از دست رفتن اطلاعات میشود؟
خیر. BPE، تنها clean pages را در خود ذخیره میکند؛ یعنی تنها اطلاعاتی که Commit شدهاند در آن حضور خواهند داشت و در این حالت حذف آن یا ری استارت کردن سرور، سبب از دست رفتن اطلاعات نخواهند شد.
برای مطالعه بیشتر
Buffer Pool Extension
SQL Server 2014 Buffer Pool Extensions
Do you require a SSD to use the Buffer Pool Extension feature in SQL Server 2014
Buffer Pool Extensions in SQL Server 2014
SQL Server 2014 – Buffer Pool Extension
اشتراکها
آشنایی با نسخه تحت لینوکس SQL Server
On 16th November 2016, Nat Friedman and James Montemagno introduced Visual Studio for Mac, the newest member of the Visual Studio family at Connect(); 2016 event. I thought let's give it a try so I installed the same and went through the project templates available in it. This blog is kind of a getting started guide to install Visual Studio For Mac.