حجم بالای اطلاعات در دیتابیس
دوستان سلام
من یه برنامه با سی شارپ نوشتم و پایگاه داده اون SQL Server Experss 2005 هست این برنامه روزانه 230000 تا رکورد توش درج میشه.وقتی اطلاعات چند ماه رو خوند حدود 8 میلیون رکورد شده بود و دیگه نتونست حتی یه دستور ساده Select رو هم احرا کنه و با پیغام خطای Time out روبرو میشم.
چند ماه که هیچی من باید اطلاعات چند سال رو ذخیره کنم
من باید چیکار کنم؟
نقل قول: حجم بالای اطلاعات در دیتابیس
سلام
1- بررسی کنید که طراحیتون درست باشه
2- جداول رو Index گذاری کنید.
3- از فایل گروپ و پارتیشن استفاده کنید.
4- Query هاتون رو بررسی کنید بهینه باشند.
5- سرور رو ارتقاع بدید.
نقل قول: حجم بالای اطلاعات در دیتابیس
دیتابیس من شامل یک جدول است کوری بهتر از این نمی شه سرور هم local است.
نقل قول: حجم بالای اطلاعات در دیتابیس
دستور select ساده ای که به آن اشاره کردید چند رکورد برمیگردونه ؟... مشخصات سرورتون چیه؟... دیتا بیسی هم که شامل یک رکورد بشه جای بحث داره میشه طراحی شو بذارین
1 ضمیمه
نقل قول: حجم بالای اطلاعات در دیتابیس
خدمت دوست عزیزم بگویم بطور کلی , بمنظور بهبود سرعت دیتابیس دو راهکار کلس وجود دارد Scale Up که بطور توسعه فیزیکی سخت افزار و ویندوز می باشد و Scale Out که همان طراحی بانک شماست. اطلاعات زیادی وجود دارد که بهتر است در طراحی بانک خود بسیار دقت کنید و بهتر است قبل از اجرا و تغییرات مطالعه دقیقتر ی داشته باشید. یک اطلاعات جامع خدمت شما در زیر آورده شده که بهتر است باز هم مطالعه بیشتری داشته باشید.
1 ضمیمه
نقل قول: حجم بالای اطلاعات در دیتابیس
سلام
این جدولمه
ضمیمه 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
نقل قول: حجم بالای اطلاعات در دیتابیس
دوست عزیز جدولتون Clustered Index داره یا خیر (در تصویری که زدید PK یوخدی ؟؟؟)
اول از همه تکلیف کلاستر ایندکس رو مشخص کنید ظاهر جدول شما هیپ تشریف دارن
نقل قول: حجم بالای اطلاعات در دیتابیس
توي اين جدول نميتونم هيچ ركوردي(تركيبي يا تكي نميتونه) كليد بشه!
كلاستر ايندكس هم نميدونم چيه؟ميشه توضيح بدي؟
نقل قول: حجم بالای اطلاعات در دیتابیس
حتما جدولت يك كليد داشته باشه!! اگر فيلدات unique نميشوند حتما يك فيلد identitiy بايد بذاري و اونو كليد بكني! روي سرعتت خيلي اثر ميذاره(موندم كاربر زبون بستت چطور داره با سيستمت كار ميكنه!!)
موقعي كه داري index ميسازي ميتوني يكي از خاصيتهاي آن ، cluster است. اگر يك pk (كليد اصلي) داشته باشي حتما cluster index داري! البته بايد روي فيلدهايي كه ميخواهي روي آن فيلتر كني index بذاري
خوب آيا با بالا بردن كيفيت سختافزار و البته بهينه كردن ساختار همه مشكل حل ميشه؟؟
به نظرم خير. چون شما حجم اطلاعاتت نسبتا بالاست ، كارهايي كه دوستان گفتند را بايد انجام بدي. اما يك مشكل ديگه وجود داره. آيا كاربر شما تمام اين اطلاعات را ميخواهد ببيند؟ مطمئنا نميتونه ! (بهش بگو آدم عاقل چطوري ميخواهي چند ميليون ركورد را ببيني !! مگه با سرعت نور ميتوني بخوني)
1- يك روش pagepage خوندن اطلاعات است كه علاوه سرعت بالا ، براي نمايش در برنامه C# از هر كامپوننتي كه استفاده ميكني راحت load ميكنه. (مثل Google )
2- استفاده از thread و پردازش موازي
3- آيا نيازي به اطلاعات قديمي هست يا نه؟ اگر نيست ميتونيد با استفاده از table partitioning كه در sql 2008 وجود داره سرعت كارت را بالا ببري. (البته اين روش يك شمشير دو لبه است و اگر خوب اين كار رو نكني سرعتت افتضاح ميآيد پايين)
نقل قول: حجم بالای اطلاعات در دیتابیس
سلام
در ادامه فرمایشات دوستان ، در مورد کش کردن اطلاعات درون C# هم یه سرچی داشته باشی بد نیست
نقل قول: حجم بالای اطلاعات در دیتابیس
نقل قول:
نوشته شده توسط
sepehr.net
سلام
در ادامه فرمایشات دوستان ، در مورد کش کردن اطلاعات درون C# هم یه سرچی داشته باشی بد نیست
سپهر جان كش براي چند ميليون ركرود جواب عكس مي ده شما بايد حتما ايندكس گذارس كني يعني همون چهار فيلدي كه در بالا در شرط استافده كردي رو دي يك ايندكس قرار بده اگر بتوني از <= و >= و يا % استفاده نكني بهتره چون اگر % رو در ابتدا يا در هر دو طرف عبارت استفاده كني اصلا از ايندكس نمي تونه براي فيلتر كردن استفاده كنه پس بهتره بعد از ايندكس گذاري كمي هم در مورد شرط ها مطالعه داشته باشي
نقل قول: حجم بالای اطلاعات در دیتابیس
برادر گرامی بنظر من اول یک sql server enterpriseنصب کن بعد داخل برنامت دیتاهارو با Datareader بخون احتمال بر طرف شدن مشکلت زیاده
نقل قول: حجم بالای اطلاعات در دیتابیس
سلام،
منم در ادامهٔ فرمایشتِ دوستان چند تا نکتهرو بگم :
اول اینکه بنظر منم خوب که ۱ فیلدِ Auto_Identity بعنوان کلید بگیری مثلا ID
دوم اینکه ۱۰۰% Non-Clustered Index روی تبل بساز ( من تبلِ با ۲۰۰،۰۰۰،۰۰۰ rows دارم ولی خیلی راحت جواب میده) مثلا بنظر من خوب که ۱ ایندکس روی فیلدهای datee، b_num ، a_tgrp داشته باشی.
سوم اینکه File Group تبل رو از Primary جدا کن و تبل رو روی File Group خودش بذار.
چهارم اینکه اگر میتونی دیتا رو Archive کن، مثلا از یه تاریخی به قبل که بدردت نمیخوره رو از این تبل بریز توی ۱ تبلِ دیگه
پنجم اینکه به نظر منم خیلی خوب که از Cache کردن دیتا توی C# استفاده کنی