PDA

View Full Version : Timeout تنها زمان آپدیت یک ردیف



koosha system
جمعه 01 تیر 1386, 12:28 عصر
یک جدول دارم که 60 تا فیلد داره.
وقتی می خوام Select کنم مشکلی نیست... Insert هم مشکلی نیست... فقط UPdate نمی کنه و Timeout میده...
می شه راهنمایی کنید.

koosha system
جمعه 01 تیر 1386, 12:32 عصر
منظورم 60 تا Column

mehdi.mousavi
جمعه 01 تیر 1386, 13:15 عصر
یک جدول دارم که 60 تا فیلد داره.
وقتی می خوام Select کنم مشکلی نیست... Insert هم مشکلی نیست... فقط UPdate نمی کنه و Timeout میده...
می شه راهنمایی کنید.

سلام.
جدولی با 60 ستون نشون میده که جدول بطور صحیحی طراحی نشده و (احتمالا) Entity های متفاوت در یک جدول نگهداری میشه که این مساله با Normalization Rule های بانکهای اطلاعاتی سازگار نیست. اما در مورد TimeOut: بصورت پیش فرض شما 30 ثانیه فرصت دارید که دستورتون رو اجرا کنید. مهم نیست که کدومیک از اعمال CRUD رو دارید انجام میدید. (در حالت شما هنگام Update به مشکل میخوره).

برای تغییر این زمان در ADO میتونید از Property ی CommandTimeout استفاده کنید. اگر مقدار این Property رو صفر بذارید، ADO اینقدر صبر میکنه تا فرمان اجرا بشه. که البته من مطلقا چنین کاری رو توصیه نمیکنم.

koosha system
جمعه 01 تیر 1386, 13:52 عصر
فقط یک ستون Identity داره.
سایر اطلاعات ستون ها هم اطلاعات مربوط به همون هستیند.مثل نام،نام خانوادگی و ......................

عرض کردم،فقط Update نمیشه که الان مارو دچار مشکل کرده.کسی می دونه Sql server 2000 محدودیت ستون داره یا نه؟! شاید مشل از اون جا باشه!

koosha system
جمعه 01 تیر 1386, 14:04 عصر
موقع ساخت جدول این خطا رو میده!:
Warning: The table 'tblaaaa' has been created but its maximum row size (12883) exceeds the maximum number of bytes per row (8060). INSERT or UPDATE of a row in this table will fail if the resulting row length exceeds 8060 bytes.

koosha system
جمعه 01 تیر 1386, 14:04 عصر
چرا؟! .

koosha system
جمعه 01 تیر 1386, 14:25 عصر
حل شد.راه حل:
http://www.databasejournal.com/features/mssql/article.php/1471501
ممنون از شما

AminSobati
جمعه 01 تیر 1386, 23:14 عصر
جدولی با 60 ستون نشون میده که جدول بطور صحیحی طراحی نشده و (احتمالا) Entity های متفاوت در یک جدول نگهداری میشه
نه الزاما! بعضی از Entityها ممکنه بیش از این Attribute داشته باشند

mehdi.mousavi
شنبه 02 تیر 1386, 10:32 صبح
نه الزاما! بعضی از Entityها ممکنه بیش از این Attribute داشته باشند

ممکنه! اما من ظرف 17 سال گذشته به چنین Entity ای بر نخوردم! هنر Tune کردن بانکها در همین مورد صحبت میکنه.

AminSobati
شنبه 02 تیر 1386, 12:58 عصر
هنر Tune کردن هم با پیشرفت امکانات بانکهای اطلاعاتی متحول میشه. شاید در نسخه های اولیه SQL Server پارتیشن بندی جداول بصورت Vertical کار درستی بود (چون منجر به کم شدن فیلدهای جداول مهم میشد) اما در حال حاضر با وجود Filegroup و Indexed View و ... کسی قبول نمیکنه یک جدول رو به این شکل تکه تکه کنه! صرف نظر از مسئله Tuning، اگر بعنوان مثال با نرم افزارهای خط تولید شرکت های خودرو سازی آشنایی داشته باشید، بعضی از قطعات مصرفی بالغ بر 150 خصوصیت داره. یا اگر قصد داشته باشید یک نرم افزار تحلیل کیفی منابع آب تولید کنین، خواهید دید که بیش از شصت Attribute برای اندازه گیری پارامترهای کیفیت آب باید در نظر بگیرید

