بهبودهاي فايل داده پايگاه داده

SQL Server 2005 هم‌اكنون از توانايي تغيير مسير فايل‌هاي داده و ثبت وقايع يك پايگاه داده با استفاده از فرمان ALTER DATABASE پشتيباني مي‌كند. SQL Server 2000 توانايي انتقال فايل‌ها را براي پايگاه داده tempdb فراهم مي‌كرد، ولي اين مسأله براي ساير پايگاه‌هاي داده ممكن نبود. همان‌گونه كه ممكن است انتظار داشته باشيد، SQL Server 2005 از انتقال فايل‌ها تنها به عنوان يك عمل offline پشتيباني مي‌كند. مثال بعد ساختار دستوري عبارات ALTER DATABASE جديد را تشريح مي‌كند:

ALTER DATABASE <database_name>

MODIFY FILE(name=<‘data_file_name’>, filename=<‘new path’>)

 

پارتيشن‌بندي داده

بهبود جديد ديگر در SQL Server 2005، توانايي انجام پارتيشن‌بندي داده است. پارتيشن‌بندي دادهبه شما اجازه مي‌دهد تا يك شئ پايگاه داده از قبيل يك جدول يا ايندكس را به چند قطعه بشكنيد. ويژگي پارتيشن‌بندي داده جديد، مديريت جداول و ايندكس‌هاي خيلي بزرگ را تسهيل مي‌كند. پارتيشن‌بندي براي برنامه‌ها شفاف است كه تنها خود شئ پايگاه داده را مي‌بيند و از چند پارتيشني بودن حافظه مرتبط كه توسط SQL Server مديريت مي‌شود، آگاه نيست.

پارتيشن‌ها مي‌توانند ايجاد و حذف شوند، بدون اين كه بر در دسترس بودن خود شئ پايگاه داده تأثير بگذارند. لزوماً، پارتيشن‌بندي به شما امكان مي‌دهد تا حافظه داده مرتبط را به چند شئ بشكنيد، در حالي كه هنوز ديدگاه يك شكلي از شئ و تمام پارتيشن‌هاي آن را به يك برنامه نشان مي‌دهيد.

SQL Server 2005 از پارتيشن‌بندي داده براي جداول، ايندكس‌ها و ديدگاه‌هاي ايندكس‌دار پشتيباني مي‌كند. رديف واحد پايه پارتيشن‌بندي است. پارتيشن‌ها مي‌توانند برطبق مقادير موجود در ستون‌ها در يك رديف ايجاد شوند. اين مسأله، پارتيشن‌بندي افقي[2] ناميده مي‌شود. براي نمونه، يك جدول ممكن است برطبق تاريخ پارتيشن‌بندي شود كه پارتيشن متفاوتي براي هر سال ايجاد مي‌شود. اين نوع پارتيشن‌بندي طبق تاريخ به شما امكان مي‌دهد تا يك نوع پردازش پنجره‌اي تاريخ اسلايدي را انجام دهيد كه در آن مي‌توانيد پارتيشن حاوي داده سال قبل را حذف كنيد به‌طوري كه بر داده موجود در پارتيشن سال جاري هيچ تأثيري نگذارد.

پارتيشن‌بندي داده يك جفت مزيت مهم را براي هر پايگاه داده بزرگ (VLDBها) فراهم مي‌كند. پارتيشن‌هاي داده مي‌توانند مديريت داده را تسهيل كنند و به شما امكان پشتيبان‌گيري انتخابي را تنها از پارتيشن‌هاي مشخص شده مي‌دهند. مثلاً، در مورد جدول بزرگي كه طبق تاريخ پارتيشن‌بندي مي‌شود، شايد بخواهيد تنها از سال جاري پشتيبان‌گيري كنيد نه پارتيشن سال قبل. مزيت ديگر اين است كه در سيستم‌هاي چند پردازنده‌اي، مي‌توانيد يك CPU را به پردازش پارتيشن خودش اختصاص دهيد تا بازده بهبود يابد.

دو مرحله پايه‌اي براي پياده‌سازي پارتيشن‌بندي داده وجود دارد. در اولين مرحله، بايد دقيقاً تعيين كنيد كه چگونه مي‌خواهيد يك شئ معين را پارتيشن‌بندي كنيد. در دومين مرحله، بايد هر پارتيشن را به يك محل حافظه فيزيكي نسبت دهيد. پارتيشن‌هاي متفاوت مي‌توانند همگي به يك گروه فايل تكي يا پارتيشن‌هاي متفاوتي كه مي‌توانند به چند گروه فايل نگاشت شوند، نسبت داده شوند.

