PDA

View Full Version : مشکل Performance



Elham_gh
یک شنبه 23 بهمن 1384, 12:25 عصر
سیستمی دارم که کاربران آن تحت وب هستند(البته روی internet).Database آن تحت Windows 2003 نصب شده . همراه با Service pack. Database server , RAID 5 است (با 3 هارد )ودارای 4G Ram, می باشد. معمولا 25 کاربر جهت data entry و 20 کاربر جهت گزارش گیری به صورت همزمان با سیستم کار می کنند. این کاربران در سطح شهر بخش هستند.
اما Performance سیستم بسیار پایین است.
میزان transaction/sec , Avg . Disk Queue length , Average wait Time(Locks) , %Processor Time , Page/Sec(Memory) بسیار بالا هستند.

سرعت گزارشات بسیار پایین است. چه تنظیماتی می تواند کارگر باشد؟

لازم به ذکر است که Index ها بررسی شده اند. بعضی از Query ها از طریق Sp و بعضی مستقیما از داخل برنامه اجرا می شوند(Host Language).


و مشکلی که http://www.barnamenevis.org/forum/showthread.php?t=38459 مطرح کردم چقدر در این زمینه نقش دارد؟

mehranFX
یک شنبه 23 بهمن 1384, 13:03 عصر
سیستمی دارم که کاربران آن تحت وب هستند(البته روی internet).Database آن تحت Windows 2003 نصب شده . همراه با Service pack. Database server , RAID 5 است (با 3 هارد )ودارای 4G Ram, می باشد. معمولا 25 کاربر جهت data entry و 20 کاربر جهت گزارش گیری به صورت همزمان با سیستم کار می کنند. این کاربران در سطح شهر بخش هستند.
اما Performance سیستم بسیار پایین است.
میزان transaction/sec , Avg . Disk Queue length , Average wait Time(Locks) , %Processor Time , Page/Sec(Memory) بسیار بالا هستند.

سرعت گزارشات بسیار پایین است. چه تنظیماتی می تواند کارگر باشد؟ -1 استفاده از ایندکس مناسب.
2- استفاده از StoredPorc تا حد امکان.
3- بهینه سازی Query ها.
4- پهنای باند اتصالات اینترنتی.
5- Clustering.
و دیگه فعلاً چیزی به ذهنم نمیاد...:خجالت:

AminSobati
دوشنبه 24 بهمن 1384, 00:29 صبح
به غیر از توضیحاتی که در مورد سیستم دادین، چهار آیتم دیگه رو هم لطفا اضافه کنید:
1) حجم دیتابیس چقدره؟ (فقط دیتا، نه Log)
2) چند CPU دارید و آیا از CPUهای Hyper Thread استفاده میکنید؟ یعنی CPUهایی که هر کدوم، ممکنه جای دو CPU خودشون رو نشون بدن
3) چه مقدار از RAM توسط SQL Server اشغال شده؟
4) در طول مدت 10 دقیقه، مقدار Avg. Disk Queue Length به طور میانگین چه عددی ازش بدست میاد؟

Elham_gh
دوشنبه 24 بهمن 1384, 14:09 عصر
حجم data برابر 144G است
2 تا CPU دارد و از Hyper thread استفاده نمی کند
60 تا 65 درصد CPU را اشغال کرده است
و در حدودا 2G ,Ram مصرف می کند!!
میانگین AVG . Disk Queue length در 10 دقیقه برابر 5.901 است
Database server یک HP DL380 می باشد.

AminSobati
دوشنبه 24 بهمن 1384, 19:22 عصر
CPU که مصرفش مناسبه، RAM هم 50 درصد از کل رو مصرف میکنه. AVG . Disk Queue length اگر تقسیم بر تعداد دیسکها بشه عدد 2 بدست میاد که این هم خوبه! تعداد کاربرها هم زیاد نیست...
بقیه راهکارها رو فقط باید از نزدیک اعمال کرد، معاینه غیر حضوری بیش از این کار نمیکنه!
فقط یک توصیه: به کمک Profiler ببینین کدوم SPها بیشترین زمان رو صرف میکنند، این بهترین سر نخ رو میده تا به بقیه مشکلات ریز و درشت برسید

Elham_gh
دوشنبه 24 بهمن 1384, 19:23 عصر
با Profiler هم Sp ها رو trace کردم. جواب نمی گیرم!