mehdi.mousavi
شنبه 02 تیر 1386, 13:57 عصر
هنر Tune کردن هم با پیشرفت امکانات بانکهای اطلاعاتی متحول میشه. شاید در نسخه های اولیه SQL Server پارتیشن بندی جداول بصورت Vertical کار درستی بود (چون منجر به کم شدن فیلدهای جداول مهم میشد) اما در حال حاضر با وجود Filegroup و Indexed View و ... کسی قبول نمیکنه یک جدول رو به این شکل تکه تکه کنه! صرف نظر از مسئله Tuning، اگر بعنوان مثال با نرم افزارهای خط تولید شرکت های خودرو سازی آشنایی داشته باشید، بعضی از قطعات مصرفی بالغ بر 150 خصوصیت داره. یا اگر قصد داشته باشید یک نرم افزار تحلیل کیفی منابع آب تولید کنین، خواهید دید که بیش از شصت Attribute برای اندازه گیری پارامترهای کیفیت آب باید در نظر بگیرید

سلام.
این 150 یا 60 خصوصیت رو که میگید امروزه بصورت XML تو بانک نگه میدارن چون ممکنه فردا یه خصوصیت جدید هم به اون قطعات اضافه بشه و ... در نتیجه با یه XML Schema براحتی اینو Handle می کنن.

AminSobati
شنبه 02 تیر 1386, 14:52 عصر
در مواردی که مثال زدم Attributeها تغییر خاصی ندارند و چیزی نیست که مرتب به اونها اضافه بشه. از این مثالها هم فراوانه. نرم افزارهای مدیریت بیمارستان (HIS) برای نگهداری شرح حال بیمار یا جواب بعضی انواع آزمایش هم یک نمونه دیگه.
عرض کلیه بنده اینه که الزما زیاد بودن تعداد Attributeها دلیل بر نقص طراحی و یا بهینه نبودن اون نیست!

کیوان معینی
یک شنبه 03 تیر 1386, 14:12 عصر
اینجا یه نکته ای گفتم ، شاید به دردتون بخوره :

http://www.barnamenevis.org/forum/showthread.php?t=71187

koosha system
دوشنبه 04 تیر 1386, 05:35 صبح
متاسفانه مشکل من حل نشد.دیگه موقع ساخت دیتابیس اون اخطار رو نمی ده،ولی الان که تعداد Row ها بیشتر شد،موقع UPDATE مشکل پیش میاد و timeout می ده...
من دیگه دارم کم میارم... مشکل کجاست؟ (یک عمر گفتیم محصولات MS بهترن،حالا می بینیم که مسخره ترین خطاها تو همین برنامه هاست)

koosha system
دوشنبه 04 تیر 1386, 05:46 صبح
بعضی رکورد ها رو Update می کنه و بعضی ها رو نه:
UPDATE tblABC SET [field1] = 5 WHERE id = 48
UPDATE tblABC SET [field1] = 5 WHERE id = 2
اولی اجرا می شه،ولی دومی نه و timeout میده...

AminSobati
دوشنبه 04 تیر 1386, 14:09 عصر
متاسفانه مشکل من حل نشد.دیگه موقع ساخت دیتابیس اون اخطار رو نمی ده،ولی الان که تعداد Row ها بیشتر شد،موقع UPDATE مشکل پیش میاد و timeout می ده...
من دیگه دارم کم میارم... مشکل کجاست؟ (یک عمر گفتیم محصولات MS بهترن،حالا می بینیم که مسخره ترین خطاها تو همین برنامه هاست)

دوست عزیز برای کار با SQL Server باید نکات ظریفتر و فنی تر رو رعایت کنین تا بازده چند برابر بگیرید (بعنوان یک نرم افزار پیشرفته در مقایسه با Access). لذا در برخورد با مشکلات صبور باشید و تجربه کسب کنید.
من اگر جای شما بودم چند مسئله رو بررسی میکردم (یعنی خوبه شما هم انجام بدین و نتیجه اش رو پست کنین):

1) آیا اجرای دستور بصورت TSQL در Query Analyzer هم Timeout میده؟
2) آیا ایندکس برای فیلدی که روی اون شرط در Update گذاشتین وجود داره؟
3) Execution Plan این دستور Update میتونه بسیار کمک کنه. اگر ممکنه ازش Print Screen بگیرین

koosha system
سه شنبه 05 تیر 1386, 04:39 صبح
) آیا اجرای دستور بصورت TSQL در Query Analyzer هم Timeout میده؟
قطعا بررسی شده که در بخش SQL مطرح کردم.(بله،Timeout نمی ده.ولی عملا timeout ! هیچ وقت پایان و نتیجه نداره.بارها تا 12 دقیقه گذاشتم.اتفاقی نیفتاد و فقط در حال اجرا مارو گذاشت،کنسل کردم.در ضمن در این زمان(همین X دقیقه ای که فرمان می خواهد اجرا شود) نمی شه از دیتابیس از کانکشن دیگری( و Client دیگر) متصل شد...)

) آیا ایندکس برای فیلدی که روی اون شرط در Update گذاشتین وجود داره؟
منظورتون رو نمی فهمم.در هر صورت:
UPDATE tblABC SET [field1] = 5 WHERE id = 48
Colum های id و field1 وجود دارند.همین Query ارسال میشه...

) Execution Plan این دستور Update میتونه بسیار کمک کنه. اگر ممکنه ازش Print Screen بگیرین
در پاسخ یک عرض کردم.خطای رخ نمی دهد.

