PDA

View Full Version : محاسبه فضای مورد استفاده dataset از RAM , CPU



احمد سامعی
سه شنبه 04 مهر 1385, 10:31 صبح
درود و صد بدرود بر مردمان ایران زمین

زمانی که از دیتا ست برای کانت شدن و گرفتن اطلاعات می کنیم و از دستورات سلکت اسفاده می کنیم چطور محاسبه کنیم که چقدر از فضای RAM و CPU .... رو می گیره ؟؟؟
برای دستور سلکتی که فقط قرار یک رکورد از جدول رو برگردونه آیا دیتا ست تمام جدول رو روی RAM کش می کنه ؟ یا فقط همون رو ؟؟ یعنی با هر بار سکلت چقدر از جدول رو برمی گردونه

AminSobati
جمعه 07 مهر 1385, 13:44 عصر
هر دستور Select و یا ویرایش، باعث میشه Pageهای مورد نظر به حافظه Load بشه. شما حتی اگر یک رکورد Select کنید، کل اون Page که 8 کیلو بایت خواهد بود به حافظه Load میشه. ولی این داستان برای سمت Server هستش، در Client اطلاعات Dataset بصورت XML نگه داری میشه
--------------------
اما در مورد CPU بستگی به نوع فعالیت داره. گاهی شما یک Join بسیار پیچیده انجام میدین که فقط یک رکورد خروجی داره و شاید یک Query ساده باشه که نتیجش باز یک رکورده. این دو تا رو نمیشه مقایسه کرد و بستگی به عملیات شما داره.

احمد سامعی
جمعه 07 مهر 1385, 22:31 عصر
هر دستور Select و یا ویرایش، باعث میشه Pageهای مورد نظر به حافظه Load بشه. شما حتی اگر یک رکورد Select کنید، کل اون Page که 8 کیلو بایت خواهد بود به حافظه Load میشه. ولی این داستان برای سمت Server هستش، در Client اطلاعات Dataset بصورت XML نگه داری میشه
--------------------
اما در مورد CPU بستگی به نوع فعالیت داره. گاهی شما یک Join بسیار پیچیده انجام میدین که فقط یک رکورد خروجی داره و شاید یک Query ساده باشه که نتیجش باز یک رکورده. این دو تا رو نمیشه مقایسه کرد و بستگی به عملیات شما داره.

منون استاد
اما برای برنامه هایی که تحت ویندوز هستند سرور و میزبان یکی است ( من وب کار نمی کنم)

مثلا یک جدول با بیست هزار رکورد و خیلی خیلی بالاتر با یک جدول با ده یا صد رکود برابر ؟؟ آیا باز هم همون 8 کیلو می شه !!!!!؟؟؟
فکر نکنم اینطور باشه

یک سوال دیگه آیا زمانی که از کریستال ریپورت استفاده می شه با زمانی که دیتا ست استفاده می شه منابع( RAM , UPU ) برابر مورد استفاده می شه ؟؟

sarami
جمعه 07 مهر 1385, 23:10 عصر
ربطی به وب بودن یا نبودن نداره برنامه های تحت ویندوز هم اینگونه هستند.

به جواب دقت کنید هر page یعنی در هر page 8 کیلو

AminSobati
جمعه 07 مهر 1385, 23:28 عصر
منون استاد
اما برای برنامه هایی که تحت ویندوز هستند سرور و میزبان یکی است ( من وب کار نمی کنم)

مثلا یک جدول با بیست هزار رکورد و خیلی خیلی بالاتر با یک جدول با ده یا صد رکود برابر ؟؟ آیا باز هم همون 8 کیلو می شه !!!!!؟؟؟
فکر نکنم اینطور باشه

یک سوال دیگه آیا زمانی که از کریستال ریپورت استفاده می شه با زمانی که دیتا ست استفاده می شه منابع( RAM , UPU ) برابر مورد استفاده می شه ؟؟
اطلاعات توسط Storage Engine در Blockهای 8 کیلو بایتی (Page) ذخیره میشن. مثلا اگر هر رکورد شما 1000 بایت طول داشته باشه، تقریبا 8 تا رکورد در یک Page جا میشن. شما چه تمام Page رو Query بگیرید چه فقط یک رکوردش رو، تمام اون Page به حافظه فراخوانی میشن. ممکنه Query شما 100 Page رو فراخوانی کنه. بستگی به Query شما داره.
در مورد سوال دومتون، اگر سمت Server رو میفرمایید، قائدتا یک مقدار باید باشه. چون به هر حال هر دو مثلا یک SP رو Call میکنن. اما سمت کلاینت میتونه متفاوت باشه..

