هر Database از دو فایل تشکیل شده که یکی فایل اصلی ماست و دیگری فایلی است که اطلاعات را به صورت موقت و یا لوگ شده نگهداری میکنید.(ما در اینجا حالت متداول در نظر گرفتیم و در آینده دربارهی ndf و... صحبت میکنیم)
در LDF لوگ تمام تراکنشها ذخیره میشود(تمام وقایع)(CRUD) و نحوهی ذخیره اطلاعات هم به صورت ترتیبی است. یعنی سطر به سطر ذخیره میکنه و مانند MDF به صورت Random Access نیست. ممکن است برای هر عملیات سادهای چندین سطر ثبت شود.
مشاهده میکنیم که برای دو دستور Insert. ۶ سطر اطلاعات ثبت کرده است. یعنی هر تراکنش Insert ۳ سطر اطلاعات در لوگ ذخیره میکند. که یک سطر آن برای باز کردن تراکنش است و یک سطر برای ذخیره اطلاعات و سطر دیگر برای بستن تراکنش(Transaction).
اما فایل اصلی که اطلاعات ما درون آن قرار دارد به شکل زیر ذخیره شده است.
۱-Page: واحد اصلی ذخیره اطلاعات در SQL SERVER است.
هر دیتابیس تمام اطلاعات خود را تبدیل به page میکنه و از کنار هم گذاشتن این pageها جداول واطلاعات ما تشکیل میشه. برای اطلاعات بیشتر.
طرفیت هر صفحه۸۱۹۲ بایت است اما ظرفیت مورد استفاده برای ما ۸۰۹۶ بایت است. همانطور که در تصویر میبینید مابقی فضا برای page header و... دیگه است. برای اطلاعات بیشتر
حالا شاید شما از من بپرسید تا این مقدار ریز شدن در بحث نیاز است؟ من مجبورم بگم بله. شما وقتی به عنوان فردی که میخواهد سرعت عملیات را افزایش دهد، ظاهر میشود باید از تمام عملیاتهای که یک دیتابیس برای واکشی اطلاعات انجام میدهد باخبر باشید. باید بدونید هر پpage چه میزان اطلاعات نگهداری میکند. باید بدونید وقتی ما در آینده بحث میکنیم که اجرای این دستور ۳ بار درخواست I/O داشته منظور خواندن ۳ Extents است(چند خط پایینتر توضیح دادیم.). باید حدس بزنید وقتی بحث صفحهبندی است حتما محدودیتی وجود داره که باعث این اتفاق شده پس باید طول جداول از یک حدی زیاد نکنیم. باید ابزاری داشته باشیم و یا روشی را بدونیم تا بتونیم سنجش کنیم که اگر من طول جدول افزایش بدم خروجی بهتری میتونم دریافت کنم و یا از یک جدول کمکی استفاده کنم و اطلاعات را با آن JOIN کنم.
خلاصه اینهارو گفتم تا از خواندن ادامه مطالب پشیمان نشید و فکر نکنید اطلاعات ارائه شده فقط یک کپی از سایت مایکروسافت است.
۲- Extent: به هر ۸ صفحه(page)ی متوالی یک Extent میگویند.
حجم یک Extent هم برابر با ۶۴ کیلوبایت است. و واحد هر درخواست I/O هم برابر با یک Extent است. البته فراموش نکنید که بلوکهای اطلاعاتی در SQL SERVER ۶۴ کیلوبایتی است و توصیه شده هر Alocation unit size درایوی که دیتابیس در آن است برابر ۶۴ کیلوبایت باشه.(توصیه شده است). برای اطلاعات بیشتر
خوبه اینو بدونید که دیتابیس به صورت Random Access اطلاعات ذخیره میکنه و ممکن Extent ها پشت سر هم قرار نگیرند.مانند تصویر زیر