ممنون از لطف شما(که شبیه احساس مسولیته!).ممنون

AminSobati
سه شنبه 05 تیر 1386, 10:48 صبح
- ممکنه بفرمایید این جدول چند رکورد داره
- آیا دستور Update دقیقا همونی هست که ارسال کردین؟
- Exec Plan ربطی به خطا نداره. اگر میتونین پست کنین

koosha system
چهارشنبه 06 تیر 1386, 05:28 صبح
- ممکنه بفرمایید این جدول چند رکورد داره
حدود 50
- آیا دستور Update دقیقا همونی هست که ارسال کردین؟
فقط اسم جدول و فیلد اولی تغییر کرده.
- Exec Plan ربطی به خطا نداره. اگر میتونین پست کنین
عرض کردم.تا بینهایت کار طول میکشه.اتفاقی نمی افته...

AminSobati
پنج شنبه 07 تیر 1386, 00:02 صبح
جواب شما کمی برام عجیب بود! منظورتون از 50 این هست که تنها 50 رکورد دارین یا 50 هزار یا 50 میلیون؟ چون Timeout برای 50 تا رکورد عجیبه. مگر اینکه کاربرها به طور همزمان کارکنند و باعث Block شدن همدیگه بشن.
ضمنا برای Exec Plan کلید Ctrl+L رو بزنید

koosha system
پنج شنبه 07 تیر 1386, 07:17 صبح
50 رکورد(50x1).
مشکل همینجاست.اگر تعداد بالا بود،دلیل منطقی داشتیم،ولی با 50 رکورد "مشکل" میشه.
Exec Plan هم تصویر را گذاشتم.

ممنون از تلاشتون.حالا مشکل چی می تونه باشه!؟

AminSobati
پنج شنبه 07 تیر 1386, 10:05 صبح
تصویر رو کجا پست کردین؟!!

koosha system
پنج شنبه 07 تیر 1386, 14:30 عصر
کم کم داره مشکلات سیستمم زیاد می شه.باید یک فکری بشه.این timeout ها سیستم رو مشکل دار کرده...
ضمیمه ی پست 19
http://barnamenevis.org/forum/attachment.php?attachmentid=9450&d=1182911281

AminSobati
پنج شنبه 07 تیر 1386, 20:36 عصر
من در تصویر ضمیمه فقط چند خط قرمز میبینم!

koosha system
جمعه 08 تیر 1386, 10:36 صبح
شما تمایل دارید چی رو ببینید؟ خوب اتفاقی نمی افته که بنده تصویرش رو به شما نشون بدم.زمان سپری شده رو نگاه کنید... همی زمان تا بی نهایت طول می کشد.
یک حلقه ی بی پایان ایجاد کنید.چه اتفاقی افتد؟

koosha system
شنبه 09 تیر 1386, 03:48 صبح
ممنون می شم اگر جوابی هست،بدید.چون داره مشکل جدی پیش میاد.

koosha system
سه شنبه 12 تیر 1386, 13:43 عصر
جوابی نیست؟!

koosha system
پنج شنبه 21 تیر 1386, 19:40 عصر
این رو خطا قبلا می داد:
موقع ساخت:
Warning: The table 'tblaaaa' has been created but its maximum row size (12883) exceeds the maximum number of bytes per row (8060). INSERT or UPDATE of a row in this table will fail if the resulting row length exceeds 8060 bytes.

با کم کردن طول varchar ها خطا برطرف شد.حالا می گم نکنه کلا جریان همینه و حالا خطا نمی ده ولی در عمل این طوریه.چون وقتی این خطا رو میداد همین شرایط بود و timeout میداد.
چون تعداد ntext هم دارم.شاید سایز زیاد می شه و شرایط بالا به وجود میاد؟

koosha system
شنبه 06 مرداد 1386, 03:06 صبح
هنوزم مشکل دارم.خواهش می کنم اگر کسی می دنه چیزی بگه!

AminSobati
شنبه 06 مرداد 1386, 10:28 صبح
رسیدگی به بعضی از مشکلات نیاز به بررسی از نزدیک داره، چون باید خود دیتابیس و تعداد کاربران واقعی محیا باشه