یک جدول دارم که 60 تا فیلد داره.
وقتی می خوام Select کنم مشکلی نیست... Insert هم مشکلی نیست... فقط UPdate نمی کنه و Timeout میده...
می شه راهنمایی کنید.
یک جدول دارم که 60 تا فیلد داره.
وقتی می خوام Select کنم مشکلی نیست... Insert هم مشکلی نیست... فقط UPdate نمی کنه و Timeout میده...
می شه راهنمایی کنید.
منظورم 60 تا Column
سلام.
جدولی با 60 ستون نشون میده که جدول بطور صحیحی طراحی نشده و (احتمالا) Entity های متفاوت در یک جدول نگهداری میشه که این مساله با Normalization Rule های بانکهای اطلاعاتی سازگار نیست. اما در مورد TimeOut: بصورت پیش فرض شما 30 ثانیه فرصت دارید که دستورتون رو اجرا کنید. مهم نیست که کدومیک از اعمال CRUD رو دارید انجام میدید. (در حالت شما هنگام Update به مشکل میخوره).
برای تغییر این زمان در ADO میتونید از Property ی CommandTimeout استفاده کنید. اگر مقدار این Property رو صفر بذارید، ADO اینقدر صبر میکنه تا فرمان اجرا بشه. که البته من مطلقا چنین کاری رو توصیه نمیکنم.
فقط یک ستون Identity داره.
سایر اطلاعات ستون ها هم اطلاعات مربوط به همون هستیند.مثل نام،نام خانوادگی و ......................
عرض کردم،فقط Update نمیشه که الان مارو دچار مشکل کرده.کسی می دونه Sql server 2000 محدودیت ستون داره یا نه؟! شاید مشل از اون جا باشه!
موقع ساخت جدول این خطا رو میده!:
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.
چرا؟! .
حل شد.راه حل:
http://www.databasejournal.com/featu...le.php/1471501
ممنون از شما
هنر Tune کردن هم با پیشرفت امکانات بانکهای اطلاعاتی متحول میشه. شاید در نسخه های اولیه SQL Server پارتیشن بندی جداول بصورت Vertical کار درستی بود (چون منجر به کم شدن فیلدهای جداول مهم میشد) اما در حال حاضر با وجود Filegroup و Indexed View و ... کسی قبول نمیکنه یک جدول رو به این شکل تکه تکه کنه! صرف نظر از مسئله Tuning، اگر بعنوان مثال با نرم افزارهای خط تولید شرکت های خودرو سازی آشنایی داشته باشید، بعضی از قطعات مصرفی بالغ بر 150 خصوصیت داره. یا اگر قصد داشته باشید یک نرم افزار تحلیل کیفی منابع آب تولید کنین، خواهید دید که بیش از شصت Attribute برای اندازه گیری پارامترهای کیفیت آب باید در نظر بگیرید
در مواردی که مثال زدم Attributeها تغییر خاصی ندارند و چیزی نیست که مرتب به اونها اضافه بشه. از این مثالها هم فراوانه. نرم افزارهای مدیریت بیمارستان (HIS) برای نگهداری شرح حال بیمار یا جواب بعضی انواع آزمایش هم یک نمونه دیگه.
عرض کلیه بنده اینه که الزما زیاد بودن تعداد Attributeها دلیل بر نقص طراحی و یا بهینه نبودن اون نیست!
اینجا یه نکته ای گفتم ، شاید به دردتون بخوره :
http://www.barnamenevis.org/sh...ad.php?t=71187
متاسفانه مشکل من حل نشد.دیگه موقع ساخت دیتابیس اون اخطار رو نمی ده،ولی الان که تعداد Row ها بیشتر شد،موقع UPDATE مشکل پیش میاد و timeout می ده...
من دیگه دارم کم میارم... مشکل کجاست؟ (یک عمر گفتیم محصولات MS بهترن،حالا می بینیم که مسخره ترین خطاها تو همین برنامه هاست)
بعضی رکورد ها رو Update می کنه و بعضی ها رو نه:
UPDATE tblABC SET [field1] = 5 WHERE id = 48
UPDATE tblABC SET [field1] = 5 WHERE id = 2
اولی اجرا می شه،ولی دومی نه و timeout میده...
دوست عزیز برای کار با SQL Server باید نکات ظریفتر و فنی تر رو رعایت کنین تا بازده چند برابر بگیرید (بعنوان یک نرم افزار پیشرفته در مقایسه با Access). لذا در برخورد با مشکلات صبور باشید و تجربه کسب کنید.
من اگر جای شما بودم چند مسئله رو بررسی میکردم (یعنی خوبه شما هم انجام بدین و نتیجه اش رو پست کنین):
1) آیا اجرای دستور بصورت TSQL در Query Analyzer هم Timeout میده؟
2) آیا ایندکس برای فیلدی که روی اون شرط در Update گذاشتین وجود داره؟
3) Execution Plan این دستور Update میتونه بسیار کمک کنه. اگر ممکنه ازش Print Screen بگیرین
) آیا اجرای دستور بصورت 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 بگیرین
در پاسخ یک عرض کردم.خطای رخ نمی دهد.
ممنون از لطف شما(که شبیه احساس مسولیته!).ممنون
- ممکنه بفرمایید این جدول چند رکورد داره
- آیا دستور Update دقیقا همونی هست که ارسال کردین؟
- Exec Plan ربطی به خطا نداره. اگر میتونین پست کنین
- ممکنه بفرمایید این جدول چند رکورد داره
حدود 50
- آیا دستور Update دقیقا همونی هست که ارسال کردین؟
فقط اسم جدول و فیلد اولی تغییر کرده.
- Exec Plan ربطی به خطا نداره. اگر میتونین پست کنین
عرض کردم.تا بینهایت کار طول میکشه.اتفاقی نمی افته...
جواب شما کمی برام عجیب بود! منظورتون از 50 این هست که تنها 50 رکورد دارین یا 50 هزار یا 50 میلیون؟ چون Timeout برای 50 تا رکورد عجیبه. مگر اینکه کاربرها به طور همزمان کارکنند و باعث Block شدن همدیگه بشن.
ضمنا برای Exec Plan کلید Ctrl+L رو بزنید
50 رکورد(50x1).
مشکل همینجاست.اگر تعداد بالا بود،دلیل منطقی داشتیم،ولی با 50 رکورد "مشکل" میشه.
Exec Plan هم تصویر را گذاشتم.
ممنون از تلاشتون.حالا مشکل چی می تونه باشه!؟
کم کم داره مشکلات سیستمم زیاد می شه.باید یک فکری بشه.این timeout ها سیستم رو مشکل دار کرده...
ضمیمه ی پست 19
https://barnamenevis.org/attach...0&d=1182911281
شما تمایل دارید چی رو ببینید؟ خوب اتفاقی نمی افته که بنده تصویرش رو به شما نشون بدم.زمان سپری شده رو نگاه کنید... همی زمان تا بی نهایت طول می کشد.
یک حلقه ی بی پایان ایجاد کنید.چه اتفاقی افتد؟
ممنون می شم اگر جوابی هست،بدید.چون داره مشکل جدی پیش میاد.
جوابی نیست؟!
این رو خطا قبلا می داد:
موقع ساخت:
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 هم دارم.شاید سایز زیاد می شه و شرایط بالا به وجود میاد؟
هنوزم مشکل دارم.خواهش می کنم اگر کسی می دنه چیزی بگه!
رسیدگی به بعضی از مشکلات نیاز به بررسی از نزدیک داره، چون باید خود دیتابیس و تعداد کاربران واقعی محیا باشه