PDA

View Full Version : حجم بالای اطلاعات در دیتابیس



ghoroghchian
یک شنبه 07 خرداد 1391, 08:33 صبح
دوستان سلام

من یه برنامه با سی شارپ نوشتم و پایگاه داده اون SQL Server Experss 2005 هست این برنامه روزانه 230000 تا رکورد توش درج میشه.وقتی اطلاعات چند ماه رو خوند حدود 8 میلیون رکورد شده بود و دیگه نتونست حتی یه دستور ساده Select رو هم احرا کنه و با پیغام خطای Time out روبرو میشم.

چند ماه که هیچی من باید اطلاعات چند سال رو ذخیره کنم
من باید چیکار کنم؟

baktash.n81@gmail.com
یک شنبه 07 خرداد 1391, 09:38 صبح
سلام

1- بررسی کنید که طراحیتون درست باشه
2- جداول رو Index گذاری کنید.
3- از فایل گروپ و پارتیشن استفاده کنید.
4- Query هاتون رو بررسی کنید بهینه باشند.
5- سرور رو ارتقاع بدید.

ghoroghchian
یک شنبه 07 خرداد 1391, 09:53 صبح
دیتابیس من شامل یک جدول است کوری بهتر از این نمی شه سرور هم local است.

sssAsadi
یک شنبه 07 خرداد 1391, 10:16 صبح
دستور select ساده ای که به آن اشاره کردید چند رکورد برمیگردونه ؟... مشخصات سرورتون چیه؟... دیتا بیسی هم که شامل یک رکورد بشه جای بحث داره میشه طراحی شو بذارین

_alish_
یک شنبه 07 خرداد 1391, 10:46 صبح
خدمت دوست عزیزم بگویم بطور کلی , بمنظور بهبود سرعت دیتابیس دو راهکار کلس وجود دارد Scale Up که بطور توسعه فیزیکی سخت افزار و ویندوز می باشد و Scale Out که همان طراحی بانک شماست. اطلاعات زیادی وجود دارد که بهتر است در طراحی بانک خود بسیار دقت کنید و بهتر است قبل از اجرا و تغییرات مطالعه دقیقتر ی داشته باشید. یک اطلاعات جامع خدمت شما در زیر آورده شده که بهتر است باز هم مطالعه بیشتری داشته باشید.

ghoroghchian
سه شنبه 23 خرداد 1391, 12:56 عصر
سلام
این جدولمه
88175

این هم کوری منه
SELECT top 100 COUNT(b_num) AS [Count], datee AS [Date] FROM call WHERE (datee >= @sdate) AND (datee <= @edate) AND (b_num like +@b_num+'%' )and a_tgrp=@a_tgrp GROUP BY datee order by datee

in_chand_nafar
سه شنبه 23 خرداد 1391, 14:00 عصر
دوست عزیز جدولتون Clustered Index داره یا خیر (در تصویری که زدید PK یوخدی ؟؟؟)
اول از همه تکلیف کلاستر ایندکس رو مشخص کنید ظاهر جدول شما هیپ تشریف دارن

ghoroghchian
شنبه 27 خرداد 1391, 13:37 عصر
توي اين جدول نميتونم هيچ ركوردي(تركيبي يا تكي نميتونه) كليد بشه!
كلاستر ايندكس هم نميدونم چيه؟ميشه توضيح بدي؟

SReza1
یک شنبه 28 خرداد 1391, 08:09 صبح
حتما جدولت يك كليد داشته باشه!! اگر فيلدات unique نمي‌شوند حتما يك فيلد identitiy بايد بذاري و اونو كليد بكني! روي سرعتت خيلي اثر ميذاره(موندم كاربر زبون بستت چطور داره با سيستمت كار ميكنه!!)
موقعي كه داري index مي‌سازي ميتوني يكي از خاصيت‌هاي آن ، cluster است. اگر يك pk (كليد اصلي) داشته باشي حتما cluster index داري! البته بايد روي فيلدهايي كه ميخواهي روي آن فيلتر كني index بذاري
خوب آيا با بالا بردن كيفيت سخت‌افزار و البته بهينه كردن ساختار همه مشكل حل ميشه؟؟
به نظرم خير. چون شما حجم اطلاعاتت نسبتا بالاست ، كارهايي كه دوستان گفتند را بايد انجام بدي. اما يك مشكل ديگه وجود داره. آيا كاربر شما تمام اين اطلاعات را ميخواهد ببيند؟ مطمئنا نميتونه ! (بهش بگو آدم عاقل چطوري ميخواهي چند ميليون ركورد را ببيني !! مگه با سرعت نور ميتوني بخوني)
1- يك روش pagepage خوندن اطلاعات است كه علاوه سرعت بالا ، براي نمايش در برنامه C#‎ از هر كامپوننتي كه استفاده مي‌كني راحت load ميكنه. (مثل Google )
2- استفاده از thread و پردازش موازي
3- آيا نيازي به اطلاعات قديمي هست يا نه؟ اگر نيست ميتونيد با استفاده از table partitioning كه در sql 2008 وجود داره سرعت كارت را بالا ببري. (البته اين روش يك شمشير دو لبه است و اگر خوب اين كار رو نكني سرعتت افتضاح ميآيد پايين)

sepehr.net
یک شنبه 28 خرداد 1391, 21:16 عصر
سلام
در ادامه فرمایشات دوستان ، در مورد کش کردن اطلاعات درون C# هم یه سرچی داشته باشی بد نیست

kamrannazari
جمعه 21 مهر 1391, 13:39 عصر
سلام
در ادامه فرمایشات دوستان ، در مورد کش کردن اطلاعات درون C# هم یه سرچی داشته باشی بد نیست

سپهر جان كش براي چند ميليون ركرود جواب عكس مي ده شما بايد حتما ايندكس گذارس كني يعني همون چهار فيلدي كه در بالا در شرط استافده كردي رو دي يك ايندكس قرار بده اگر بتوني از <= و >= و يا % استفاده نكني بهتره چون اگر % رو در ابتدا يا در هر دو طرف عبارت استفاده كني اصلا از ايندكس نمي تونه براي فيلتر كردن استفاده كنه پس بهتره بعد از ايندكس گذاري كمي هم در مورد شرط ها مطالعه داشته باشي

davar_sadeghi
دوشنبه 01 آبان 1391, 08:14 صبح
برادر گرامی بنظر من اول یک sql server enterpriseنصب کن بعد داخل برنامت دیتاهارو با Datareader بخون احتمال بر طرف شدن مشکلت زیاده

pashna
سه شنبه 02 آبان 1391, 08:23 صبح
سلام،

منم در ادامهٔ فرمایشتِ دوستان چند تا نکته‌رو بگم :

اول اینکه بنظر منم خوب که ۱ فیلدِ Auto_Identity بعنوان کلید بگیری مثلا ID

دوم اینکه ۱۰۰% Non-Clustered Index روی تبل بساز ( من تبلِ با ۲۰۰،۰۰۰،۰۰۰ rows دارم ولی‌ خیلی‌ راحت جواب میده) مثلا بنظر من خوب که ۱ ایندکس روی فیلد‌های datee، b_num ، a_tgrp داشته باشی‌.

سوم اینکه File Group تبل رو از Primary جدا کن و تبل رو روی File Group خودش بذار.

چهارم اینکه اگر می‌تونی دیتا رو Archive کن، مثلا از یه تاریخی‌ به قبل که بدردت نمی‌خوره رو از این تبل بریز توی ۱ تبلِ دیگه

پنجم اینکه به نظر منم خیلی‌ خوب که از Cache کردن دیتا توی C# استفاده کنی‌