احمد سامعی
شنبه 08 مهر 1385, 16:18 عصر
اطلاعات توسط Storage Engine در Blockهای 8 کیلو بایتی (Page) ذخیره میشن. مثلا اگر هر رکورد شما 1000 بایت طول داشته باشه، تقریبا 8 تا رکورد در یک Page جا میشن. شما چه تمام Page رو Query بگیرید چه فقط یک رکوردش رو، تمام اون Page به حافظه فراخوانی میشن. ممکنه Query شما 100 Page رو فراخوانی کنه. بستگی به Query شما داره.
در مورد سوال دومتون، اگر سمت Server رو میفرمایید، قائدتا یک مقدار باید باشه. چون به هر حال هر دو مثلا یک SP رو Call میکنن. اما سمت کلاینت میتونه متفاوت باشه..

ببخشید استاد

یعنی بنابراین در هر بار دستور SELECT چه ما یک رکورد رو بخوایم چه صد تا برای دیتاست فرقی نمی کنه و تمام جدول رو کش می کنه
اینجوری وقتی بخوایم از یک جدول با چهل هزار رکورد بخوایم یک رکورد سرچ کنیم تمام این 40 هزار تا کش می شه ( برنامه من روزی بالای 300 رکورد ثبت می کنه و هر روز)
اینطوری که سرریز منابع پیدا می شه ( عوام گونه: سیستم هنگ می کنه)
چه راهی برای فرار از این مشکل داریم ؟؟؟؟
آیا از طریق ایندکس قابل حل ؟ یا راه دیگه داره ؟

AminSobati
شنبه 08 مهر 1385, 21:49 عصر
عرض بنده این بود که در سمت کلاینت، یک رکورد بخواین یا 1000 رکورد، شاید Crystal با Dataset خیلی فرقی با هم نکنند

احمد سامعی
یک شنبه 09 مهر 1385, 02:30 صبح
عرض بنده این بود که در سمت کلاینت، یک رکورد بخواین یا 1000 رکورد، شاید Crystal با Dataset خیلی فرقی با هم نکنند

ببخشید اما من تمرکزم روی ویندوز و شما که استادین ( میزبان و کلاینت اینجوری یکی می شه )
عذر می خوام :خجالت: می شه آخرین سوال رو یک بار دیگه با دقت( خلاصه: بخونین آیا وقتی که WHERE می کنیم با کلید جدول باز هم همه جدول به دیتاست کش می شه یا همون یکی ؟ )

hmm
دوشنبه 10 مهر 1385, 11:52 صبح
خب مشخصه نتیجه منتقل میشه

احمد سامعی
چهارشنبه 12 مهر 1385, 14:10 عصر
خب مشخصه نتیجه منتقل میشه


:قلب: :قلب: :قلب: :قلب:
پس اگه من جدول تعداد رکوردهاش به 100 هزار تا برسه و بخوام از توی اون فقط یکی رو SELECT کنم با دستور WHERE نباید نگران کمبود منابع بشم ؟؟؟؟ یا اشتباه فهمیدم ؟؟؟

( چون همونطور که گفتم روزانه حداقل برنامه من 200 رکود جدید ثبت می کنه که در سال ممکنه به حدود بالای 60 هزار تا برسه در کمترین حالت )(البته ببخشید هی دوباره می پرسم می خوام مطمئن بشم مشکلی به وجود نمی یاد)

AminSobati
چهارشنبه 12 مهر 1385, 19:50 عصر
عزیز دلم اگر SQL Server اینقدر نفهمه که به خاطر یک رکورد، 100000 رکورد رو نباید استخراج کنه که دیگه!! ....

احمد سامعی
پنج شنبه 13 مهر 1385, 01:45 صبح
عزیز دلم اگر SQL Server اینقدر نفهمه که به خاطر یک رکورد، 100000 رکورد رو نباید استخراج کنه که دیگه!! ....

منون استاد گیر من هم تو همین بود که نباید اینجوری باشه
از صبرتون منون:خجالت: :خجالت: :خجالت: