PDA

View Full Version : تخمین حجم پایگاه داده



Arsham**
پنج شنبه 25 آذر 1389, 15:40 عصر
سلام دوستان
شهادت امام حسین(ع) رو به همه ی مسلمانان تسلیت می گم.
می خواستم بپرسم راهی برای تخیمن حجم پایگاه داده sql وجود داره؟
منظورم اینه که راهی هست که بدون اینکه توی پایگاه داده، اطلاعات بریزیم و فقط تعداد هر موجودیت رو مشخص کنیم حجم پایگاه داده رو بدست بیاریم؟

pezhvakco
پنج شنبه 25 آذر 1389, 16:28 عصر
اگه منظور شما از حجم، فضایی است که از هارد دیسک میگیره این به عوامل دیگری به غیر از نرم افزار پایگاه داده Sql هم بر میگرده .
بحث فضای هارد به ساختار پارتیشن های هارد، نوع مدیریت سیستم عامل در مورد پیکربندی هارد دیسک و داده های اون و همپنین به اون برنامه ای که می خوای باهاش کار کنی (که در این جا نرم افزار Sql است) مربوط میشه .

chasbonakam
پنج شنبه 25 آذر 1389, 23:03 عصر
سلام
حالا که صحبت از حجم بانک هست اجازه می خوام بنده هم یه سوال کوچولو بپرسم.

برای اینکه حجم بانک نامحدود بشه چی کار باید انجام بدیم؟

AminSobati
جمعه 26 آذر 1389, 10:01 صبح
سلام دوست عزیزم،
- شما میتونین با آگاهی از اینکه هر جنس فیلد چند بایت اشغال میکنه، طول هر رکورد رو تخمین بزنین و ضرب در تعداد رکوردها کنین. فرضا جدولی با دو فیلد INT معادل 8 بایت اشغال میکنه. چنانچه فرضا از varchar 50 استفاده کردین، ممکنه همیشه کل 50 کاراکتر رو پر نکنین، تخمین میزنین که بصورت میانگین 40 بایت اطلاعات در ذخیره خواهید کرد، پس 40 بایت رو به بقیه فیلدها اضافه میکنید. در مورد فیلد nvarchar دقت بفرمایید که هر کاراکترش دو بایت اشغال میکنه. یعنی nvarchar 20 اگر واقعا 20 کاراکتر اطلاعات بهش بدین، 40 بایت مصرف خواهد کرد.

- فضای دیتابیس شما محدود نیست مگر اینکه سخت افزار شما رو محدود کنه

chasbonakam
جمعه 26 آذر 1389, 10:10 صبح
- فضای دیتابیس شما محدود نیست مگر اینکه سخت افزار شما رو محدود کنه

سلامی مجدد

زمانی که یه بانک جدید می سازیم ، sql حجم بانک رو از ما سوال می کنه.


63724

میشه یه کم درباره این موضوع توضیح بدید

AminSobati
جمعه 26 آذر 1389, 20:39 عصر
سلام دوست عزیزم،
اون سایز آغازین فایل هست، نه نهایت سایز

Arsham**
شنبه 27 آذر 1389, 08:05 صبح
بابت پاسخ هاتون خیلی ممنون:تشویق:
بانکم گسترده است و نمی تونم به روشی که جناب ثباتی عزیز اشاره کردن فضایی که بانکم اشغال خواهد کرد رو بدست بیارم
هیچ راه دیگه ای نداره؟
ضمنا" از جناب پژواک می خوام لطفا" راجع به پاسخشون بیشتر توضیح بدن

AminSobati
یک شنبه 28 آذر 1389, 00:08 صبح
از sys.columns کوئری بگیرین تا براحتی سایز فیلدها رو باهم جمع بزنین، برای همه جداول!

pezhvakco
یک شنبه 28 آذر 1389, 09:48 صبح
برای محاسبه حجم پایگاه داده فقط با جدول ها و داده های اون سروکار نداریم . در یک پایگاه داده، بخش هایی دیگری که برای مدیریت اون هستند هم وجود دارند و این ها هم فضا میگیرند .
شما در هنگام نگه داری یک فایل روی هارد با کلاستر ها و سکتور ها سروکار دارین که ساختار این ها هم در فضای یک فایل بی تاثیر نیست . البته در پارتیشن هایی از نوع NTFS مدیریت کار بهتر و بهینه تر شده .

نمی گم نمیشه ولی بدست آوردن حجم فضای یک پایگاه داده به این راحتی ها نیست .

AminSobati
یک شنبه 28 آذر 1389, 10:36 صبح
شما در هنگام نگه داری یک فایل روی هارد با کلاستر ها و سکتور ها سروکار دارین که ساختار این ها هم در فضای یک فایل بی تاثیر نیست . البته در پارتیشن هایی از نوع NTFS مدیریت کار بهتر و بهینه تر شده .



دوست عزیزم موضوع رو خیلی پیچیده اش کردین! برای Capacity Planning نیازی به سرو کار پیدا کردن با ساختار بیرون از SQL Server نیست چون تفاوتش در حدی که روی تصمیم گیری شما تاثیر داشته باشه نخواهد بود. البته موضوع Capacity Planning از چند زیر مجموعه تشکیل میشه و عرض بنده در مورد تخمین سایز و رشد دیتابیس هست. در خصوص تخمین IO و CPU Usage طبعا شما با سخت افزار مواجه هستین..

Arsham**
یک شنبه 28 آذر 1389, 11:05 صبح
من یک Sp پیدا کردم که حجم یک رکورد از تیبل های موجود در بانک رو محاسبه می کنه
می خوام نظر دوستان رو بدونم، از نظر شما درسته؟:متفکر:
63807
این هم نتیجه ای که ازش گرفتم::کف:
63808

AminSobati
یک شنبه 28 آذر 1389, 12:04 عصر
دوست عزیزم تخمین زدن حجم بانک اطلاعاتی (که ظاهرا اصل سوال شما این بود) با بدست آوردن سایز جدولی که دارای رکورد هست دو موضوع جدا تلقی میشه. اگر جداول فاقد اطلاعات رو بخواین تخمین بزنین، با روشهایی که در پستهای قبلی اشاره کردم میسره. اما اگر جدول دارای رکورد باشه، میتونین با تابع براحتی میانگین سایز رکورد رو محاسبه کنین:



create database MyTestDB
go
use MyTestDB
go
create table TestEstimation(
c1 int,
c2 nvarchar(100))
go
insert TestEstimation values(1,'Hello World')
go
SELECT [avg_record_size_in_bytes] FROM sys.dm_db_index_physical_stats (
DB_ID('MyTestDB'), OBJECT_ID ('TestEstimation'), NULL, NULL, 'DETAILED')