واقعا مصرف Ram با توجه به این میزان کاربر مناسبه؟؟؟ 2G ؟؟!!!

AminSobati
دوشنبه 24 بهمن 1384, 21:14 عصر
بله مناسبه. با توجه به حجم دیتابیس من انتظار داشتم بیش از 2GB مصرف داشته باشه

Elham_gh
سه شنبه 25 بهمن 1384, 11:44 صبح
WOW یه اشتباه وحشتناک کردم Sorry. حجم Data , 144MG است!!
که البته الان شده 158 MG .

rabinhood_tehran
یک شنبه 14 اسفند 1384, 18:02 عصر
اگر همه این کارها شده شده و در هیچ مرحله ای اشتباه صورت نگرفته , میتونید نتیجه بگیرید که :
1 ) در سطح طراحی اشکال دارید
یا
2 ) نیاز محیط بیش از توان سخت افزاری است.

ali_abbasi22145
دوشنبه 15 اسفند 1384, 10:52 صبح
سلام
کامپوننت گزارشگیری شما چیست؟
سعی کنید layout گزارشگیری را حتی المکان کم کنید اگر تصویر در گزارش دارید و یا DBImage های شما را از نوع Jpeg کنید و با الگویتمهایی حجم آنها را کم کنید و از Thumbnail برای نمایش عکسها استفاده می کنید؟

AminSobati
چهارشنبه 17 اسفند 1384, 00:44 صبح
اگر همه این کارها شده شده و در هیچ مرحله ای اشتباه صورت نگرفته , میتونید نتیجه بگیرید که :
1 ) در سطح طراحی اشکال دارید
یا
2 ) نیاز محیط بیش از توان سخت افزاری است.
دوست عزیزم،
اگر چه این دو مورد منطقا تاثیر در Performance سیستم داره، اما چندین پارامتر دیگه قبلش باید سنجیده بشه تا بتونیم صراحتا بگیم که اشکال کار از این دو مورده.

AminSobati
چهارشنبه 17 اسفند 1384, 00:46 صبح
سلام
کامپوننت گزارشگیری شما چیست؟
سعی کنید layout گزارشگیری را حتی المکان کم کنید اگر تصویر در گزارش دارید و یا DBImage های شما را از نوع Jpeg کنید و با الگویتمهایی حجم آنها را کم کنید و از Thumbnail برای نمایش عکسها استفاده می کنید؟
دوست عزیزم،
مشکل در سمت Server هستش، نه Client! لذا کامپوننت گزارشگیری اینجا مطرح نیست.

rabinhood_tehran
چهارشنبه 17 اسفند 1384, 11:18 صبح
Amin جان میشه بیشتر بفرمایید و توضیح بدید چه موارد دیگه ای باید بررسی بشه

AminSobati
چهارشنبه 17 اسفند 1384, 13:01 عصر
به عنوان مثال بهینه نوشتن خود Queryها به قدری جزئیات و نکته داره که در موردش کتاب نوشته شده. بعد از اون، ایندکسها بسیار حائز اهمیت هستند. در اکثر مواردی که به عنوان مشاور، کار Performance Tuning انجام دادم، برنامه نویسهای سیستم تصور میکردند همه چیز طبق اصول و صحیح انجام شده. اما ...
بعضا Query بوسیله Index Tuning Wizard تست میشه و وقتی ایندکسی توصیه نمیشه، تصور میکنند که وضعیت مناسبه. اما بعد ایندکسهایی که میسازم، توسط Query Optimizer مورد استفاده قرار میگیره. این نشون میده انسان از هوش مصنوعی بهتر عمل میکنه، به ITW اعتماد نکنید

rabinhood_tehran
چهارشنبه 17 اسفند 1384, 14:17 عصر
Amin جان :
Elham گفت :


لازم به ذکر است که Index ها بررسی شده اند. بعضی از Query ها از طریق Sp و بعضی مستقیما از داخل برنامه اجرا می شوند(Host Language).

بعد mehranFX :

-
1 استفاده از ایندکس مناسب.
2- استفاده از StoredPorc تا حد امکان.
3- بهینه سازی Query ها.
4- پهنای باند اتصالات اینترنتی.
5- Clustering.
و دیگه فعلاً چیزی به ذهنم نمیاد...


