PDA

View Full Version : Connection time out



tc1000
دوشنبه 20 فروردین 1386, 18:52 عصر
با سلام
وقتی که در ASP.NET به SQL SERVER کانکت میشیم و اون رو OPEN می کنیم کی میدونه Connection Time out چقدره
اگه کسی دیتا بیس رو Close نکنه چقدر طول میکشه بصورت اتوماتیک CLOSE بشه؟

Behrouz_Rad
دوشنبه 20 فروردین 1386, 21:45 عصر
وقتی که در ASP.NET به SQL SERVER کانکت میشیم و اون رو OPEN می کنیم کی میدونه Connection Time out چقدره
Connection Timeout به طور پیش فرض 30 ثانیه است که می تونی این مقدار رو از طریق خاصیت Connect Timeout در Connection String تغییر بدی.

اگه کسی دیتا بیس رو Close نکنه چقدر طول میکشه بصورت اتوماتیک CLOSE بشه؟
هیچ وقت به Garbage Collector اعتماد نکن! پس از گذشت زمان مشخص، GC پس از گذشت میزان زمان مشخص، شی تو رو در صورتی که Release نشده باشه توسط متد Dispose اون از حافظه خارج می کنه و ...

موفق باشید.

tc1000
دوشنبه 20 فروردین 1386, 23:56 عصر
با تشکر از تئضیحات خوب شما
من توی یه دیتا بیس که روی LOCAL دارم و یوزر زیاد روی این دیتا بیس Connect میکنه یعنی تمام اینها بعد از 30 ثانیه اگز من با دستور close اونها رو نبندم خود به خود بعد از 30 ثابنه بسته میشن؟

ghabil
سه شنبه 21 فروردین 1386, 00:46 صبح
نه این Timeout ماله زمانیکه یک Query میزنی واگر SQLسرور مثلا تو 30 ثانیه جواب رو بر نگردونه Session کوئریت بسته میشه نه کانکشن به دیتابیس ، همونطوری که آقای راد گفت باید کانکشنت رو Dispose یا Close کنی.

tc1000
سه شنبه 21 فروردین 1386, 00:51 صبح
با سلام
ممنون از شما یه سئوال دیگه دارم اگه این کانکش ها close نشن همین طوری باید زیاد بشن تا وقتی که اون تعداد کانکشنی که مجوز داره تموم بشه بعد آیا امکان داره که بعد از تمام شدن این کانکشنها دیگه برنامه کار نکنه اون موقع باید چه کار کرد؟

tc1000
سه شنبه 21 فروردین 1386, 00:54 صبح
میشه یه دکمه گذاشت که وقتی اون زده شد تمام کانکشنها مربوط به کلاینتها که باز هست رو ببنده ؟ یعنی در اصل بیاد تمام کانکش نها رو اون لحطه صفر بکنه تو SQL

ghabil
سه شنبه 21 فروردین 1386, 01:01 صبح
با سلام
ممنون از شما یه سئوال دیگه دارم اگه این کانکش ها close نشن همین طوری باید زیاد بشن تا وقتی که اون تعداد کانکشنی که مجوز داره تموم بشه بعد آیا امکان داره که بعد از تمام شدن این کانکشنها دیگه برنامه کار نکنه اون موقع باید چه کار کرد؟

این چیزی که تو میگی فرق بین Managed کد و UnManaged کد هست، برای همین هم هست که استینگ ها از Manged کد استقبال میکنند، یعین وقتی که به کمبود حافظه بخوریم Garbage Collector حودش کانکشنهایی که بهشون رفرنسی نیست رو پاک میکنه، اما همونطوری که آقای راد گفت به انتظار Garbage Collector نشستن کار درستی نیست. کار درست اینه که شما با بسته شدن هر Session کانکشن مربوطش رو هم ببندی . در اینصورت لیست سشنهای باز لیست کانکشنهای باز رو هم نشونت میدن.

Behrouz_Rad
سه شنبه 21 فروردین 1386, 01:06 صبح
با سلام
ممنون از شما یه سئوال دیگه دارم اگه این کانکش ها close نشن همین طوری باید زیاد بشن تا وقتی که اون تعداد کانکشنی که مجوز داره تموم بشه بعد آیا امکان داره که بعد از تمام شدن این کانکشنها دیگه برنامه کار نکنه اون موقع باید چه کار کرد؟
البته من نمی دونم که چرا اینقدر نسبت به این موضوع اصرار داری که Connection ها رو نبندی!
به هر حال...
Connection ها در Pool قرار می گیرند و در هنگام نیاز به یک Connection، این کانکشن از Pool بازیابی میشه.
اگر متد Close یا Dispose برای بستن Connection فراخوانی نشن، این Connection ها همچنان به عنوان کانکشن های فعال و باز در نظر گرفته میشن و در صورتی که تعداد اونها زیاد بشه، DBMS شما اونها رو Reject می کنه.

موفق باشید.

tc1000
سه شنبه 21 فروردین 1386, 01:38 صبح
در ASP.NET آیا دستوری وجود دارد که بشه تمام کانکش های مربوط که توسط کلاینت باز شده بست
مثلا وقتی که logout میکنه یا وقتی که به exit sub برخرد میکنه

tc1000
سه شنبه 21 فروردین 1386, 01:40 صبح
من اصراری ندارم که این ها رو نبندم میخوام اینها رو یکجا ببندم یعنی به طور مثال اگر 10 تا کانکش دارد قبل از اینکه به End SUB برسه این کانکش ها رو ببندم یعنی یه دستور باشه که بگه تمام کانکش ها این کلاینت رو ببند.

Behrouz_Rad
سه شنبه 21 فروردین 1386, 11:53 صبح
ببین برادر!
کاری که میخوای انجام بدی، اصولا غیر منطقی است.
چه دلیلی داره که بخوای Connetion ها رو نبندی و همه رو در زمان دیگری با هم ببندی؟!
در SQL Server می تونی از ROLLBACK IMMEDIATE استفاده کنی و یا با sp_who لیست پروسس های فعال بر روی دیتابیس رو به دست بیاری و با دستور KILL یک spid رو متوقف کنی اما نباید Connecttion خودت مزاحم این کار باشه!

موفق باشید.

tc1000
چهارشنبه 09 خرداد 1386, 03:31 صبح
با سلام
چطوری میشه گفت که اگر مثلا 500 نفر به دیتا بیس همزمان کانکت شدند نفر 501 یک صفحه براش بیاره که مثلا داخلش نوشته باشه بعد مراجعه کنید