مثال بعد ساختار دستوري براي ايجاد يك تابع پارتيشن ساده و طرح‌واره‌اي را كه يك جدول را با استفاده از يك بخش Range پارتيشن‌بندي خواهد كرد، نشان مي‌دهد:

CREATE PARTITION FUNCTION MyPF

(int) AS RANGE LEFT FOR VALUES (50, 100)

GO

CREATE PARTITION SCHEME MyPS

AS PARTITION MyPF TO (FileGroup1)

GO

CREATE TABLE MyTable (col1 int, col2 varchar(50))

ON MyPS(col1)

GO

خط اول يك تابع پارتيشن‌بندي به نام MyPF را ايجاد مي‌كند. (int) نشان مي‌دهد كه پارتيشن‌بندي روي ستوني خواهد شد كه با استفاده از نوع داده int تعريف شده است. كلمه كليدي Range مشخص مي‌كند كه از پارتيشن‌بندي Range استفاده خواهد شد. كلمه كليدي LEFT كنترل مي‌كند كه كدام پارتيشن مقادير خط حاشيه را دريافت خواهد كرد. مقدار LEFT نشان مي‌دهد كه هر رديفي كه داراي يك مقدار است كه با كران پارتيشن تطابق دارد، بلافاصله به پارتيشن سمت چپ منتقل خواهد شد. بخش VALUES براي تعريف محل‌هاي كران پارتيشن‌ها استفاده مي‌شود. توجه به اين نكته مهم است كه اين مقادير نقاط كران هستند و نه خود پارتيشن‌ها. اين مسأله واقعاً موجب ايجاد سه پارتيشن مي‌شود: اولي كه حاوي مقادير منفي تا 50 است؛ پارتيشن دوم كه حاوي مقادير 51 تا 100 است و پارتيشن سوم كه حاوي تمام مقادير 101 به بالا است.

خط دوم يك طرح‌واره پارتيشن‌بندي به نام MyPS را ايجاد مي‌كند. بخش AS PARTITION براي مشخص كردن عمل پارتيشن‌بندي استفاده مي‌شود كه توسط اين طرح‌واره به كار خواهد رفت. اين مثال از تابع پارتيشن‌بندي MYPF استفاده مي‌كند.

بخش TO گروه فايل گروه‌هاي فايلي را تعيين مي‌كند كه پارتيشن‌ها را ذخيره خواهند كرد. اين مثال از يك گروه فايل تكي به نام FileGroup1 استفاده مي‌كند.

سپس، طرح‌واره پارتيشن بايد به جدولي ضميه شود كه پارتيشن‌بندي خواهد شد. اين مثال دستور CREATE TABLE توسعه يافته را نشان مي‌دهد كه به جدول امكان پارتيشن‌بندي شدن را مي‌دهد. اولين بخش عبارت CREATE TABLE تغيير نكرده است. اين بخش نام جدول (در اين مثال MyTable) و ستون‌هاي جدول را مشخص مي‌كند. اين جدول ساده از دو ستون به نام‌هاي col1 و col2 استفاده مي‌كند. آن‌گاه كلمه كليدي ON جديدي براي مشخص كردن طرح‌واره پارتيشن‌بندي مورد استفاده به كار مي‌رود. اين مثال از طرح‌واره پارتيشن‌بندي MyPS استفاده مي‌كند كه ايجاد كرده‌ايد و ستوني كه حاوي داده كليد پارتيشن‌بندي است، در پرانتز قرار مي‌گيرد. اين مثال از ستون col2 براي كليد پارتيشن‌بندي استفاده مي‌كند. اين ستون يك نوع داده int است كه بايد با نوع داده مشخص شده در تابع پارتيشن‌بندي تطابق داشته باشد.

محدوديت‌هايي در انواع ستون‌هايي كه مي‌توانند براي كليد پارتيشن‌بندي استفاده شوند، وجود دارد. اين محدوديت‌ها بسيار شبيه محدوديت ستون‌هايي است كه مي‌توانند در يك ايندكس به كار روند. متن ntext و انواع داده تصويري نمي‌توانند استفاده شوند. علاوه بر اين، ستون‌هاي timestamp نيز محدود شده‌اند. تنها انواع داده طبيعي “T-SQL” مي‌توانند استفاده شوند. نمي‌توانيد از يك نوع تعريف شده كاربر به عنوان كليد پارتيشن‌بندي استفاده كنيد. هرچند، مي‌توانيد از نوع داده varchar(max) جديد استفاده كنيد. هم‌چنين حد 1000 پارتيشن در هر جدول وجود دارد و تمام پارتيشن‌ها بايد در يك گروه وجود داشته باشند.