مواردی که شما میفرمایید قبلا مطرح شده.
ممنون میشم اگر موارد دیگه ای رو مطرح کنید.

AminSobati
چهارشنبه 17 اسفند 1384, 17:08 عصر
در مورد ایندکسها، من خوشبین به Perfect بودن وضعیت نیستم!
و اما موارد دیگه:
- وضعیت Space Allocation در Filegroupها
- وضعیت Fragmentation در داخل دیتابیس
- بررسی سایر Counterها برای متوسط زمانی که یک Transaction منتظر بدست آوردن Lock میشه
- بررسی امکان ساخت Indexed View
- اطمینان از به روز بودن Statistics

Inspiration
چهارشنبه 17 اسفند 1384, 17:47 عصر
خوب سوال کننده که نمی تونه جواب بده! نمی شه فهمید این موارد بررسی شده یا نه!

rabinhood_tehran
چهارشنبه 17 اسفند 1384, 17:52 عصر
نوشته شده توسط rabinhood_tehran
اگر همه این کارها شده شده و در هیچ مرحله ای اشتباه صورت نگرفته , میتونید نتیجه بگیرید که :
1 ) در سطح طراحی اشکال دارید
یا
2 ) نیاز محیط بیش از توان سخت افزاری است.

AminSobati
چهارشنبه 17 اسفند 1384, 19:10 عصر
بله موافقم. در این حالت، به صورت آماری معمولا مورد دوم مشکل اصلی هستش

rabinhood_tehran
شنبه 20 اسفند 1384, 10:42 صبح
امین جان :
چند وقت پیش یک پروژه داشتم (وسط کار به من رسیده بود) که این مشکل و داشت. همه مواردی رو که ذکر شد من روش تست کردم. و بسیاری از مواردش اشکال داشت که حل شد.
پروژه به کارفرما داده شد و تایید شد. ولی به دلم نچسبید. چون به نظرم خیلی میتونست بهتر بشه.میدونی اون دلیلی که من بهش رسیدم چی بود ؟!!

درخواستها بد سازماندهی شده بودند. (منظور Query ها نیست )جوری که برای رسیدن به یک هدف , چند بار یک Join میبایست انجام بشه !!!!

اگر خواستید توضیحی بدبد , یا راه حلی اشاره کنید , لطفا با استفاده از ADO.NET , OLEDB باشه.

AminSobati
شنبه 20 اسفند 1384, 20:19 عصر
اینکه یک جدول بارها در یک Query باهاش Join انجام بدیم چیز غیر عادی نیست. فرض کنید یک جدول Users دارید و یک جدول Letters. هر نامه که ارسال میشه، از یک User به User دیگه میره. لذا شما دو بار UserID رو برای هر Letter ثبت میکنید. حالا اگر در گزارش نیاز داشته باشید تا اسم کاربر رو برای هر Letter استخراج کنید، باید جدول Letters رو دوبار Join کنین با Users تا نام ارسال کننده و گیرنده بدست بیاد. امیدوارم متوجه منظور شما شده باشم

rabinhood_tehran
یک شنبه 21 اسفند 1384, 09:52 صبح
امین جان :
فهمیدم منظورتو. ولی منظور من حلت دیگه ای بود که سربار بوجود میاره :
مثال :
اگر تعداد User های شما زیاد باشه و شما در طول مسیر ( مثلا گرفتن گزارش ) مجبور باشید که
دو بار join کنید ( برای بدست آوردن دو اطلاع مجزا ) تا مثلا متوجه شید که این USER چه نامه هایی را ارسال کرده است !!!
البته محیط پروژه من نامه و .. نود ولی شبیه مثال شما بود.
ممنونم

rabinhood_tehran
سه شنبه 23 اسفند 1384, 10:03 صبح
??????????????????????

AminSobati
سه شنبه 23 اسفند 1384, 10:30 صبح
برای بدست آوردن اینکه هر کاربر چه نامه هایی ارسال کرده یکبار Join کافیه:


SELECT U.LastName, L.LetterSubject FROM
Users U INNER JOIN Letters L
ON U.UserID=L.SenderID

rabinhood_tehran
سه شنبه 23 اسفند 1384, 11:13 صبح
منظورم این نبود !!